将 latex 标记解析为字符串的宏

将 latex 标记解析为字符串的宏

我有一个宏(这里\mymacro),它接收命令作为输入之一(特别是类型的命令\includegraphics{..})。

该宏的内容如下

\newcommand{\mymacro}[4]{%
something{#1}
...
}%

并被称为

\mymacro{\includegraphics{..}}{..}{..}{..}

我现在需要将第一个参数的内容解析为字符串以提取内容(即解析标记\includegraphics{..}本身以提取文件名和修饰符)。我将使用xstring解析命令来实现此目的。

换句话说,我想变成\mymacro这样

\newcommand{\mymacro}[4]{%
something{#1}
\stringparsingcommands{ \as__a__string{#1}   }
...
}%

我的问题是:

如何构建这样的\as__a__string命令?它需要防止#1被扩展为 token 并将其转换为字符串。

我一直在尝试使用\verbtocs该软件包\xstring,但是没有成功。

任何帮助是极大的赞赏。

答案1

你是指这样的吗?已编辑,以进一步从第一个参数中提取可选参数和主要参数。

\documentclass{article}
\usepackage[T1]{fontenc}
\newcommand\mymacro[4]{%
  \parsefurther#1\endparse%
}
\def\parsefurther#1#2\endparse{The argument of \detokenize{#1} is 
  ``\detokenize{#2}''.\\
  \detectoptional{#2}[#2]\enddetect%
}
\def\detectoptional#1[#2]#3\enddetect{%
  \ifx\relax#3\relax Optional: none.  Primary: \detokenize{#1}.
  \else \extractoptional#1%
  \fi
}
\newcommand\extractoptional[2][]{Optional: \detokenize{#1}. 
                                 Primary: \detokenize{#2}.}
\begin{document}
\mymacro{\includegraphics{this_is_the_argument}}{..}{..}{..}

\mymacro{\specialincludegraphics[options]{this_is_the_argument}}{..}{..}{..}
\end{document}

在此处输入图片描述

相关内容