计数器增量错误?

计数器增量错误?

语境

我想在文本中添加自动编号的突出显示的评论。

试图

按照此回答我写了以下内容

\documentclass{article}
\usepackage{color}
\usepackage{soul}

\newcounter{mycounter}
\newcommand\showmycounter{\stepcounter{mycounter}\themycounter}

\definecolor{aquamarine}{rgb}{0.5, 1.0, 0.83}
\newcommand{\my}[1]{\sethlcolor{aquamarine} 
   \protect\hl{Comment \showmycounter: #1} \sethlcolor{yellow}}

\begin{document}
some text 
\my{my first comment}\\
some more text
\my{my second comment}

\end{document}

不幸的是,由于某些奇怪的原因,计数器以 5 为步长增加。

在此处输入图片描述

问题

你能告诉我如何在这个计数器上获取单位增量吗?

附言:我对 Latex 编程还只是个新手。如果这个问题比较愚蠢,请允许我提前道歉。

答案1

提供我的评论作为答案:您不应该将其放在\stepcounter的参数内部\hl。而是增加其前面的计数器,然后仅将其放在\themycounter内部\hl

\documentclass{article}
\usepackage{color}
\usepackage{soul}

\newcounter{mycounter}

\definecolor{aquamarine}{rgb}{0.5, 1.0, 0.83}
\DeclareRobustCommand{\my}[1]
  {%
    \sethlcolor{aquamarine}\stepcounter{mycounter}%
    \protect\hl{Comment \themycounter: #1} \sethlcolor{yellow}%
  }

\begin{document}
some text 
\my{my first comment}\\
some more text
\my{my second comment}

\end{document}

在此处输入图片描述

答案2

的处理\hl需要多次遍历其参数才能进行测量。您发现有五次遍历,每次遍历都会增加计数器。请注意,它\stepcounter是全局作用的。

soul您可以通过做更多的工作来避免陷入困境。

\documentclass{article}
\usepackage{color}
\usepackage{soul}

\definecolor{aquamarine}{rgb}{0.5, 1.0, 0.83}

\newif\ifstep
\newcommand{\stepcounteronce}[1]{%
  \ifstep
    \global\stepfalse
    \stepcounter{#1}%
  \fi
}

\newcounter{mycounter}
\newcommand\showmycounter{\stepcounteronce{mycounter}\themycounter}
\newcommand{\my}[1]{{% an additional group to do \sethlcolor locally
  \global\steptrue
  \sethlcolor{aquamarine}%
  \hl{Comment \showmycounter: #1}%
}}

\begin{document}

some text 
\my{my first comment}

some more text
\my{my second comment}

This is again \hl{yellow}

\end{document}

通过添加,您可以启动仅允许第一次执行\global\steptrue的机器。\stepcounteronce\stepcounter

注意附加组,它允许避免明确重新声明\sethlcolor

在此处输入图片描述

相关内容