将 \the\wd 放在组内会使其产生 0.0pt

将 \the\wd 放在组内会使其产生 0.0pt

以下是一个最小示例,演示了我不理解的某些 latex 行为。我正在使用 xelatex,但 pdflatex 中的行为似乎相同。

\documentclass{article}

\newsavebox\myboxregister
\newwrite\outputfile
\openout\outputfile=test.txt

\begin{document}

{ %%% Removing the {...} fixes the code.

\savebox{\myboxregister}{aaa}%
\usebox{\myboxregister}%
\write\outputfile{\the\wd\myboxregister}%

} %%% Removing the {...} fixes the code.

\closeout\outputfile

\end{document}

输出到文件 test.txt 的是 0.0pt,这不是框寄存器的正确宽度。如果我按照注释中所示注释掉花括号,则输出是正确的值,大约为 15 pt。

我该如何解决这个问题?我希望能够在各种环境中做这种事情。

答案1

\write是页面发送出去时发生的延迟操作,此时组已结束。此时您可以使用\immediate\write写入文件,在这种情况下,您还应该使用\immediate\openout

答案2

\write您可以在使用时扩展其内容。

\documentclass{article}

\newsavebox\myboxregister
\newwrite\outputfile
\openout\outputfile=\jobname-wd.txt

\begin{document}

{ %%% Removing the {...} fixes the code.

\savebox{\myboxregister}{aaa}%
\usebox{\myboxregister}%
\write\outputfile\expandafter{\the\wd\myboxregister}%

} %%% Removing the {...} fixes the code.

\closeout\outputfile

\end{document}

写入文件的内容:

15.00005pt

相关内容