所有标准 LaTeX 文档类(article
,book
和report
) 根据条件声明一些基本功能和参数@compatibility
。以下是从中摘录的,article.cls
定义了类可用的标准纸张尺寸选项:
\if@compatibility\else
\DeclareOption{a4paper}
{\setlength\paperheight {297mm}%
\setlength\paperwidth {210mm}}
\DeclareOption{a5paper}
{\setlength\paperheight {210mm}%
\setlength\paperwidth {148mm}}
\DeclareOption{b5paper}
{\setlength\paperheight {250mm}%
\setlength\paperwidth {176mm}}
\DeclareOption{letterpaper}
{\setlength\paperheight {11in}%
\setlength\paperwidth {8.5in}}
\DeclareOption{legalpaper}
{\setlength\paperheight {14in}%
\setlength\paperwidth {8.5in}}
\DeclareOption{executivepaper}
{\setlength\paperheight {10.5in}%
\setlength\paperwidth {7.25in}}
\DeclareOption{landscape}
{\setlength\@tempdima {\paperheight}%
\setlength\paperheight {\paperwidth}%
\setlength\paperwidth {\@tempdima}}
\fi
开始文档
\makeatletter\@compatibilitytrue\makeatother
\documentclass{<standard document class>}
跳过这些纸质定义,包括许多其他定义。这个兼容性条件有什么用?它是否允许某种形式的与 LaTeX 2.09 或其他平台的兼容性?为什么要使用它?
例如,下面的代码可以编译通过:
%\makeatletter\@compatibilityfalse\makeatother
\documentclass[a4paper]{article}
\begin{document} Hello world. \end{document}
而以下情况则会发出警告:
\makeatletter\@compatibilitytrue\makeatother
\documentclass[a4paper]{article}
\begin{document} Hello world. \end{document}
由于上述原因。
答案1
它实际上是 LaTeX 2.09 的兼容模式,如果您使用旧版本\documentstyle
而不是 ,则会启用\documentclass
该模式。它允许使用 LaTeX 2e 编译 LaTeX 2.09 文档,这在它出现时非常重要,因为大多数用户仍然拥有大量 2.09 文档。我认为这有助于让人们更快地切换到新版本。如果您必须更改所有现有文档才能编译它们,但如果您或您的某个合作伙伴想要使用旧编译器,则必须将它们改回来,那么如果您真的想更新,请三思而后行。
答案2
该开关由(或者更准确地说,在执行时读入的文件中)\if@compatibility
设置为 true 。\documentstyle
latex209.def
\documentstyle
它不应该在不打算与 一起运行的新类中使用\documentstyle
。其目的只是为了确保遗留文档也可以使用 LaTeX2e 作为预加载格式正确编译,并使内核开发人员免于维护两个不同版本的标准类。
到现在为止,用户的数量\documentstyle
应该已经减少到不可减少的少数士兵了。
答案3
\if@compatibility
为 true 表示您处于 LaTeX 2.09 兼容模式。如果您使用
\documentstyle{article}
您正处于此模式。
看source2e
: "文件 L ltclass.dtx"了解更多信息。