\docuentclass[pdftex,a4paper,12pt,oneside]{book}%
\begin{document}
\newcommand{\tmpa}{}
\newcommand{\tmpb}{}
\newcommand{\tmpc}{}
\renewcommand{\tmpc}{tmpc1}
\renewcommand{\tmpa}{\tmpc}
\renewcommand{\tmpb}{\tmpc}
\noindent tmpa: \tmpa \\
tmpb: \tmpb \\
tmpc: \tmpc \\
\renewcommand{\tmpc}{tmpc2}
tmpa: \tmpa \\
tmpb: \tmpb \\
tmpc: \tmpc
\end{document}
结果:
tmpa: tmpc1
tmpb:tmpc1
tmpc: tmpc1
tmpa: tmpc2
tmpb:tmpc2
tmpc: tmpc2
改变的值会改变tmpc
其他两个变量的值。我怎样才能只分配 的值tmpc
而不产生类似 this 指针的效果?
答案1
当 TeX 找到一个宏时,它会将其扩展为現在的涵义;所以
\newcommand{\tmpa}{}
\newcommand{\tmpb}{}
\newcommand{\tmpc}{}
\renewcommand{\tmpc}{tmpc1}
\renewcommand{\tmpa}{\tmpc}
\renewcommand{\tmpb}{\tmpc}
当\tmpa
找到时,它首先被替换为\tmpc
,然后被替换tmpc1
(这是\tmpc
扩展为的定义)。
如果你想冻结含义,那么\let
就是使用说明:
\let\tmpa\tmpx
将分配给 的\tmpa
当前含义\tmpx
,并且对后一个命令的后续更改不会影响 的含义\tmpa
。
没有“LaTeX 界面” \let
,因为这些命令旨在供“程序员”而不是“用户”使用。