该etex
软件包提供了 e-TeX 功能的接口。它为 LaTeX 用户提供了哪些优势?
是否存在任何可能的缺点,例如与任何其他包不兼容,或者我可以放心地使用它吗?
答案1
e-TeX 为软件包编写者提供了许多附加功能,例如增加了寄存器数量。我发现最有用的是其扩展的跟踪功能,我通常通过软件包访问它trace
。特别是,跟踪命令和跟踪任务在尝试诊断问题时非常有用。
e-TeX 还提供了一个\middle
类似\left
和的分隔符,\right
这可能会有所帮助。
\[\left\{\sum_{i=0}^n a_i\ \middle|\ a_0<a_1<\dotsb<a_n\right\}\]
编辑:在写另一个问题的答案时,我突然想起了 e-TeX 中两个非常有用的扩展。第一个是,\unless
它允许您否定 的分支\if
。它在循环中特别有用,除非某些条件为真,否则您需要循环。读取文件就是我的例子。
\loop\unless\ifeof\file
\readline\file to\foo
% Do something with \foo
\repeat
这也显示了两个扩展中的第二个:\readline
。它的作用与完全相同\read
,只是所有字符都被赋予了类别代码 other 或 space。它对于读取包含$
、%
、^
、&
、_
或 等字符的文本非常方便\
。例如,这是一个作弊者的奎因。
\newread\file
\openin\file\jobname
\endlinechar-1
\tt
\loop\unless\ifeof\file
\readline\file to\foo
\noindent\foo\endgraf
\repeat
\bye
还有其他类别更改命令,如\scantokens
和\detokenize
,但我从未使用过。
答案2
总体上看 e-TeX 扩展,我想强调一下其他人没有提到的两点。首先,e-TeX 提供了在分配整数、维度时执行计算的原语,ETC。 例如,
\newcount\mycount
\mycount\numexpr 1 + 2 * 3\relax
\showthe\mycount
将给出7
。现在,你可以用该calc
包做类似的事情,但仅限于 LaTeX 管理的变量。我发现 e-TeX 原语特别方便Tikz
因为它直接使用 TeX 寄存器,所以不能与该calc
包一起使用。e-TeX 意味着
\tikzset{ key-name = \dimexpr 3 * \SomeDimension\relax }
工作良好。
其次,从更“概念”的角度来说,LaTeX 用户可以从使用 e-TeX 基元编写代码的软件包中获益;我想指出的是biblatex
. 作为一名程序员,e-TeX 扩展使许多事情变得更容易,并且还允许使用 TeX82 无法实现的编程思想(IETeX(由 Knuth 编写)。e-TeX 的直接影响可能不会显现给用户,但软件包的可用性肯定会显现出来。
答案3
需要指出的是,早在几年前,LaTeX 项目就正式宣布,LaTeX 有望在基于 e-TeX 的引擎上运行。换句话说:e-TeX 中提供的所有功能都应该可用于 LaTeX 内核和任何附加包。
到目前为止,LaTeX 项目团队尚未对没有 e-TeX 就无法运行的“内核”进行任何更改,但有些软件包(包括团队维护的软件包)确实需要此功能。对于所有基于 LaTeX3 的工作(例如expl3
基于的软件包)尤其如此。
该etex.sty
软件包是 LaTeX2e 的核心软件包,可启用使用正确格式化程序时无法自动使用的 e-TeX 扩展。它基于 Peter Breitenlohner 的软件包etex.src
。
答案4
etex.sty
似乎旨在将 LaTeX 转换为etex.src
纯 TeX。它似乎对于为 e-TeX(引擎)的魔法常数赋予好听的名字很有用,因此您可以\hboxgrouptype
为 2、\ligaturenode
为 7 等等进行书写。它由相当多的软件包内部加载。
它提供的另一个功能是,如果普通池耗尽,则透明地使扩展寄存器池可用。建议用户加载它,以帮助解决“没有空间容纳新事物' 错误,例如此常见问题解答