
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.
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 \stepcounter
in das Argument von einfügen \hl
. Erhöhen Sie stattdessen den Zähler davor und fügen Sie nur Folgendes \themycounter
in 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}
Antwort2
Die Verarbeitung von \hl
erfordert 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 \stepcounter
global wirkt.
soul
Mit 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\steptrue
starten Sie die Maschinerie, was nur beim ersten Mal \stepcounteronce
möglich ist.\stepcounter
Beachten Sie die zusätzliche Gruppe, die es ermöglicht, eine explizite Neudeklaration zu vermeiden \sethlcolor
.