如何使长度宏的值随另一个宏改变

如何使长度宏的值随另一个宏改变
\documentclass[a4paper]{article}
\usepackage{xcolor,pgf,etoolbox}
\usepackage{geometry}
\geometry{showframe}
\geometry{left=1cm,right=1cm,top=1cm,bottom=1cm}
\parindent0pt

\begin{document}
\newdimen\aaa
\newdimen\bbb

\ifnum 5>4 \def\ccc{\aaa}\else\def\ccc{\bbb}\fi

\aaa30pt\the\ccc|% typeset 0.0pt, not 30.0pt.  why does \the\ccc not typeset the length of \aaa?
\ccc40pt\the\aaa % typeset 30.0pt. how to make the length of \aaa change with \ccc?

% I also tried \let instead of \def, but give the same result.
\end{document}

答案1

\aaa我不知道你在说什么,抱歉。首先\bbb不是宏。

让我们检查一下

\newdimen\aaa
\newdimen\bbb

\ifnum 5>4 \def\ccc{\aaa}\else\def\ccc{\bbb}\fi

\aaa30pt\the\ccc|% typeset 0.0pt, not 30.0pt.  why does \the\ccc not typeset the length of \aaa?
\ccc40pt\the\aaa % typeset 30.0pt. how to make the length of \aaa change with \ccc?

您已将 定义\ccc为 宏,该宏将扩展为\aaa。现在您可以

\aaa30pt\the\ccc

由于\aaa是由 声明的\newdimen,如果 TeX 发现 而\aaa它不是在寻找维度,它就会开始将值分配给寄存器;如果它发现30pt,但分配尚未执行,因为根据规则,可选空格可以跟在度量单位后面,因此 TeX 将扩展\the 完成分配。由于\the想要查看可以应用的内容,TeX 扩展\ccc并找到\aaa。好吧,我们正在扩展\the,所以 TeX 这样做,并且的值\aaa仍然是 0pt。所以我们现在处于输入流具有

\aaa30pt0.0pt

现在可以执行作业并0.0pt进行排版。

第二种情况是相同的,因为

\ccc40pt\the\aaa

变成

\aaa40pt\the\aaa

最后\aaa将被设置40pt以前的的值\aaa被打印。

所以你看你的问题的原因是缺失的空间之后pt。随着

\aaa=30pt \the\aaa

TeX 将会愉快地30.0pt打印忽略空间。

当然,如果你使用 LaTeX,你可以这样做

\setlength{\aaa}{30pt}\the\aaa

相关内容