使用宏计算的数字作为表格中的 ap{} 列宽

使用宏计算的数字作为表格中的 ap{} 列宽

我目前正在尝试创建一个表格,该表格可以根据插入的文本进行动态调整。为此,我编写了以下代码:

\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 中使用。

答案2

无需重新发明轮子:

\documentclass{article}

\usepackage{calc}

\begin{document}
\begin{tabular}{|p{\widthof{Some Text}}|} Some Text \\ some longer text\end{tabular}
\end{document}

在此处输入图片描述

相关内容