Latex 子图特殊计数器标签

Latex 子图特殊计数器标签

我想为整个文档定义一个非常特殊的子图标签。下面是我正在尝试做的一个简化示例。

如果计数器值是 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 的倍数,我们使用大写罗马数字;最后的办法是小写罗马数字。

相关内容