宏赋值问题

宏赋值问题
\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,因为这些命令旨在供“程序员”而不是“用户”使用。

相关内容