是否存在一些简明的文档,说明对于在纯 TeX 中常见的操作,推荐/惯用的“LaTeX 方式”可以完成相同的操作?如果没有,最常见的操作是什么?
背景/背景:最近,在回答关于不寻常的页面布局的问题,我首先用纯 TeX 写了一个答案,然后开始尝试用 LaTeX 来处理它。在此过程中,我发现了一些事情,例如:
- 在 LaTeX 中(我猜在典型的文档类中也是如此),要更改主文本区域的尺寸,请不要直接更改
\hsize
和\vsize
。相反,最简单的方法是更改\textwidth
和\textheight
。 - 要控制页面输出,不要重新定义用
\output
做什么\box255
,而是重新定义\@outputpage
用 做什么\box\@outputbox
。 - 要影响页面上主文本区域的偏移量,不仅要更改
\hoffset
和\voffset
,还要更改\oddsidemargin
、\evensidemargin
、\topmargin
、\headheight
和\headsep
。 - 页码计数器不是存储在 TeX 计数寄存器中,
\pageno
而是存储在LaTeX 计数器叫page
。
这些只是例子(有些可能不对);我问的是一般情况,即有人编写了一些(相对简单的)纯 TeX 文档(了解其功能),并想将其更改为与 LaTeX 兼容。在这种情况下,需要了解哪些有用的信息?
我知道这可能不是一个有完美答案的问题,所以我对以下任何一种答案都非常满意:
在 [location] 处有这样一份文档。或者:只有几个主要内容需要了解,即 [list]。
没有这样的文档:你只需通过阅读 [Book1]、[Book2] 和/或阅读 LaTeX 源文件来学习整个 LaTeX 即可(
texdoc source2e
)。有几种类型的事物,每种类型都包含在不同类型的文档中:[X] 代表主题 [T1],[Y] 代表主题 [T2],...
如果你使用的是简单的纯 TeX,那么你需要知道的主要是 ~1000 行 提供的 LaTeX 等效功能
plain.tex
。这些功能转换成 LaTeX 后是:[…]。
编辑:有人向我指出,在 LaTeX 文档中,应该简单地不是做上述任何一件事。我完全同意!
我应该早点把这一点说清楚,但我自己没有想清楚:
在 LaTeX 文档中,作为 LaTeX 的“用户”,应该不是诉诸这种“原始”排版。(因此,如果以 LaTeX 用户的身份提出上述问题,那么答案是“不要这样做”。)相反,人们将自己的意图表达为对包提供的命令的调用的某种组合。
在 LaTeX 包或类中作为包/类的作者,是唯一可以摆弄排版的地方。我的问题是关于这部分:在哪里可以学习这些普通 TeX 命令的 LaTeX 等效命令,以在 LaTeX 中完成常见的排版解决方案?(我确实理解您还应该提供良好的命令,以便您的包的用户能够逻辑/语义地表达自己。)
例如,来自 plain-TeX 版本链接答案的修订版本 1,为了得到一些可以在 LaTeX 中编译的东西(假设我想把它做成一个包),我通过阅读source2e.pdf
、阅读其他类似解决方案的包实现(注释不充分)、随机搜索互联网和这个网站、使用\show
和\message
调试正在发生的事情,有时纯粹是猜测,拼凑了一些东西。我的问题是:如果你想编写一个包来完成某种排版,那么在哪里可以学到这个呢?
答案1
首先是一些个人经历:我负责技术方面的一个会议论文集,其中有几篇论文需要整理。其中一篇是 Word 格式的:我要求打印出来,然后按照打印输出逐行转换“另存为文本”版本。
另一个是纯 TeX 格式的。转换过程相当简单:我将初始宏定义改为使用\newcommand
或\newtheorem
;然后我浏览文档,翻译成 LaTeX 是一个相当简短且简单的工作。
更痛苦的是将大多数论文从作者的 LaTeX 概念翻译成真实的一。
关于您在列表中提出的具体观点,以下是我的看法。
你绝不在 LaTeX 文档中使用
\hsize
,甚至在序言中也不行(唯一的例外,使用 的一些技巧tabularx
)。使用\textwidth
并不“更简单”:你会说在英国靠左行驶更简单吗?嗯,是一样的:使用 设置文本宽度\hsize
就像在英国靠右行驶一样。你绝不(无一例外)改变
\@outputpage
,除非你的名字是弗兰克并且你是德国人(加上一些其他严格的条件)。虽然可以通过明确更改
\oddsidemargin
和朋友来指定页面参数,但使用 会更好geometry
。顺便说一句,\hoffset
和\voffset
应该始终为零。当前页码值可通过
\thepage
(根据所选的编号样式而变化)访问。使用\value{page}
(或\c@page
)应该很少见。此外,不应\pageno
在纯 TeX 文档中使用 ,但\folio
,这类似于\thepage
。
可能您的第 2 点是关于添加页眉和页脚的结构;这是通过诸如或之类的包fancyhdr
完成scrlayer-scrpage
的titleps
。
如果您使用\beginsection
和\proclaim
,则切换到 LaTeX 并不困难;当然,您将删除所有手动分配的数字。
大多数常见的纯 TeX 结构在 LaTeX 中也能使用;手册\line
中提到了具有不同含义的结构。当然,字体选择命令不起作用。
然而,普通的 TeX 宏在 LaTeX 中也能工作,这并不意味着我们可以保留它。一个典型的例子是\centerline
,它在 LaTeX 文档中基本上没有位置(例如,它不是颜色安全的),但也不\root 3\of{2017}
应该使用。
是的,我知道\centerline
在某些情况下这可以让我简单地摆脱问题,但这种用法应该始终埋在序言中定义的宏中。
我之前提到的结构良好的纯 TeX 文档,是用逻辑方式编写的,带有一致的标记。标记与 LaTeX 中的标记不同,但这不是问题:我只需要制作一个翻译表并应用一些搜索和替换。
一份写得不好的文档,使用纯 TeX、AMS-TeX、ConTeXt、LaTeX、Lollipop 或任何格式,都是写得不好,有时使其成为原始格式的有效文档也很麻烦。
答案2
也许我的建议不能满足你问题的“简洁”要求,而且我仍然不清楚你到底想要什么;但恕我直言,我怀疑是否有一种简单的方法可以像你所说的那样从 Plain 过渡到 LaTeX hacker。据我所知,没有针对 LaTeX2e 的 LaTeX 编程手册,而计划用于 LaTeX3 的手册仍然相当基础。因此,在此期间,我建议你找一本 Winter Snow 的TeX 初学者指南作者偶尔会将一些 Plain hack 与 LaTeX hack 进行比较。