我想为整个文档定义一个非常特殊的子图标签。下面是我正在尝试做的一个简化示例。
如果计数器值是 3 或 5 的倍数,我想为子图分配不同的标签。我看到了一些与我正在尝试的内容有点相关的答案,但有些不同,例如不寻常的编号:结合 alph、Alph、arabic
为此,我重新定义了thesubfigure
命令并尝试定义一个新命令myletterLabel
\renewcommand{\thesubfigure}{\myletterLabel{subfigure}}
问题是,每次我尝试在 中定义一个变量时\@myletterLabel
,Latex 都会对此提出抱怨,无论我使用的是\def
还是\pgfmathsetmacro
其他方式。我只能使用语法,if else\ifnum
但
我需要计算计数器的模数 3 和 5(我的子图比 26 多得多,所以我不想手动编写 if else 情况)。
有解决方案吗?提前谢谢
\newcommand{\myletterLabel}[1]{%
\expandafter\@myletterLabel\csname c@#1\endcsname
}
\newcommand{\@myletterLabel}[1]{%
\ifnum#1=0*%
\else\ifnum#1<27
\@alph{#1}%
\fi%
\fi%
}
\makeatother
答案1
像这样?
\documentclass{article}
\usepackage{subcaption}
\ExplSyntaxOn
\NewExpandableDocumentCommand{\weird}{m}
{
\romainbqt_weird:n { #1 }
}
\cs_new:Nn \romainbqt_weird:n
{
\bool_lazy_and:nnTF
{
!\int_compare_p:n { \int_mod:nn { \value{#1} } { 3 } == 0 }
}
{
!\int_compare_p:n { \int_mod:nn { \value{#1} } { 5 } == 0 }
}
{% neither a multiple of 3 nor 5
\int_to_arabic:n { \value{#1} }
}
{% check for a multiple of 5
\int_compare:nTF { \int_mod:nn { \value{#1} } { 5 } == 0 }
{
\int_to_Roman:n { \value{#1} }
}
{
\int_to_roman:n { \value{#1} }
}
}
}
\ExplSyntaxOff
\renewcommand{\thesubfigure}{\weird{subfigure}}
\begin{document}
\begin{figure}
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}\hfil
\begin{subfigure}{10em}\caption{test}\end{subfigure}
\end{figure}
\end{document}
我们\bool_lazy_and:nnTF
检查两个谓词,在本例中为“不是 3 的倍数”和“不是 5 的倍数”。当返回 true 时,我们发出标准阿拉伯表示;否则,数字可能是 5 的倍数,我们使用大写罗马数字;最后的办法是小写罗马数字。