检测赋予 documentclass 的选项的值

检测赋予 documentclass 的选项的值

我希望能够检测包是否与或 一起standalone使用。不太关心此设置是默认设置还是用户定义的设置。[preview=false][preview=true]

基于如何取消定义已处理的类选项?,该宏@classoptionslist应该是传递给类的选项的逗号分隔列表。我试图检测这个宏preview=true中是否有字符串,但这并没有产生正确的结果。以下总是打印Package Option: [preview=false]

\documentclass[preview=true]{standalone}% Does not work
%\documentclass[preview=false]{standalone}% works

\usepackage{xstring}
\makeatletter%
\newcommand*{\DetectPreviewOption}{%
    \IfSubStr{@classoptionslist}{preview=true}{true}{false}%
}%
\makeatother%

\begin{document}
Package Option: [preview=\DetectPreviewOption].
\end{document}

答案1

\documentclass[preview]{standalone}
\makeatletter%
\newcommand*\DetectPreviewOption{%
  \ifsa@preview true\else false\fi}
\makeatother%

\begin{document}
Package Option: [preview=\DetectPreviewOption].
\end{document}

答案2

通常情况下,您是对的,并且\@classoptionlist会包含此信息(尝试使用该类的示例article)。您看到的行为是该类的“特征” standalone,其中包括以下几行

\def\sa@classoptionslist{}
\DeclareDefaultOption{%
  \xdef\sa@classoptionslist{\sa@classoptionslist,\CurrentOption}%
}
\ProcessKeyvalOptions*\relax
\let\@classoptionslist\sa@classoptionslist

这将删除所有已知选项来自\@classoptionslist

我看到赫伯特提出了一个解决方案:我在这里回答是为了指出为什么您尝试的方法在这种情况下不起作用。

相关内容