\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