如何获取传递给主标准类的字体大小参数?

如何获取传递给主标准类的字体大小参数?

对于复杂的长度操作(见这里),我需要获取作为选项传递给文档类的字体大小:

\documentclass[12pt]{article}
\newlength{\mainfontsize}
\setlength{\mainfontsize}{\@ptsize}

我希望它能在所有主要类上工作,包括beamerextarticle。目前它在上失败了。如何让它工作?(我不想要像的beamer字体大小一样精确,我想要传递的选项)。10.95pt11pt

答案1

由于大多数类都定义了自己的选项处理系统,因此每个类都需要一个不同的宏。

例如,对于12ptarticle(和标准 LaTeX 类)仅存储2在 中\@ptsizeextarticle存储12beamer存储{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}

对于其他类,您需要添加另一个条件和相应的宏来获取选项。

相关内容