在 LaTeX 命令或表格中使用 convertchar 和 thestring 时遇到问题

在 LaTeX 命令或表格中使用 convertchar 和 thestring 时遇到问题

我正在尝试在定义表格行的命令中生成页面引用,其中引用的标签名称是使用字符串进行某些字符串操作的结果。这是我尝试执行的操作的简化版本,根据命令参数 FO_O 生成对 OPSFOO 标签的引用,字符串处理会删除下划线并在前面添加 OPS:

\documentclass{article}
\usepackage{stringstrings}
\newcommand{\opind}[2]{
  \convertchar[q]{OPS#2}{\_}{}
  #1 & #2 & \pageref{\thestring} \\
}
\begin{document}
\begin{table}[h]
  \begin{tabular}{l l l}
    \opind{1}{FO\_O} \\
  \end{tabular}
\end{table}
\clearpage
\label{OPSFOO} FOO \\
\end{document}

失败并出现错误“!未定义的控制序列。\thestring”

我认为在命令中使用 \thestring 可能有问题,因此我尝试将其直接放入表格条目中,如下所示:

\begin{table}[h]
  \begin{tabular}{l l l}
     \convertchar[q]{OPSFO\_O}{\_}{}
     1 & FO\_O & \pageref{\thestring} \\
  \end{tabular}
\end{table}

但这本质上会得到相同的错误。所以我开始怀疑使用 \thestring 作为 \pageref 的参数是否存在问题。显然不是;如果我在表格外进行字符串操作,一切都会正常:

\convertchar[q]{OPSFO\_O}{\_}{}
\begin{table}[h]
 \begin{tabular}{l l l}    
   1 & FO\_O & \pageref{\thestring} \\
 \end{tabular}
\end{table}

我可以做些什么来使字符串操作和 \pageref{\thestring} 的使用在表内调用的命令中起作用,如上面的第一个代码清单所示?

答案1

根据stringstrings文档,\thestring只是一个\edefined 宏,仅在本地组(此处为表格单元格)中有效。要将内容传输到后面的表格单元格,必须创建一个全局的\edef,即使用\xdef带有一些辅助宏的 ,例如\theglobalstring

\documentclass{article}
\usepackage{stringstrings}

\newcommand{\opind}[2]{
  \convertchar[q]{OPS#2}{\_}{}
  \xdef\theglobalstring{\thestring}
  #1 & #2 & \pageref{\theglobalstring} \\
}
\begin{document}
\begin{table}[h]
  \begin{tabular}{l l l}
    \opind{1}{FO\_O} \\
  \end{tabular}
\end{table}
\label{OPSFOO} FOO \\

\clearpage
\end{document}

答案2

受到 Christian Hupfer 对该问题的评论的启发,但避免像在他的回答中使用全局变量:

\newcommand{\opind}[2]{
  #1 & #2 & \convertchar[q]{OPS#2}{\_}{} \pageref{\thestring} \\
}

相关内容