伟大的\the

伟大的\the

我想知道是否有人可以给我提供一些参考资料,让我可以更详细地了解该\the命令。毫不奇怪,搜索“the”完全没有结果。甚至查阅“全面”的 LaTeX 命令/宏列表也毫无收获。

本博客是我能找到的关于该主题的唯一处理方式,但是它提供的信息量不大。

答案1

伟大的\the

TeX 有许多寄存器和内部参数,其列表可以在 TeXbook 中找到(由 e-TeX 手册和 pdftex 手册补充,用于相应的扩展;XeTeX 和 LuaTeX 引入了更多内部参数)。

一般来说,\the\something提取分配给 的值的表示\something;分配可以是显式的(\dimen100=2cm)或隐式的(\year在 TeX 运行开始时分配其值),在某些情况下,参数是“只读的”(\badness)并且存储在其中的值已在处理期间分配。

寄存器

在下文中,\something代表所分析类型的寄存器;例如,在\newcount\pippo可以说之后\the\pippo,或者它是一个明确提到的寄存器,如\count100\dimen0

  1. \count\the\something提取计数器的值表示形式,以十进制数字表示

  2. \dimen\the\something提取以单位“印刷点”( )表示的存储长度pt作为十进制数,小数点后始终至少有一位数字;例如,在 之后\dimen0=2pt\the\dimen0将产生2.0pt

  3. \skip:几乎与以前相同,但增加了plusminus部分(如果为零则省略)

  4. \muskip:与 相同\skip,但单位为mu

  5. \toks: 这是一个非常特殊情况,见下文

  6. \box:这也是一个特殊情况\the\box0非法的(使用 和相关命令访问盒子寄存器的内容\box\copy例如\unhbox

内部参数

可以使用\the\something其中\something是内部参数;例如,\the\tolerance将表现得与案例 1 一样,\the\parindent与案例 2 一样,\the\baselineskip与案例 3 一样,\the\thinmuskip与案例 4 一样,\the\everypar与案例 5 一样。同样\the\day,、\the\month\the\year\the\time打印这些内部参数在作业开始时自动分配的值(或之后修改的值)。请注意,\time分配的是作业启动时午夜过后的分钟数(通过询问操作系统来确定)。

内部表

TeX 维护一些表(或向量):\catcode类别代码表;大小写转换表;\uccode空间因子表;数学模式下决定字符性质的表;当 TeX 寻找数学围栏时决定遇到字符时该做什么的表。在所有这些情况下,\lccode\sffcode\mathcode\delcode

\the<tablename><number>

生成存储的值来代替<number>向量;对于 (pdf)TeX,向量的长度为 256;对于 XeTeX 和 LuaTeX,向量的长度为 2^21。例如,

\the\catcode123 \the\lccode65

将分别生成197(使用标准设置);当然,也<number>可以用其他方式表示(八进制或十六进制数,或字母常数)。对于 (pdf)TeX,<number>必须介于 0 到 255 之间;对于 XeTeX 和 LuaTeX,必须介于 0 到 2097151 之间(十六进制0x1FFFFF)。

特殊用途

\the也可以在其他标记之前。

  • 如果我们说了\chardef\pippo=37,那么\the\pippo将产生37;对于 也是如此\mathchardef。表示形式将是十进制数字。

  • \the\font产生与选择当前字体的命令相对应的控制序列;因此,将全局定义在 时选择当前字体的\xdef\pippo{\the\font}命令。\pippo\xdef

  • \the\hyphenchar\font,,\the\skewchar\font\the\fontdimen<number>\font提取当前字体的相应信息;\font可以使用任何字体选择命令(例如\tenrm在 Plain TeX 或\OT1/cmr/m/n/10LaTeX 中)来代替。例如,

    \the\fontdimen2\csname OT1/cmr/m/n/10\endcsname
    

    将为所述字体提供正常的字间空间(即 3.33333pt)。

  • \the<token register>将生成(的副本)包含在<token register>;也可以使用内部标记变量:\the\everypar将生成包含在所述变量中的标记列表。

\the\font仅在(但可以代替\font任何字体选择命令)和\the<token register>\the<internal token variable>TeX 生成非字符串的内容的情况下。

\the生成一串字符时,它们都具有类别代码 12,除了空格具有类别代码 10。

重要笔记

  1. \the 可扩展。因此,虽然\def\pippo{\count100}\edef\pippo{\count100}完全等价,但\edef\pippo{\the\count100}将定义\pippo当前的寄存器的值。如果我们想将当前章节编号存储在 LaTeX 中,我们可以说\edef\thischapternumber{\the\value{chapter}}

  2. \the\the将对其后的标记执行扩展,只有当下一个标记是可以应用的合法标记时才停止。因此\the\value{chapter}是可能的,因为\value{chapter}扩展到\csname c@chapter\endcsname然后扩展到\c@chapter(这是通过定义的计数寄存器\countdef)。

  3. \the有时是多余的。例如,如果我们想保留当前的类别代码@,以便在经过一些处理后恢复它,我们可能会说

    \edef\currentatcatcode{\the\catcode`\@}
    

    但还有一种更有效的方法:

    \chardef\currentatcatcode=\catcode`\@
    

    类似地,如果我们想在最后生成的框的坏度小于 5000 或大于 5000 时采取不同的行动,我们可以说

    \ifnum\badness<5000
       \dosomething
    \else
       \dosomethingelse
    \fi
    

    类似地,要设置为存储在(预先分配的寄存器)\parindent中的值,我们不会说\normalparindent\dimen

    \parindent=\the\normalparindent
    

    但使用更简单的

    \parindent=\normalparindent
    

答案2

\the原语由底层 TeX 提供,而不是由高级 LaTeX 提供,因此 LaTeX 文本通常不讨论它。您需要阅读 TeX 书籍,例如TeXBook或其中之一有免费 TeX 书籍可供阅读喜欢TeX 按主题分类(第 12 和 14 章),或者可能是一本明确讨论这一更深层次概念的 LaTeX 书籍。

简而言之,\the只能在寄存器前面使用,dimenskip例如 LaTeX 长度)、muskipcountLaTeX 计数器的底层寄存器)和其他数字表达式,如\catcode<number>toks(令牌寄存器)以及特殊字体宏\font(可能还有其他我现在忘记的),然后将此寄存器扩展为字符串形式的值。例如\the\textwidth将扩展为当前文本宽度的字符串表示形式,如345.0pt。这对于将此类信息写入辅助文件、将它们作为文档的一部分打印(例如用于调试)和内部转换很有用。


这是免费书籍的条目缺乏耐心的 TeX,第 254f 页:

\the <token>
此命令通常扩展为代表的字符标记列表 <token><token>可以是以下任一项:

  • TeX 参数,例如\parindent\deadcycles
  • 一个寄存器,例如\count0
  • 与输入字符关联的代码,例如\catcode‘(
  • 字体参数,例如\fontdimen3\sevenbf
  • 字体的\hyphenchar\skewchar,例如\skewchar\teni \lastpenalty\lastskip\lastkern(从当前水平或垂直列表的最后一项派生的值)
  • \chardef由或定​​义的控制序列\mathchardef

此外,\the在以下两种情况下可以扩展为非字符标记:

  • \the <font>,它扩展为最近定义的控制序列,该控制序列选择与控制序列相同的字体<font>
  • \the <token variable>,扩展为变量值的副本,例如,\the\everypar

相关内容