在文档类之前定义宏可以吗?

在文档类之前定义宏可以吗?
\def\A{E=mc^2}
\def\B{%
I can find a tool to convert PDF to EPS
in my neither bathroom nor kitchen.}

\documentclass{article}
\begin{document}
$\A$ is my favourite equation and the following is my favourite quote.
\begin{quote}
\B
\end{quote}
\end{document}

在文档类之前定义宏可以吗?有什么副作用?

答案1

TeX 按照其规则处理标记并\def\A{...}遵守这些规则。另一方面,以这种方式定义标记可能会根据加载的包而中断。即使\newcommand可能还不够,因为包可以使用 定义其宏\def,但无论如何,外层同名的宏都不能存在。

换句话说,人们应该知道正在做什么。

相反,事先定义宏\documentclass是一种众所周知的做法。假设您不想在某些情况下处理文档的某个部分。可以通过将该部分包含在

\ifdefined\dontincludethispart\else
<part not to be always included>
\fi

file.tex(我们假设该部分的条件是正确平衡的)。使用以下代码调用名为 的文件的编译:

pdflatex "\def\dontincludethispart{}\input{file}"

不会包含“秘密”部分。评论包允许使用类似的技巧,并且已在 TeX.sx 上讨论过。

答案2

是的,没问题。宏通常没有副作用。从 TeX 的角度来看,类文件并没有什么特殊之处。但是,您不应该随意定义或更改类中也设置的重要宏。当您使用 而不是 时,您甚至可以在类之前加载包\RequirePackage\usepackage当然,可能有些包依赖于在类之后加载的事实。

答案3

有些宏不应该在 documentclass 之前定义。也就是说,如果你想重新定义\section由 document class 定义的宏,那么如果你把它放在 document class 之前,重新定义将不起作用。

相关内容