siunitx:\qty 在 \caption 中的两个自定义命令内导致错误

siunitx:\qty 在 \caption 中的两个自定义命令内导致错误

我使用命令\newcommand\emcpt[1]{{\bfseries #1}}来强调图形的标题。我还创建了一个命令来方便使用\newcommand\percent[1]{\qty{#1}{\percent}}包中的百分比siunitx。虽然这两个命令单独使用效果很好(在文本模式\percent\emcpt也一样),但\percent在 inside of \emcptinside of 中使用\caption会导致错误! Argument of \percent has an extra }! Paragraph ended before \percent was complete.但格式符合预期。我该如何消除错误?

\documentclass{article}

\usepackage{mwe}

\usepackage[detect-all]{siunitx}

\newcommand\emcpt[1]{{\bfseries #1}}
\newcommand\percent[1]{\qty{#1}{\percent}}

\begin{document}

\begin{figure}
\centering
\includegraphics{example-image}
\caption{\emcpt{Test: \percent{20} }}
\end{figure}

\end{document}

答案1

在普通文本中,\qty对命令进行几处本地重新定义,包括\percent

但是,的参数\caption是一个移动参数,这意味着\percent在文件中写入文本时你的参数也会被扩展.aux,但此时的有效定义\percent是你自己的定义,因此你会得到垃圾。

使用\DeclareRobustCommand

另外,我认为没有必要定义\emcpt来做同样的事情\textbf。最好给它设置别名。

\documentclass{article}
\usepackage[detect-all]{siunitx}
\usepackage{graphicx}

\NewCommandCopy{\emcpt}{\textbf}
\DeclareRobustCommand\percent[1]{\qty{#1}{\percent}}

\begin{document}

\begin{figure}
\centering
\includegraphics[width=4cm]{example-image}
\caption{\emcpt{Test: \percent{20} }}
\end{figure}

\end{document}

在此处输入图片描述

相关内容