动态创建计数器

动态创建计数器

我有以下代码:

\documentclass{article}

\newcounter{order}
\newcounter{version}
\counterwithin{version}{order}

\renewcommand{\theorder}{\arabic{order}}
\renewcommand{\theversion}{\alph{version}}
\newcommand{\rom}[1]{\textbf{\uppercase\expandafter{\romannumeral #1\relax}}}

\newcommand{\entry}[4]{%
  \rom{#1}%
  \if #2i\stepcounter{order}\fi%
  \theorder{}/%
  \if #3i\stepcounter{version}\theversion\fi%
  \if #4t/od\fi%
}

\begin{document}

\entry{1}{i}{i}{t}

\entry{1}{0}{i}{t}

\entry{2}{i}{i}{0}
%\textbf{II}1/a

\entry{2}{i}{0}{0}
%\textbf{II}2

\entry{2}{i}{0}{t}
%\textbf{II}3/od

\entry{1}{i}{i}{0}
%\textbf{I}2/a

\entry{2}{i}{0}{t}
%\textbf{II}4/od

\end{document}

生成 PDF:

电流输出

我如何修改它以便将唯一的计数器与 的每个不同的第一个参数关联起来\entry。所需的输出将是:

期望输出

答案1

仍然不确定逻辑,但这重现了所需的输出。

对于每个主标签(第一个参数),我定义了两个计数器,第二个计数器相对于第一个计数器。

当第二或第三个参数为 时i,相关计数器将步进并打印;如果为0,则不进行步进,仅打印第一个计数器的值。

t最后,如果第四个参数是,则打印尾随的“/od” 。

\documentclass{article}

\makeatletter

\newcommand{\entry}[4]{%
  \ifcsname c@entry@#1\endcsname
  \else
    \newcounter{entry@#1}%
    \newcounter{entry@#1@sub}[entry@#1]%
  \fi
  % print the label
  \textbf{\@Roman{#1}}%
  % check the second argument
  \if #2i%
    % step the counter
    \stepcounter{entry@#1}%
  \fi
  \arabic{entry@#1}%
  % check the third argument
  \if #3i%
    \stepcounter{entry@#1@sub}%
    /\alph{entry@#1@sub}%
  \fi
  % check the fourth argument
  \if #4t%
    /od%
  \fi
}

\makeatother  

\begin{document}

\entry{1}{i}{i}{t} (\textbf{I}1/a/od)

\entry{1}{0}{i}{t} (\textbf{I}1/b/od)

\entry{2}{i}{i}{0} (\textbf{II}1/a)

\entry{2}{i}{0}{0} (\textbf{II}2)

\entry{2}{i}{0}{t} (\textbf{II}3/od)

\entry{1}{i}{i}{0} (\textbf{I}2/a)

\entry{2}{i}{0}{t} (\textbf{II}4/od)

\end{document}

在此处输入图片描述

相关内容