对于复杂的长度操作(见这里),我需要获取作为选项传递给文档类的字体大小:
\documentclass[12pt]{article}
\newlength{\mainfontsize}
\setlength{\mainfontsize}{\@ptsize}
我希望它能在所有主要类上工作,包括beamer
和extarticle
。目前它在上失败了。如何让它工作?(我不想要像的beamer
字体大小一样精确,我想要传递的选项)。10.95pt
11pt
答案1
由于大多数类都定义了自己的选项处理系统,因此每个类都需要一个不同的宏。
例如,对于12pt
,article
(和标准 LaTeX 类)仅存储2
在 中\@ptsize
。extarticle
存储12
。beamer
存储{size12.clo}
在\beamer@size
宏中,并memoir
存储12
在 中\@memptsize
。不完全标准化。
这是一个宏,它检查这些类并相应地使用正确的宏,然后将字体大小(来自选项,而不是实际字体大小)存储在长度中:
\documentclass[14pt]{extarticle}
\makeatletter
\newcommand{\deffontsize}[1]{%
\setlength#1%
{%
\vincent@ifclassloaded {beamer}
\get@beamersize
{%
\vincent@ifclassloaded {memoir}
\get@memoirsize
{%
\vincent@ifclassloaded {extarticle}
\get@extartsize
\get@standardsize
}%
}%
}%
}
\def\vincent@ifclassloaded#1{%
\expandafter\ifx\csname ver@#1.cls\endcsname\relax
\expandafter\@secondoftwo
\else
\expandafter\@firstoftwo
\fi}
\def\get@beamersize{%
\expandafter\expandafter\expandafter\get@@beamersize
\expandafter\@firstofone\beamer@size}
\def\get@@beamersize size#1.clo{#1 pt}
\def\get@memoirsize{\@memptsize pt}
\def\get@extartsize{\@ptsize pt}
\def\get@standardsize{1\@ptsize pt}
\makeatother
\begin{document}
\newlength\mainfontsize
\deffontsize{\mainfontsize}
\the\mainfontsize
\end{document}
对于其他类,您需要添加另一个条件和相应的宏来获取选项。