我有一个宏(这里\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}