我正在尝试访问我在类中定义的布尔宏。每当我访问类中的布尔值时,它都可以正常工作。但是,如果尝试从主文档访问它(使用相同的代码),我会得到一个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
@
不允许在主文档中使用宏名称。请查看此邮政。为了使其工作,您可以采取多种选择。
删除登录
@
前缀。在框架环境之前和之后添加
\makeatletter
和。\makeatother
复制 \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}