![将 \thecounter 设置为用户定义格式](https://linux22.com/image/400987/%E5%B0%86%20%5Cthecounter%20%E8%AE%BE%E7%BD%AE%E4%B8%BA%E7%94%A8%E6%88%B7%E5%AE%9A%E4%B9%89%E6%A0%BC%E5%BC%8F.png)
我试图让我的计数器(其值在 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
是否产生了预期的结果。