
Контекст
Я хотел бы добавить автоматически пронумерованные выделенные комментарии в тексте.
Пытаться
Следуя этомуотвечатьЯ написал следующее
\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
.