![改变变量时赋值、\setlength 和 \renewcommand 之间有什么区别?](https://linux22.com/image/387438/%E6%94%B9%E5%8F%98%E5%8F%98%E9%87%8F%E6%97%B6%E8%B5%8B%E5%80%BC%E3%80%81%5Csetlength%20%E5%92%8C%20%5Crenewcommand%20%E4%B9%8B%E9%97%B4%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB%EF%BC%9F.png)
我想将 设置\extrarowheight
为0.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
而不是做作业。