Falsche Inkrementierung des Zählers?

Falsche Inkrementierung des Zählers?

Kontext

Ich möchte automatisch nummerierte und hervorgehobene Kommentare im Text hinzufügen.

Versuchen

Im Anschluss daranAntwortIch schrieb folgendes

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

was den Zähler aus unerfindlichen Gründen leider in Fünferschritten hochzählt.

Bildbeschreibung hier eingeben

Frage

Können Sie mir bitte erklären, wie ich bei diesem Zähler eine Einheitenerhöhung erhalte?

PS: Ich bin ein ziemlicher Neuling in der Latex-Programmierung. Ich möchte mich schon mal entschuldigen, falls diese Frage dumm ist.

Antwort1

Als Antwort hierauf gebe ich meinen Kommentar: Sie sollten nicht \stepcounterin das Argument von einfügen \hl. Erhöhen Sie stattdessen den Zähler davor und fügen Sie nur Folgendes \themycounterin ein \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}

Bildbeschreibung hier eingeben

Antwort2

Die Verarbeitung von \hlerfordert mehrere Durchläufe seines Arguments, um Messungen durchzuführen. Sie haben festgestellt, dass es fünf Durchläufe gibt und jeder davon den Zähler erhöht. Beachten Sie, dass dies \stepcounterglobal wirkt.

soulMit etwas mehr Arbeit können Sie vermeiden, in die Innereien einzutauchen .

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

Durch das Hinzufügen \global\steptruestarten Sie die Maschinerie, was nur beim ersten Mal \stepcounteroncemöglich ist.\stepcounter

Beachten Sie die zusätzliche Gruppe, die es ermöglicht, eine explizite Neudeklaration zu vermeiden \sethlcolor.

Bildbeschreibung hier eingeben

verwandte Informationen