如何将字符串拆分为具有图形名称、标签和标题的图形浮点数?

如何将字符串拆分为具有图形名称、标签和标题的图形浮点数?

我正在努力解决将字符串转换为数字的简写宏问题。最后是我正在尝试执行的一个可行但不稳定的版本。目标是解析 make 这样的命令(或宏):

\fig{figure_name.png fig:figure_label
This is the figure caption with a reference \ref{fig:another_figure}.  
}

对应于传统版本:

\begin{figure}
  \includegraphicx[width=\columnwidth]{figure_name.png}
  \caption{This is the figure caption with a reference \ref{fig:another_figure}.}
  \label{fig:figure_label}
\end{figure}

或者更好的是,宏格式可以在开头有键值对,在结尾有标题。这是我的最终目标。像这样:

\fig{(figure_name.png, label=fig:figure_label, width=\columnwidth)
    This is the figure caption with a reference \ref{fig:another_figure}.  
 }

我遇到的问题是,当引用发生变化或编译一次出现错误时,下面的代码会陷入永久循环。当我添加新标签时,我必须注释所有包含的行\ref{}并编译几次才能获得正确的引用。然后取消注释所有\refs 并编译以获得正确的版本。

哪里出了问题或者应该怎么做?我希望有注释良好的代码。我很难理解这样的行:\tl_remove_all:Nn \l_tmpa_tl {-}。lua 解决方案也很好。

\usepackage{xparse}

\NewDocumentCommand\fig{>{\SplitList{ }}m}
{%
  \xdef\captionWords{}
    \ProcessList{#1}{\myitem}%
    \firstitemtrue
    \seconditemfalse
    \caption{\captionWords \label{\thisLabel}}
  \end{figure}

}

\newif\iffirstitem
\firstitemtrue  
\newif\ifseconditem
\seconditemtrue
\newcommand\myitem[1]{%
  \iffirstitem

    \begin{figure}[ht]
    \includegraphics[width=\columnwidth]{figures/#1}\\
    \firstitemfalse
    \seconditemtrue
  \else  
    \ifseconditem 
      \xdef\thisLabel{#1}
      \seconditemfalse
    \else 
      \xdef\captionWords{\captionWords\  #1}
    \fi
  \fi
}

相关内容