以下是一个最小示例,演示了我不理解的某些 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