Wie erstellt man einen Zählbefehl (z. B. TODO) zur Verwendung in einer Liste?

Wie erstellt man einen Zählbefehl (z. B. TODO) zur Verwendung in einer Liste?

Vorwand: Ich kenne Pakete wie todonotes, todo, und fixme, aber das ist eher eine Aufgabe zum Erlernen der LaTeX-Programmierung. Daher wird von der Verwendung zusätzlicher Pakete, die von CTAN heruntergeladen wurden, abgeraten. Ich möchte auch die Verwendung zusätzlicher *.sty-Dateien vermeiden.

Wie erstellt man im Haupt-*.tex einen Befehl für einen gezählten Artikel, der später in einer Auflistung angezeigt werden soll?Zum Beispiel:

Text before\todo[optional caption]{my text here}. 
Some other text in the document\todo{another todo but without caption}.

Die To-do-Notiz wird im Inline-Text farblich markiert, mit einem Präfix versehen oder anderweitig hervorgehoben. Der Aufruf \listoftodoserstellt dann eine Liste der \todos im Dokument und generiert eine (hyperlinkte) Liste ähnlich, aber getrennt von \tableofcontents, wobei der Inhalt in {}durch den in ersetzt wird, []genau dann, wenn er vorhanden ist, mit der Seitenzahl auf der rechten Seite. Diese Liste benötigt nur eine einzige Tiefenebene.

Habe mir den Quellcode des todonotesPakets angesehen, konnte aber nicht viel damit anfangen. Soweit ich weiß, erfordert diese Aufgabe die Definition von zwei neuen Befehlen, das Speichern der Texte in einer Liste von Aufgaben, die Verarbeitung optionaler Argumente und schließlich das Erstellen einer referenzierten Liste von Aufgaben hyperrefin einem (weiteren) Inhaltsverzeichnis. Die Liste wird in die *.aux-Datei geschrieben.

Bonus:

  • Sicherheit bei der Verwendung innerhalb einer Gleichung oder einer Abschnittsüberschrift, Sicherheit bei der Formatierung oder einer Gleichung innerhalb der Notiz

  • Wie können Optionen hinzugefügt werden? Eine einfache Option zum Anzeigen oder Ausblenden des Inline-Textes (bei gleichzeitiger Anzeige im \listoftodos) wäre schön.

  • Kann diese Methode auf andere Elemente erweitert werden? \myitem, \listofmyitems, \otheritems, \listofotheritems?

Nachtrag: Gibt es online einen erweiterten Leitfaden zur (La)TeX-Programmierung? Dieser wird für zukünftige Projekte hilfreich sein.

Antwort1

Eine vorläufige Version, ohne Optionsschlüssel

\documentclass{article}
\usepackage[x11names]{xcolor}
\usepackage{etoolbox}%
\usepackage{blindtext}% Just as text filler
\usepackage{hyperref}
\makeatletter
\def\todolist{}

\newcounter{todolistcounter}

\newcommand{\ToDo}{%
  \@ifnextchar[{\todoopt}{\todonoopt}%
}%

\newcommand{\todonoopt}[1]{%
  \refstepcounter{todolistcounter}
  % \addcontentsline{todo}{section}{\thetodolistcounter~#1} % No contents line
  \listgadd{\todolist}{#1}%
   #1%
   %      \colorbox{green}{\thetodolistcounter~#1}
}

\newcommand{\todoopt}[2][]{%
  \refstepcounter{todolistcounter}
  \addcontentsline{todo}{section}{\thetodolistcounter~#1}
  \listgadd{\todolist}{#2}%
   #2%
   %      \colorbox{green}{\thetodolistcounter~#2}
}%



\newcommand{\listoftodos}{%
  \section{List of Todos}
  \@starttoc{todo}
  \clearpage
}%

% inline display (as a enumerate) list 
\newcommand{\InTextListOfToDos}{%
\begin{enumerate}%
  \renewcommand*{\do}[1]{%
  \item ##1%
  }
  \dolistloop{\todolist}%
\end{enumerate}%
}


\makeatother

\begin{document}
\listoftodos
\ToDo{first} \ToDo{We}

\blindtext[5] \ToDo[should not]{should} \blindtext[10]\ToDo{start from scratch}
\ToDo{\begin{equation}
    E = mc^2%
    \end{equation}%
}

\blindtext

\section{The ToDos}

\section{A heading with a ToDo \protect\ToDo{Something}}


\InTextListOfToDos


\end{document}

verwandte Informationen