pst-barcode \pst@@object 的参数有一个额外的 }

pst-barcode \pst@@object 的参数有一个额外的 }

我将 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

相关内容