\StrSubstitute 不适用于 \ref 宏生成的字符串

\StrSubstitute 不适用于 \ref 宏生成的字符串

在此 LaTeX 代码中,我尝试替换引用中的“(”,使它们看起来像“x)”,而不是“(x)”:

\documentclass{article}

\usepackage{enumitem}
\usepackage{xstring}

\begin{document}

\begin{enumerate}[label=(\alph*)]
\item \label{cla:Item1} an apple
\item \label{cla:Item2} a banana
\item a carrot, see \StrSubstitute{\ref{cla:Item1}}{(}{}
\item a durian, see \StrSubstitute{\ref{cla:Item2}}{(}{}
\end{enumerate}

\end{document}

但是,\StrSubstitute 似乎不起作用,所有引用仍然打印为“(x)”。

为什么 \StrSubstitute 不起作用?这是一个错误吗?

有没有什么解决方法?

答案1

它不能工作,因为\ref生产需要的东西打印参考资料。

这比较容易。

\documentclass{article}

\usepackage{enumitem}

\begin{document}

\begin{enumerate}[label=(\alph*),ref=\alph*)]
\item \label{cla:Item1} an apple
\item \label{cla:Item2} a banana
\item a carrot, see \ref{cla:Item1}
\item a durian, see \ref{cla:Item2}
\end{enumerate}

\end{document}

在此处输入图片描述

用 来做\StrSubstitute,但您必须使用refcount提供 的可扩展版本\ref并删除两对括号(或使用 的慢速功能来xstring检查隐藏在括号中的内容),因为 返回的引用\ref{cla:Itemi1}{{(a)}}

\documentclass{article}

\usepackage{enumitem}
\usepackage{xstring}
\usepackage{refcount}

\makeatletter
\newcommand{\getenumitemref}[1]{%
  \expandafter\expandafter\expandafter\@firstofone
  \expandafter\@firstofone
  \expanded{\getrefbykeydefault{#1}{}{0}}%
}
\makeatother

\begin{document}

\begin{enumerate}[label=(\alph*)]
\item \label{cla:Item1} an apple
\item \label{cla:Item2} a banana
\item a carrot, see \StrSubstitute{\getenumitemref{cla:Item1}}{(}{}
\item a durian, see \StrSubstitute{\getenumitemref{cla:Item2}}{(}{}
\end{enumerate}

\end{document}

相关内容