\begin{document} 之前和之后更新命令的区别

\begin{document} 之前和之后更新命令的区别

我想知道当我在序言中或之后重新定义控制序列时可能是什么原因造成差异\begin{document}

例如,此代码排版A B C D当由 、 和 中的任一个pdflatex编译htlatexmk4ht oolatex

\documentclass{article}
\begin{document}
\renewcommand\b{b}
a\b cd
\end{document}

但如果\renewcommand\b{b}移至前导码,pdflatex仍会htlatex输出A B C D,而mk4ht oolatex现在将输出ac̱d也就是说b\b将会扩展为标准子长音符号 ( 0x331)。

\documentclass{article}
\renewcommand\b{b}
\begin{document}
a\b cd
\end{document}

我认为这些例子中的缺失b不是由于中的错误造成的mk4ht oolatex

答案1

以下是一些原因或考虑:

  • 从编程的角度来看,结构促进了良好的实践。因此,文档风格/结构通常在文档序言中(\documentclass和之间\begin{document})执行,而文档内容在环境中遵循document

  • 定义了一些命令来使用仅有的在序言中。随着LaTeX 内核这是通过 来识别的\@onlypreamble。其中包括\usepackage

  • 根据文档结构,您可能倾向于以分区方式构建布局。为此,您可以将结构/样式和内容插入到单个文件中,并将其包含\input在文档中的某个位置。只要使用的命令未指定为,这就可以了\@onlypreamble

  • 有些包会执行重新定义\AtBeginDocument。因此,执行常规操作\renewcommand可能不会产生预期的效果,除非您\AtBeginDocument自己将其放在 -delayed 子句中。

那么,为什么不呢?这取决于用例,但只要有一致性(仅通过结构或分隔),就没有必要遵守这条规则。

相关内容