如何从主 .tex 文档访问类布尔宏

如何从主 .tex 文档访问类布尔宏

我正在尝试访问我在类中定义的布尔宏。每当我访问类中的布尔值时,它都可以正常工作。但是,如果尝试从主文档访问它(使用相同的代码),我会得到一个Undefined control sequence. \ifMY

测试类.cls

%! Class = testclass

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{testclass}[2023/11/29 Minimum Working Example Class]

\LoadClass[t,xcolor={x11names},aspectratio=169]{beamer}

\RequirePackage{kvoptions}
\SetupKeyvalOptions{family=MY,prefix=MY@}
\DeclareBoolOption{optA}
\ProcessKeyvalOptions*

\newcommand{\test}{\ifMY@optA
true
\else
false
\fi}

测试.tex

% Preamble
\documentclass[optA=false]{testclass}

% Document
\begin{document}

\begin{frame}{Works fine.}
    \test
\end{frame}

\begin{frame}{Has an error.}
    \ifMY@optA
    true
    \else
    false
    \fi
\end{frame}

\end{document}

我如何在文档中使用 if,或者我必须在类中创建一个类似的命令\test

答案1

@不允许在主文档中使用宏名称。请查看此邮政。为了使其工作,您可以采取多种选择。

  1. 删除登录@前缀。

  2. 在框架环境之前和之后添加\makeatletter和。\makeatother

  3. 复制 \ifMY@optA 命令来制作不带 的版本@

我更喜欢最后一个选择。

以下是testclass.cls的代码:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{testclass}[2023/11/29 Minimum Working Example Class]

\LoadClass[t,xcolor={x11names},aspectratio=169]{beamer}

\RequirePackage{kvoptions}
\SetupKeyvalOptions{family=MY,prefix=MY@}
\DeclareBoolOption{optA}
\ProcessKeyvalOptions*

\let\ifmyoptA\ifMY@optA

\newcommand{\test}{\ifMY@optA
true
\else
false
\fi}

以下是主文档的代码:

% Preamble
\documentclass[optA=false]{testclass}

% Document
\begin{document}

\begin{frame}{Works fine.}
    \test
\end{frame}

\begin{frame}{Has an error.}
    \ifmyoptA
    true
    \else
    false
    \fi
\end{frame}

\end{document}

在此处输入图片描述

相关内容