\renewcommand 的使用会在编译过程中产生问题吗?

\renewcommand 的使用会在编译过程中产生问题吗?

我有一个非常基本的问题\renewcommand

如何危险的是不是要用这个命令?
也就是说,使用这样的命令对文件编译的稳定性有影响吗?

非常感谢您的反馈。

附言:我不确定我是否解释清楚了。

答案1

除了搞笑之外

\renewcommand{\fi}{Firenze} % a handy abbreviation

这将产生令人惊讶的错误消息

! LaTeX Error: Missing \begin{document}.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.8 \begin{document}

或者类似

\renewcommand{\box}[1]{\colorbox{red}{#1}}

这使得 TeX 遭受痛苦,直到放弃使用

! TeX capacity exceeded, sorry [grouping levels=255].
\rlap #1->\hb@xt@ \z@ 
                      {#1\hss }

还有许多其他命令在任何情况下都不应重新定义。请注意\fi\box是 TeX 原语,因此如果更改其含义,可能会出现问题。不过,还有“方便”的缩写,例如

\renewcommand{\a}{\alpha}
\renewcommand{\b}{\beta}
\renewcommand{\c}{\gamma}

我的一位同事很喜欢的 可能会产生神秘的效果。他在一封慌乱的电子邮件中向我求助,因为他与一位土耳其合著者的论文拒绝排版。猜猜怎么着?这位合著者的姓氏以“Ş”开头,这是土耳其语中很常见的字母。排版“Ş”依赖于\c即使使用直接 UTF-8 输入也不会改变。顺便说一句,也不\a应该\b重新定义和。

但在某些情况下\renewcommand是强制性的:如果你想改变表格或数组中的行间跳过,你确实应该使用

\renewcommand{\arraystretch}{<new factor>}

(默认定义赋值1)。

有些情况下\renewcommand是安全的,我通常会提到

\renewcommand{\phi}{\varphi}
\renewcommand{\epsilon}{\varepsilon}

以确保使用欧洲大陆更常见的字体。

在其他情况下,人们必须像玻璃器皿店里的大象一样小心谨慎:非常小心。

答案2

这取决于你使用什么\renewcommand!一般来说,LaTeX 不提供任何“安全性”;如果你重新定义 LaTeX 所依赖的宏或原语,最终结果可能会出现明显的错误或(可能更糟)无声问题。

话虽如此,在很多情况下,预期的它可以用来\renewcommand改变行为,所以我不会说人们应该避免使用它。

答案3

A愚蠢的\renewcommand示例文档如果不检查前面的代码就使用会发生什么:

通常\addcontentsline有 3 个参数,因此\addcontentsline{toc}{section}{Some text}将保留Some text在目录中,格式化为节条目。

但是,\renewcommand{\addcontentsline}{Oh my!}删除宏的所有三个参数,将其内容保留在输入流中。

\documentclass{article}


\begin{document}

\tableofcontents

\section{Foo}

\renewcommand{\addcontentsline}{Oh my!}

\section{Foobar}
\end{document}

因此,最后还是建议在尝试之前先查找宏的定义\renewcommand

这可以通过查看类或包代码(或在latex.ltx)来完成,阅读文档或说

\meaning\foo在文件正文中\show\foo(也可以在序言中完成

在此处输入图片描述

答案4

您始终可以使用\show查看命令的现有定义(如果已定义)。这可以在序言或文档正文中完成。结果将显示在您的控制台(或终端)中,然后程序将停止。

例如,使用LuaLaTeX(采用utf-8编码,\show\a回复说它是一个宏,定义为:

 \expandafter \@changed@cmd \csname \string #1\endcsname \relax

所以我看着它,问自己,这是我想要重新定义的东西吗?可能不是!它看起来很重要,但我不太确定它的作用。

另一方面,\show\i收益为:

TU-cmd \i \TU\i

我碰巧明白这意味着什么,而且我自己的工作中不太可能需要它。因此,我可以考虑更新该命令,因为它将\i成为我自己代码中的一个方便的宏。

相关内容