@compatibility 条件有什么用?

@compatibility 条件有什么用?

所有标准 LaTeX 文档类(articlebookreport) 根据条件声明一些基本功能和参数@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 。\documentstylelatex209.def\documentstyle

它不应该在不打算与 一起运行的新类中使用\documentstyle。其目的只是为了确保遗留文档也可以使用 LaTeX2e 作为预加载格式正确编译,并使内核开发人员免于维护两个不同版本的标准类。

到现在为止,用户的数量\documentstyle应该已经减少到不可减少的少数士兵了。

答案3

\if@compatibility为 true 表示您处于 LaTeX 2.09 兼容模式。如果您使用

\documentstyle{article}

您正处于此模式。

source2e: "文件 L ltclass.dtx"了解更多信息。

相关内容