Неправильное увеличение счетчика?

Неправильное увеличение счетчика?

Контекст

Я хотел бы добавить автоматически пронумерованные выделенные комментарии в тексте.

Пытаться

Следуя этомуотвечатьЯ написал следующее

\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}

который, к сожалению, по какой-то странной причине увеличивает счетчик с шагом в пять.

введите описание изображения здесь

Вопрос

Не могли бы вы подсказать, как получить приращение единицы на этом счетчике?

PS: Я новичок в программировании 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.

введите описание изображения здесь

Связанный контент