将 \thecounter 设置为用户定义格式

将 \thecounter 设置为用户定义格式

我试图让我的计数器(其值在 1--4 之间)显示为字符(即字符串中的相应字符SWOT)。以下内容对我来说看起来正确,但没有起到作用:

\usepackage{xstring}

进而

\renewcommand{\theswot}{\StrMid{SWOT}{\value{swot}}{\value{swot}}}

也就是说,直到我想使用

\refstepcounter{swot}

此时会开始引发各种难以理解的错误。

我尝试过使用 的多种变体\StrMid,包括 和 的序列\ifthenelse{\value{swot}=1}{S}{}等等,但这似乎没有任何区别。

任何帮助都值得感激:为什么会出现错误,以及如何获得我想要的东西?

针对@siracusa 的评论添加:

以下是 MWE:

\documentclass{article}
\usepackage{ifthen}
\usepackage{xstring}
\begin{document}
\newcounter{swot}
\renewcommand{\theswot}{%
  \StrMid{SWOT}{\arabic{swot}}{\arabic{swot}}%
  % \ifthenelse{\arabic{swot}=1}{S}{}% This also doesn't work
  % \ifthenelse{\arabic{swot}=2}{W}{}%
  % \ifthenelse{\arabic{swot}=3}{O}{}%
  % \ifthenelse{\arabic{swot}=4}{T}{}%
}
\stepcounter{swot}\theswot % Prints S
\stepcounter{swot}\theswot % Prints W
\stepcounter{swot}\theswot % Prints O
\refstepcounter{swot}      % Throws errors
\end{document}

答案1

您可以使用以下模板。

在此处输入图片描述

\documentclass{article}

\usepackage{expl3}
\ExplSyntaxOn
\newcommand{\Mod}[2]{\int_mod:nn{#1}{#2}}% https://tex.stackexchange.com/a/43209/5764
\ExplSyntaxOff

\newcounter{swot}

\renewcommand{\theswot}{%
  \ifcase\Mod{\value{swot}}{4}\relax
        T% 4
    \or S% 1
    \or W% 2
    \or O% 3
  \fi
}

\begin{document}

\stepcounter{swot}\theswot % 1 = S

\stepcounter{swot}\theswot % 2 = W

\stepcounter{swot}\theswot % 3 = O

\stepcounter{swot}\theswot % 4 = T

\stepcounter{swot}\theswot % 1 = S

\stepcounter{swot}\theswot % 2 = W

\stepcounter{swot}\theswot % 3 = O

\stepcounter{swot}\theswot % 4 = T

\end{document}

模数计算取自如何在 LaTeX 中计算 n 模 3?

答案2

定义适当的编号接口:

\documentclass{article}

\usepackage{xparse}

\ExplSyntaxOn

\cs_new:Nn \arend_swot:n
 {
  \int_case:nn { \int_mod:nn { #1 } { 4 } }
   {
    {1}{S}
    {2}{W}
    {3}{O}
    {0}{T}
   }
 }

\cs_new:Npn \fromswot #1 { \__arend_fromswot:c { c@#1 } }
\cs_new:Nn \__arend_fromswot:N { \arend_swot:n { #1 } }
\cs_generate_variant:Nn \__arend_fromswot:N { c }

\ExplSyntaxOff

\newcounter{swot}
\renewcommand{\theswot}{\fromswot{swot}}
\setcounter{swot}{1}

\begin{document}

\theswot--%
\stepcounter{swot}\theswot--%
\stepcounter{swot}\theswot--%
\stepcounter{swot}\theswot--%
\stepcounter{swot}\theswot--%
\stepcounter{swot}\theswot--%
\stepcounter{swot}\theswot--%
\stepcounter{swot}\theswot--%
\stepcounter{swot}\theswot--%
\stepcounter{swot}\theswot

\end{document}

在此处输入图片描述

您可以检查使用\refstepcounter{swot}和后续操作\label是否产生了预期的结果。

相关内容