我目前正在尝试创建一个表格,该表格可以根据插入的文本进行动态调整。为此,我编写了以下代码:
\documentclass{article}
\def\lengthof#1{%
\setbox0\hbox{#1}%
\the\wd0%
}
\begin{document}
\begin{tabular}{p{\lengthof{Some Text}}} Some Text \end{tabular}
\end{document}
由于某种原因,这无法正确编译(它给出了“缺失数字,视为零”和“非法测量单位”错误代码)。这很奇怪,因为 lengthof-macro 本身可以正常工作。我做错了什么?我怀疑这与扩展顺序或模式有关,但我无法弄清楚。
(请注意,我很清楚有一些软件包可以解决这个问题,但我想在没有软件包的情况下理解这个问题,以便更好地理解 TeX 的内部工作原理。)
答案1
扩展p{argument}
为\hsize=argument
,因此就您而言:
\hsize=\setbox0\hbox{#1}\the\wd0
但这在语法上是错误的,因为\setbox
是不可扩展的 TeX 原语,而 TeX 此时需要一个 dimen。但是,如果你的宏仅用于p
参数,那么你可以通过以下方式定义它:
\def\lengthof#1{%
\hsize
\setbox0\hbox{#1}%
\hsize=\wd0
}
现在,p{\lengthof{abc}}
扩展到
\hsize=\hsize \setbox0\hbox{#1}\hsize=\wd0
这是可以的,并且会产生预期的结果。
同样的技巧也可以在 OpTeX 中使用。