我想定义以下命令,用于渲染任意数量的子图。参数是一个嵌套列表:
\multifig{{{fig_1, T0D0, TODO}, {fig_2, T0D0, TODO}}}
以下可能吗?
\newcommand*{\multifig}[1]{
\begin{figure}
\foreach \x in #1 {
\begin{subfigure}{\somewidth\textwidth}
% here I need the element at index 1 of the list \x. how?
\customfig{\x at 1}
\end{subfigure}
}
\end{figure}
谢谢。
答案1
以下代码让您使用 expl3 访问(子)列表的特定项。
在当前状态下,它将生成一个带有子图的图形,并打印子列表的第一项(更改\__gerry_customfig
以改变该行为)。请注意,我现在已经将子图设置为固定宽度(我不知道您的\somewidth
)。
\documentclass{article}
\usepackage{expl3,xparse}
\usepackage{subcaption}
\ExplSyntaxOn
\clist_new:N \l__gerry_mycl
\cs_new:Npn \__gerry_customfig:n #1 {
\detokenize{#1}
}
\NewDocumentCommand{\multifig}{m}{
\begin{figure}
\clist_set:Nn \l__gerry_mycl {#1}
\clist_map_inline:Nn \l__gerry_mycl {
\begin{subfigure}{.3\textwidth}
\clist_set:Nn \l_tmpa_clist {##1}
\exp_args:Nx \__gerry_customfig:n {\clist_item:Nn \l_tmpa_clist {1}}
\end{subfigure}
}
\end{figure}
}
\ExplSyntaxOff
\begin{document}
\multifig{{fig_1, T0D0, TODO}, {fig_2, T0D0, TODO}}
\end{document}