改变变量时赋值、\setlength 和 \renewcommand 之间有什么区别?

改变变量时赋值、\setlength 和 \renewcommand 之间有什么区别?

我想将 设置\extrarowheight0.5ex。我发现以下三种方法都可以适用。

\extrarowheight = 0.5ex
\setlength{\extrarowheight}{0.5ex}
\renewcommand{\extrarowheight}{0.5ex}

只是出于好奇,哪种方式是规范的?

答案1

正如评论中提到的,第一个版本是 TeX 版本的赋值,第二个版本是 LaTeX 版本的变量赋值。两者通常产生相同的结果,因为第二个版本基于第一个版本。

但是,第二个版本不太容易出错,因为它相当于\extrarowheight=0.5ex\relax可以防止解析器意外地将赋值后的多余字符误认为是新值的一部分。

但请注意,第三个版本是不是与其他两个等价,从这个意义上说是错误的。它不执行变量赋值,而是重新定义\extrarowheight为扩展为标记序列的宏0.5ex。当您尝试以下内容时,您可以看到差异:

\setlength{\extrarowheight}{0.5ex}
\show\extrarowheight

输出

\extrarowheight=\dimen104.

尽管

\renewcommand{\extrarowheight}{0.5ex}
\show\extrarowheight

输出

\extrarowheight=\long macro:
->0.5ex.

在某些情况下,使用该宏仍会产生与使用变量相同的结果,但只要您尝试以正确的方式设置变量,问题就会变得明显:

\renewcommand{\extrarowheight}{0.5ex}
\setlength{\extrarowheight}{1.0ex}

打印0.5ex1.0ex而不是做作业。

相关内容