当我问到如何用 LaTeX 实现某些特定布局时,我得到的答案建议我使用语义上不合理的结构。例如,我想缩进一个段落,但我被告知要将其设为没有项目符号的列表。这样做是可行的,但这不是列表的语义,那么为什么可以这样滥用它呢?
十多年前我们就不再用 HTML 做这件事了。为什么我们仍然在所谓的最佳排版系统中做与表格布局相当的事情呢?
是我没理解,还是这有点不优雅?每个人都说 LaTeX 很优雅,你不需要担心布局,但我发现自己扭曲了表格、列表和其他语义标记,把东西放在我想要的地方。皇帝没有穿衣服,还是我没理解?
答案1
当出现这样的问题时,答案是使用一些没有语义意义的东西,您应该做的是创建一个新的环境或命令,以语义上有意义的方式包装功能。
每种布局语言都存在这个问题——在某个时候,您需要找到一个物理的非语义解决方案。在 HTML 中,解决方案的非语义部分现在已由 CSS 和 JavaScript(与 HTML 不同的语言)很好地涵盖。您可以创建捕获语义的<div>
s 和<span>
s,然后使用 CSS 和 JavaScript 为这些语义定义物理布局。
在 LaTeX 中,您只需使用完全相同的语言来实现此目的:LaTeX(或纯 TeX,通常很难与 LaTeX 区分)。
答案2
在 Web 标准制定者劫持该词之前semantics
,CSS 开发人员认识到需要将内容与表示分开,并且他们已经在很大程度上实现了这一点。经过多年的开发人员将图像切片并放入表格之后,不仅机器,而且人类也可以读取 HTML 代码,这令人耳目一新。大约在同一时间,该词semantic
有了另一种色彩,这次与屏幕阅读器为读者翻译标记的能力有关accessibility
。为了实现所有这些目标,各种技术混杂在一起,CSS、HTML 及其丑陋的表亲 XHTLM、JavaScript、PHP、python 等。
更糟糕的是,我们现在有了Semantic Web
一组方法和技术,可以让机器理解万维网上信息的含义(或“语义”),这是 Tim Berners-Lee 创造的。他将语义网定义为“可以由机器直接或间接处理的数据网络”。
那么 TeX 和 LaTeX 在所有这些方面处于什么位置?您可以使其尽可能语义化。例如,以下 TeX 代码在语义上非常正确。
Lorem ipsum etc
Another paragraph of Lorem
\bye
LaTeX
情况则不同,因为首先最重要的是 系统structured documents
。它的命令通常在用户级别,这是semantic
它的优势之一。
\begin{document}
\chapter{}
Lorem...
\section{}
\bibliography{}
\end{document}
就像semantic
您使用任何其他标记语言一样!只要小心处理文本,您就可以确保它们在语义上正确且可读。某些标记将始终包含某种形式的表示数据,类似于 HTML 的问题,但通过小心定义,您可以避免这种情况。调用彩色框\colorbox{}
而不是\redbox
并使用\emph
而不是\textit
。但这说起来容易做起来难。考虑以下内容:
The evidence is, \textit{prima facie}, convincing.
和
U.S.S. \textit{Philadelphia}, U.S.S. \textit{Alabama}.
也许可以为船舶名称定义一个语义宏并使用\ship{}
,但在prima facie
哪里停止呢?
答案3
Bob,需要考虑的一件事是 LaTeX2e 已经存在了 15 年左右。还记得 15 年前的 HTML 是什么样子吗?
我认为你对过度使用表格的说法完全正确。你总是看到这种情况。一个绝对不是表格但以表格形式实现的很好的例子是具有标准类的作者列表。宏\and
很荒谬:它结束当前表格,添加一些间距,然后开始新的表格。
我认为 LaTeX3 在处理这类问题方面会好得多。但话虽如此,添加语义抽象(即另一层宏)也有不利之处,那就是错误变得更加难以诊断和修复。举一个简单的例子,你见过多少次\vspace{-.5ex}
或类似情况试图修复因使用某个软件包提供的语义宏而导致的某些间距问题?这绝对是一种权衡。
答案4
因为 TeX 是一种非常过时的文档标记语言。
TeX 或多或少是为了完成控制文档布局的简单工作而编写的。Knuth 故意拒绝将原始宏处理变为图灵完备,因为他觉得图灵完备配置语言到处泛滥成灾。事实上,我有点希望他没有这样做,而 TeX 代码主要作为高级布局语言和后端渲染器之间的中间协议而生成。
不幸的是,现在的安装基数太大了,以至于无法抛弃 TeX 而使用其他语言。我合作过的许多数学家甚至还没有改用 latex,而是出于习惯使用纯 TeX。然而,我非常希望 LuaTeX 能够逐渐将 TeX 带入一种不错的标记语言的境地。
遗憾的是,在 TeX 中生成语义上有意义的文档实在是太难了。即使是解析多个可选参数也超出了几乎所有 TeX 用户的能力,更不用说编写一个语义上有意义的宏来表达他们的新符号了。我曾尝试在我的 TeX rec-thy 包中做到这一点,但肯定没有成功。