从技术上讲,最少行数算法速度更快,而最小锯齿算法则产生更具视觉吸引力的结果。举个例子,在下图中,上半部分是一个采用“最少行数”算法的 LibreOffice 文档,而下半部分是一个采用“最小锯齿”算法的 TeX 引擎生成的 PDF 文档。你可以很容易地看到下半部分的 PDF 在右边距上看起来不那么参差不齐,更具视觉吸引力,因为换行更平衡和齐整。
Knuth Plass 换行算法
在所有换行算法中,Knuth Plass 换行算法是最小锯齿方法的黄金标准。它被各种排版引擎广泛采用,如 TeX、SILE 和 Typst 等。
回到 PPResume 的案例,PPResume 的设计目标之一是生成顶级、高质量的 PDF,因此所选的排版引擎必须具备更具视觉吸引力的换行算法,也就是说,排版引擎必须采用 Knuth Plass 换行算法。
In South Korea, corner brackets and English-style quotes are used.
In North Korea, angle quotes are used.
In China, English-style quotes (full width “ ”) are official and prevalent; corner brackets are rare today. The Unicode code points used are the English quotes (rendered as fullwidth by the font), not the fullwidth forms.
In some areas
, where traditional characters are used, corner brackets are prevalent, although English-style quotes are also used.
In the Chinese language, double angle brackets are placed around titles of books, documents, movies, pieces of art or music, magazines, newspapers, laws, etc. When nested, single angle brackets are used inside double angle brackets. With some exceptions, this usage parallels the usage of italics in English:
「你看過《三國演義》嗎?」他問我。
“Have you read Romance of the Three Kingdoms?”, he asked me.
字体搭配
当 CJK 与其他拉丁字母语言混合时,事情变得更加复杂。
首先,标点符号的形式不同。例如,逗号在中文和英文中有不同的形式:
“
English uses the comma
,
as a separator to separate parts of a sentence and items in a list, while Chinese uses a Chinese comma
,
to separate sensences, and a dedicated enumeration comma (顿号,
、
) to separate items in a list (e.g. keyword > list).
So Chinese, Japanese and Korean fonts tend to be developed by Asian designers, with an understandable emphasis on the elegance of the Asian characters. Unfortunately this can be at the expense of the design of the Latin letters, which may in some cases be really quite ugly.
The solution? Use an attractive Latin-script font for any Latin letters and numbers, and an Asian font for the Chinese, Japanese or Korean characters. Rather than making the poor typesetter manually change the font each time a Latin letter or number appears, applications such as InDesign allow Combined Fonts to be set within a document which intelligently switch the font according to the nature of each letter or character.
— Typesetting conventions and best practices for CJK (Chinese, Japanese, Korean)
在结束之前,我忍不住想给你展示一个优秀的例子,展示了 HTML 和 CSS 排版能力的极致。它使用
text-align: justify
和
hyphens: auto
来获得段落的最佳对齐布局。这几乎是 HTML 和 CSS 能做到的最好效果。如果你想用 HTML 和 CSS 进行一些排版,这将是一个很好的参考。
总之,虽然理论上可以通过 HTML 和 CSS 实现顶级排版效果,就像专用排版引擎一样,但这需要耗费大量的精力,并且可能还会面临浏览器兼容性问题。因此,至少在目前,如果需要顶级的排版,仍然建议使用专用的排版引擎,而不是手动调整 HTML 和 CSS。
优点
普适性
:HTML 和 CSS 是 web 的基础,使其在任何带有浏览器的设备上都可访问。
响应式
:HTML 和 CSS 是响应式的,可以适应任何大小的视口。
灵活性
:HTML 和 CSS 非常灵活,可以通过丰富的标准 API 进行编程。
实时预览
:HTML 和 CSS 支持实时预览。
缺点
排版控制有限
:与专用排版引擎相比,HTML/CSS 在细微排版细节上提供的控制较少。
浏览器兼容性
:不同的浏览器可能会以不同的方式渲染相同的 HTML 和 CSS,使得跨设备保持一致性具有挑战性。
一个常被问到的问题是,为什么要使用 LaTeX 而不是像 Microsoft Word 这样的文字处理器?简短的回答是:“为了美观”。Dario 写了一篇优秀的文章 The Beauty of LaTeX,其中有数十个例子展示了 Microsoft Word 和 LaTeX 之间的排版细节。我就不在这里再重复了。
总之,对于专业排版,LaTeX 在以下功能上表现出色:
带有对齐和连字符的换行
高级字体功能,如字距调整、断词、小型大写字母等
数学公式
可编程和可扩展
一致性和稳定性
跨平台兼容性
换行
TeX 拥有黄金换行算法——Knuth Plass 换行算法。毕竟 Knuth 是 TeX 的作者,对吧?
如上所述,Knuth Plass 换行算法通过将锯齿降至最低,尽力产生更美观的结果。
与许多其他系统使用的“首次拟合”方法不同,Knuth Plass 换行算法采用的是“总体拟合”换行算法。这意味着:
This is a PEG parser, which means it interprets LaTeX as a context-free language. However, TeX (and therefore LaTeX) is Turing complete, so TeX can only really be parsed by a complete Turing machine. It is not possible to parse the full TeX language with a static parser. See here (opens new window)for some interesting examples.
它也可以在浏览器中运行,因为该项目是用 Rust 编写的,并设计为能够编译为 WebAssembly。实际上,官方的 Typst web app 就是通过 WebAssembly 在浏览器中运行的。然而,这一部分并未开源:
“
Typst can be compiled to WASM, but no JS glue is available, you’d have to write that yourself. It’s not as simple as compile(string) because you also need to provide fonts, and if you want a multi-file setup of course also files.