我将 ISBN 存储在两个命令中(取决于类选项)
\theisbne
\theisbnp
该类的布尔选项使用以下方式定义xifthen
\RequirePackage{xifthen}
\newboolean{@sbmcpm@print}
\setboolean{@sbmcpm@print}{true}
\DeclareOption{ebook}{\setboolean{@sbmcpm@print}{false}}
\DeclareOption{print}{\setboolean{@sbmcpm@print}{true}}
我通过命令获取选定的 ISBN
\newcommand{\getisbn}{%
\ifthenelse{\boolean{@sbmcpm@print}}{\theisbnp}{\theisbne}%
}
如果我\psbarcode
直接使用\theisbne
,编译时不会出现错误。
\psbarcode{\theisbne}{includetext guardwhitespace}{isbn}
但如果我使用\getisbn
\psbarcode{\getisbn}{includetext guardwhitespace}{isbn}
我收到以下错误:
! Argument of \pst@@object has an extra }.
<inserted text>
\par
l.33 ...etisbn}{includetext guardwhitespace}{isbn}
知道去哪儿找吗?
平均能量损失
\documentclass{article}
\usepackage{xifthen}
\usepackage{pst-barcode}
\newboolean{@sbmcpm@print}
\setboolean{@sbmcpm@print}{true}
\newcommand{\theisbne}{978-85-8337-040-6}%
\newcommand{\theisbnp}{978-85-85818-86-9}%
%%% Commands depending the options
\newcommand{\getisbn}{%
\ifthenelse{\boolean{@sbmcpm@print}}{\theisbnp}{\theisbne}%
}
\begin{document}
\psbarcode{\getisbn}{includetext guardwhitespace}{isbn}
%\psbarcode{\theisbne}{includetext guardwhitespace}{isbn}
\end{document}
答案1
您的使用@
没有 \makeatletter
是有问题的(一般来说)。此外,在可能的条形 ISBN 之间进行选择的条件是不可扩展。相反,我使用传统的\if
-statements 来条件如下:
\documentclass{article}
\usepackage{pst-barcode}
\makeatletter
\newif\if@sbmcpm@print
\@sbmcpm@printtrue
%%% Commands depending the options
\newcommand{\getisbn}{%
\if@sbmcpm@print\theisbnp\else\theisbne\fi
}
\makeatother
\newcommand{\theisbne}{978-85-8337-040-6}%
\newcommand{\theisbnp}{978-85-85818-86-9}%
\begin{document}
\psbarcode{\getisbn}{includetext guardwhitespace}{isbn}
\end{document}
这是一个可扩展的etoolbox
相等的:
\usepackage{etoolbox}
\makeatletter
\newbool{@sbmcpm@print}
\setbool{@sbmcpm@print}{true}
%%% Commands depending the options
\newcommand{\getisbn}{%
\ifbool{@sbmcpm@print}{\theisbnp}{\theisbne}%
}
\makeatother