我有以下代码:
\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}