LaTeX 的排版限制

LaTeX 的排版限制

LaTeX 的排版限制是什么?换句话说,桌面出版和文字处理程序比 LaTeX 做得好的地方是什么?我对最好留给编辑器(拼写检查、语法检查)或某些后期处理程序(跟踪更改、字数统计)的事情并不感兴趣,而是排版类型问题。例如,LaTeX 和我真的很难取消分页符改变段落大小。我认为 MS Word 也能做得更好(尽管当你忽略段落的糟糕程度时,这显然要容易得多)。还有其他东西吗?有列表或参考资料吗?

编辑关于 alfC 的评论,从更大的角度来看,问题是 LaTeX(和软件包)目前缺少哪些其他程序中存在的功能。例如河流从概念的角度来看仍然很困难,而调整段落大小和防止分页符很容易概念化(但很难解决)。

答案1

我在文章中讨论了 TeX 的功能与高质量手工排版的比较,这些功能可以合理高效地使用(忽略图灵论证,因为它实际上没有多大帮助)E-TeX:未来 TeX 扩展指南。我最近重新评估了波士顿 TeX 会议的情况。最终论文尚未完成(希望它能在下一期 TUGboat 上发表,但演讲视频位于LaTeX 项目网站)。两次演讲都基于 TeX 是一个使用算法将其输出呈现为“作曲家”的程序这一事实讨论了 TeX 的功能和局限性。

TeX 不是图形系统,排版人员不必坐在屏幕前。因此,将 TeX 与 MS-Word 进行比较有点误导,因为本质上 TeX 格式并不试图迎合这种界面(尽管通过放弃大部分排版功能并将其留给用户,或多或少是可能的)。但是,如果您对排版限制感兴趣,那么上述文章可能是一个不错的开始 --- 并且这些限制在其他排版或桌面出版系统中均未得到解决(由于 TeX 的 box/glue/penalty 模型的内部结构,存在一些例外,例如,在 TeX 中根据页面位置更改 parshape 非常困难,但在其他系统中则不那么困难,这些系统要么以视觉方式工作,要么不关心换行符的质量,因此可以在不同的阶段进行 par 整形)。

更新

截至 2013 年 3 月,TUGboat 报告E-TeX:未来 TeX 扩展指南——回顾现在也可在项目网站上查阅。

答案2

我能想到的最大限制(严格与 InDesign 或 Word 等程序相比)如下。

请注意,我不知道任何变化会对整个系统的计算复杂性或输出质量产生什么影响。TeX 做事的速度非常快,质量接近最佳,因此可以说它处于“帕累托集”中。

但不管怎么说...

段落格式和分栏/分页是严格分开的。

因此,TeX 的段落优化算法并不“知道”某一行在页面上的位置,也无法考虑到这一点。

这会带来一些可怕的后果。我首先想到的是:

  1. 让文本在页面上“流动”非常困难,尤其是涉及分页符或底部齐平排版时。
  2. 我可以避免一次破坏页面线包含连字符或孤字符,但我无法对段落断开进行惩罚以避免它出现在这一行上。

TeX 页面上缺少大量“元信息”

颜色、z 坐标、角度、书写方向等信息以某种方式“被篡改”到构成页面的框中,或者只是隐含在内容输出的顺序中。大多数信息无法在之后检查,并且内容项之间的通信(“当它旋转时,这个框会与另一个框发生碰撞吗?”)几乎变得不可能。

TeX 具有页面构建的“瀑布”模型

每当内容离开 TeX 消化系统的一部分进入另一部分时,通常就没有回头路了。我们能做到的最好的事情就是撤消直到某个阶段的所有操作(例如,扔掉一个框而不是输出它),然后用不同的参数重试。

如果 TeX 有一个面向对象页面模型,其中每个信息可以在任何阶段自由检查、修改或重组,而“排版”和“页面构建”主要意味着重新构建对象并用元信息(“此段落在哪里被破坏,胶水被拉伸了多少”)来丰富它们,这些元信息可以在以后进行检查或修改,事情会变得容易得多。

答案3

我的回答还远未完成,但我想我还是想分享一下我的想法。我暂时想到了这些(如果以后有新的想法,我会修改我的答案)。

  1. 在执行计算量很大的 TikZ 时,你可能会遇到纸张大小的限制和一些内存限制(例如,参见此例子来自 TeXamples)。大多数情况下,可以通过优化代码、外部化某些部分或(作为最后的手段)修改 TeX 引擎可用的内存限制来克服此问题。不过,遇到此类限制的可能性很小。TeX 的设计确实非常好。

  2. 有一件事我很怀念:“无尽的”纸质文档类。:)(见我之前的问题)如您所见,在这种情况下也存在解决方法。(尽管存在 10 米的限制,但对于普通应用程序来说这应该不是问题。)

  3. 我从未见过任何形式的代码折叠在 PDF 输出文件中(很可能需要 JavaScript)。

  4. 编辑:MS Word 具有一些“高级”语法检查功能,例如,它会标记相邻出现两次的单词、标记具有不寻常结构的句子等。虽然这可能是在编辑器中实现的功能,但我不知道有哪个软件包可以在发现这些问题之一时发出警告。

答案4

使用 Pandoc 等标记转换器,现在可以生成 LaTeX 文档,而无需接触任何 LaTeX 代码。

但是,对于稍微复杂的文档,获取美观的分页符(例如考虑图形、孤行和竖行),可能仍然需要在 LaTeX 代码中手动干预。

引用弗兰克·米特尔巴赫的话:

本期内容描述了 TeX 方法中存在的基本问题:程序在构建优化的段落形状时,并不知道它们在页面上的最终位置。结果是一个“样板”,其中的列被剪切成指定的垂直尺寸。这样做的结果是,在使用 TEX 的页面构建器算法时,段落的形状不能取决于其在页面上的最终位置。

总而言之,我们似乎还没有达到那个乌托邦的境界:人们可以盲目地编写内容,而不必担心输出结果在 LaTeX 中是什么样子。无论如何,LaTeX 并非真正用于无人值守排版

因此,我现在求助于使用 PrinceXML 自动进行 CSS 排版任何长度超过一个字母的内容。我的网站上的 PDF 打印件以这种方式生成,无需任何用户干预。由于上述原因,LaTeX 2ε 无法做到这一点,尽管我尽力了!

如果你仔细想想,就会发现 HTML+CSS 正是为此而设计的:在不可预测尺寸的屏幕上进行无人值守的排版。印刷页面只是另一种媒体视口。

打印-css.rocks,可以按照无人值守 CSS 分页媒体排版的最新发展

相关内容