
Contexto
Me gustaría agregar comentarios resaltados numerados automáticamente en el texto.
Intentar
Siguiendo estorespuestaescribí lo siguiente
\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}
que lamentablemente por alguna extraña razón incrementa el contador en pasos de cinco.
Pregunta
¿Podría decirme cómo obtener un incremento de unidad en este contador?
PD: Soy un poco novato en la programación con látex. Permítanme disculparme de antemano si esta pregunta es tonta.
Respuesta1
Proporcionando mi comentario como respuesta: no deberías incluirlo \stepcounter
dentro del argumento de \hl
. En su lugar, incremente el contador anterior y solo colóquelo \themycounter
dentro \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}
Respuesta2
El procesamiento de \hl
requiere múltiples pasadas sobre su argumento para poder realizar mediciones. Descubriste que hay cinco pases y cada uno incrementa el contador. Tenga en cuenta que \stepcounter
actúa globalmente.
Puedes evitar sumergirte en las entrañas soul
con un poco más de trabajo.
\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}
Al agregar \global\steptrue
se pone en marcha la maquinaria que permite \stepcounteronce
hacerlo \stepcounter
sólo la primera vez.
Tenga en cuenta el grupo adicional, que permite evitar la redeclaración explícita \sethlcolor
.