
Contexto
Gostaria de adicionar comentários destacados numerados automaticamente no texto.
Tentar
Seguindo istoresponderEu escrevi o seguinte
\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 infelizmente, por algum motivo estranho, aumenta o contador em etapas de cinco.
Pergunta
Você poderia me dizer como obter um incremento de unidade neste contador?
PS: Sou um pouco novato em programação de látex. Deixe-me pedir desculpas antecipadamente se esta pergunta for idiota.
Responder1
Fornecendo meu comentário como resposta: você não deve colocar \stepcounter
dentro do argumento de \hl
. Em vez disso, aumente o contador antes dele e coloque apenas \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}
Responder2
O processamento de \hl
requer múltiplas passagens sobre seu argumento para fazer medições. Você descobriu que existem cinco passagens e cada uma aumenta o contador. Observe que \stepcounter
atua globalmente.
Você pode evitar mergulhar nas entranhas soul
com mais trabalho.
\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}
Ao adicionar \global\steptrue
você inicia o maquinário que permite \stepcounteronce
fazer \stepcounter
apenas na primeira vez.
Observe o grupo adicional, que permite evitar a redeclaração explícita \sethlcolor
.