类变量

类变量

我正在探索类选项的使用,我的印象是在类声明时呈现的可选参数随后会呈现给此后使用的所有包。

有人能向我解释为什么下面的操作没有产生我期望的输出,即将几何参数(左、右、上、下)传递给几何包。

\documentclass[left=0cm,right=0cm,top=0cm,bottom=0cm]{article}

\usepackage{geometry}
\usepackage{lipsum}

\begin{document}
    \lipsum[1-10]

\end{document} 

答案1

尽管geometry是为了调整纸张和文本块布局,它也帮了我们一个忙,覆写可以在文档类级别定义的内容。例如,

\documentclass[landscape]{article}
\usepackage{lipsum}
\begin{document}
\lipsum[1-10]
\end{lipsum}

正常运行,因为article班级有一个定义好的处理landscape选项的方法:

\DeclareOption{landscape}
   {\setlength\@tempdima   {\paperheight}%
    \setlength\paperheight {\paperwidth}%
    \setlength\paperwidth  {\@tempdima}}

然而,geometry使用这一点要优越得多,使得

\documentclass[landscape]{article}
\usepackage{geometry,lipsum}
\begin{document}
\lipsum[1-10]
\end{lipsum}

正如预期的那样工作,实际上geometry根据文档类选项重新应用其自己的文档布局landscape

这就是它的geometry特别之处:它重新检查所有文档类级选项(而不仅仅是未使用的选项),以确定是否应该覆盖它们。然而,它以一种非常粗糙的方式这样做。事实上,仅限密钥选项得到正确评估(如landscape, 或showframe),而核心价值选项不是(如left=1cmheadheight=10pt)。

解决这个问题的唯一方法是逐字逐句地提供选项geometry

\documentclass{article}
\usepackage[margin=0pt]{geometry}
%...

或者

\documentclass{article}
\usepackage{geometry}
\geometry{margin=0pt}
%...

或者使用传统方式传递选项\PassOptionsToPackage[<options>]{<package>}

\documentclass{article}
\PassOptionsToPackage{margin=0pt}{geometry}
\usepackage{geometry}
%...

相关内容