我正在为课程指南编写一个课程,并以标准book
课程为基础。以下是答案埃格尔到使用 pgfopts 时仅传递其他选项,我开始研究自己的课程。但不知何故,虽然它没有抱怨额外的选项,并且在调用时似乎有正确的选项LoadClass
,但这些选项都不会影响课程的行为book
。
\begin{filecontents}{courseguide.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{courseguide}
\RequirePackage{pgfopts}
%%%% PGF options
\def\Course@classoptions{10pt}
%% Academic year
\newcounter{AY}
\setcounter{AY}{\the\year}
\pgfkeys{
/Course/.cd,
%%% This is the academic year
AY/.code=\setcounter{AY}{#1},
AY/.default=\the\year,
.unknown/.code={
\message{mwe found unknown key: \pgfkeyscurrentname}
\edef\Course@classoptions{\Course@classoptions,\pgfkeyscurrentname}
}
}
\ProcessPgfOptions{/Course}
\message{MWE Current \\Course@classoptions: \Course@classoptions}
\LoadClass[\Course@classoptions]{book}
\end{filecontents}
\documentclass[AY=2026,letterpaper,landscape,12pt]{courseguide}
\usepackage{lipsum}
\begin{document}
The academic year is \theAY-{\the\numexpr\theAY+1}
\end{document}
这是一个不起作用的 MWE。选项出现可以通过,但总是 10pt、a4、纵向。我以为这很简单,但我却不知所措。
附录。在第一个答案(这很有帮助)之后,我很困惑,如果我\usepackage{showframe}
从(固定的)测试文档中删除会发生什么。打印的内容仍然相同:
学年为2026-2027。
该文件使用的纸张尺寸为 W=11.00215 英寸、H=8.50166 英寸。
文档字体大小为12。
但实际文档(通过检查 evince 中的 PDF 属性)是 A4 纸。
如果我不删除该线而是用 替换它\usepackage[noframe]{showframe}
,则尺寸和方向是相同的。
答案1
您的问题中有一些错误的假设。
这是一个奇怪的特征标准类不设置后端特定长度的纸张尺寸。因此,例如,使用 PDFLaTeX 来编译
\documentclass[a4paper]{book}
\begin{document}
Test
\end{document}
和
\documentclass[a4paper,landscape]{book}
\begin{document}
Test
\end{document}
两者都会导致 PDF 具有关于页面大小的相同文档信息,通常(使用pdfinfo
):
Page size: 595.276 x 841.89 pts (A4)
然而,如您所见,如果添加更多文本,文档将会有所不同:
\documentclass[a4paper]{book}
\usepackage{lipsum}
\begin{document}
\lipsum
\end{document}
对阵
\documentclass[a4paper,landscape]{book}
\usepackage{lipsum}
\begin{document}
\lipsum
\end{document}
因此,在 PDF 中看不到正确的尺寸并不意味着book
没有处理选项letterpaper
(这已经是 的默认设置book
)或landscape
。
要查看 PDF 中的真实纸张尺寸,您可以使用pdfmanagement-testphase
(有关更多信息,请参阅手册),\DocumentMetadata{}
在之前添加或加载类似或的\documentclass
包。hyperref
showframe
如果您查看生成的 PDF 的字体信息,您会看到(使用pdffonts
):。AKGSOO+CMR12
该部分CMR12
表示使用 12pt。并且在log
文件中您会发现,bk12.clo
加载的是 ,而不是bk10.clo
。因此,您关于仍然使用 10pt 的假设也是错误的。
为了查看正确的 PDF 尺寸以及使用的字体大小,我建议使用另一个测试文件:
\begin{filecontents}{courseguide.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{courseguide}
\RequirePackage{pgfopts}
%%%% PGF options
\def\Course@classoptions{10pt}
%% Academic year
\newcounter{AY}
\setcounter{AY}{\the\year}
\pgfkeys{
/Course/.cd,
%%% This is the academic year
AY/.code=\setcounter{AY}{#1},
AY/.default=\the\year,
.unknown/.code={
\message{mwe found unknown key: \pgfkeyscurrentname}
\edef\Course@classoptions{\Course@classoptions,\pgfkeyscurrentname}
}
}
\ProcessPgfOptions{/Course}
\message{MWE Current \\Course@classoptions: \Course@classoptions}
\LoadClass[\Course@classoptions]{book}
\end{filecontents}
\documentclass[AY=2026,letterpaper,landscape,12pt]{courseguide}
\usepackage{lipsum}
\usepackage{showframe}
\usepackage{printlen}
\begin{document}
The academic year is \theAY-{\the\numexpr\theAY+1}.
\uselengthunit{in}
The document uses paper of size W=\printlength{\paperwidth},
H=\printlength{\paperheight}.
The document font size is \csname f@size\endcsname.
\end{document}
如您所见,所有选项均按预期处理。
但是,请注意,的选项book
是按顺序处理的,而不是按使用顺序定义的。因此,如果您使用:
\begin{filecontents}[overwrite]{courseguide.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{courseguide}
\RequirePackage{pgfopts}
%%%% PGF options
\def\Course@classoptions{12pt}% CHANGED!!!
%% Academic year
\newcounter{AY}
\setcounter{AY}{\the\year}
\pgfkeys{
/Course/.cd,
%%% This is the academic year
AY/.code=\setcounter{AY}{#1},
AY/.default=\the\year,
.unknown/.code={
\message{mwe found unknown key: \pgfkeyscurrentname}
\edef\Course@classoptions{\Course@classoptions,\pgfkeyscurrentname}
}
}
\ProcessPgfOptions{/Course}
\message{MWE Current \\Course@classoptions: \Course@classoptions}
\LoadClass[\Course@classoptions]{book}
\end{filecontents}
\documentclass[AY=2026,letterpaper,landscape,10pt]{courseguide}% FONT SIZE OPTION CHANGED
\usepackage{lipsum}
\usepackage{showframe}
\usepackage{printlen}
\begin{document}
The academic year is \theAY-{\the\numexpr\theAY+1}.
\uselengthunit{in}
The document uses paper of size W=\printlength{\paperwidth},
H=\printlength{\paperheight}.
The document font size is \csname f@size\endcsname.
\end{document}
您仍然会有 12pt,因为book
使用以下方法定义字体大小选项:
\if@compatibility
\renewcommand\@ptsize{0}
\else
\DeclareOption{10pt}{\renewcommand\@ptsize{0}}
\fi
\DeclareOption{11pt}{\renewcommand\@ptsize{1}}
\DeclareOption{12pt}{\renewcommand\@ptsize{2}}
因此 12pt 总是最后处理。因此在 的定义中设置默认值\Course@classoptions
可能会有问题。