我想知道是否有人可以给我提供一些参考资料,让我可以更详细地了解该\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
。
\count
:\the\something
提取计数器的值表示形式,以十进制数字表示\dimen
:\the\something
提取以单位“印刷点”( )表示的存储长度pt
作为十进制数,小数点后始终至少有一位数字;例如,在 之后\dimen0=2pt
,\the\dimen0
将产生2.0pt
\skip
:几乎与以前相同,但增加了plus
和minus
部分(如果为零则省略)\muskip
:与 相同\skip
,但单位为mu
\toks
: 这是一个非常特殊情况,见下文\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
将分别生成1
和97
(使用标准设置);当然,也<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/10
LaTeX 中)来代替。例如,\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。
重要笔记
\the
是可扩展。因此,虽然\def\pippo{\count100}
和\edef\pippo{\count100}
完全等价,但\edef\pippo{\the\count100}
将定义\pippo
为当前的寄存器的值。如果我们想将当前章节编号存储在 LaTeX 中,我们可以说\edef\thischapternumber{\the\value{chapter}}
。\the
\the
将对其后的标记执行扩展,只有当下一个标记是可以应用的合法标记时才停止。因此\the\value{chapter}
是可能的,因为\value{chapter}
扩展到\csname c@chapter\endcsname
然后扩展到\c@chapter
(这是通过定义的计数寄存器\countdef
)。\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
只能在寄存器前面使用,dimen
(skip
例如 LaTeX 长度)、muskip
(count
LaTeX 计数器的底层寄存器)和其他数字表达式,如\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