Ich habe 8 Stunden damit verbracht, dies zu lösen, habe einige Fortschritte gemacht, stehe jetzt aber vor enormen Schwierigkeiten mit wörtlichem Material in Latex. Jede Hilfe wäre großartig!
Mein Ziel: Das todonotes
Paket bietet eine Inline-Option, die jedoch nicht funktioniert, wenn man verwenden möchte \listoftodos
, da komplexere Inline-Dinge wie Gleichungsumgebungen irgendwie nicht für das Caption-Argument geeignet sind. Eine einfache Lösung besteht darin, das optionale Caption-Argument von \todo
fix auf etwas wie zu setzen \todo[inline,caption={inline...}]{...}
. Die schwierigere, aber bessere Lösung wäre beispielsweise, die ersten 20 Zeichen des Inline-Kommentars abzuschneiden und in die Caption einzufügen. Das habe ich versucht und es funktioniert.fast.
Konkret funktioniert es anscheinend schon, solange die gekürzte Version keine Sonderzeichen enthält. Im folgenden Code findet man %%%%%%%
die Markierung der entscheidenden Stelle. \StrLeft{\myraw}{10}
Funktioniert, \StrLeft{\myraw}{20}
bricht aber schon ab.
Zusätzlich habe ich noch ein paar andere Versuche unternommen, um diesen Inhalt wortgetreu darzustellen. Sie funktionieren außerhalb von \newcommand
, aber nicht innerhalb. Ich kenne auch \NewDocumentCommand{\myverb}{+v}{\texttt{#1}}
von xparse
, aber auch hier habe ich keinen Weg gefunden, das zu erreichen, was ich will.
Ich freue mich auf Ihre Hilfe.
\documentclass{article}
\usepackage{xstring}
\usepackage{amsmath}
\usepackage{comment}
\usepackage{todonotes}
\usepackage{verbdef}
% TODO this still does not work for special sequences! kind of escape inbetween?
\newcommand{\MYTODO}[2][]{%
% makes a raw approximation and cut - this must be called within the same newcommand and cannot be outsourced for some reason I do not fully understand:
\scancs[0]\myraw{#2}
%equivalent to:
%\StrExpand[0]{#2}{\h}
%\def\raw{\detokenize\expandafter{\h}}
\StrLeft{\myraw}{10}[\myleft] %%%%%%% changing this number to for example 20 breaks the code %%%%%%%
%
% this is the essential thing we want:
%\expandafter\verbdef\expandafter\variable\expandafter+\myleft+ %%%breaks immedidiately
%\todo[inline, caption={\string\myleft}, #1]{#2} %%%breaks immediately
%\todo[inline, caption={\texttt{\myleft}}, #1]{#2} %%%breaks also for surroundings
\todo[inline, caption={\myleft}, #1]{#2}
}
\begin{document}
\listoftodos
\bigskip
\MYTODO[author=me]{ABCDEF}
\MYTODO{%
but what if
\begin{align*}
x^2
\end{align*}
}
\bigskip
%I tested here some ways to get verbatime output inside a variable, but both do not work in commands
\def\toverb{this works|, but only outside a newcommand.}
\expandafter\verb\expandafter+\toverb+
\expandafter\verbdef\expandafter\fromverb\expandafter+\toverb+
\fromverb
\end{document}
Antwort1
Anstatt zu versuchen, eine wörtliche Lösung zu erarbeiten, gehe ich hier tokcycle
Ihre To-Do-Notizen durch und verarbeite sie, um eine geeignete Überschrift zu erstellen. Die Verarbeitung zur Erstellung der Überschrift der To-Do-Liste umfasst:
Die Tokens der Kategorien 10, 11 und 12 werden in die Beschriftung übernommen
Die Verstrebung
{}
wird in Cat-12 umgewandelt[]
Makronamen werden
\string
gelöscht, jedoch\
wird durch ein ersetzt/
. Ein Makro zählt nur als 1 Token gegenüber den zulässigentrunclim
, unabhängig von der Länge des Makronamens.Andere Catcodes als 0, 1, 2, 10, 11 und 12 werden ignoriert.
Die Gesamtzahl derTokenin der Überschrift der Aufgabenliste wird nicht größer sein als
\thetrunclim - 1
, wobei berücksichtigt wird, dass Makronamen bei dieser Zählung nur als ein einzelnes Token gezählt werden.Im folgenden MWE
trunclim
ist auf gesetzt20
.
Das MWE:
\documentclass{article}
\usepackage{amsmath}
\usepackage{comment}
\usepackage{todonotes}
\usepackage{tokcycle}
\newcounter{trunclength}
\def\trunclim{20}
\makeatletter
\newcommand\myleft[1]{%
\setcounter{trunclength}{0}%
\tokcycle
{\stepcounter{trunclength}%
\tctestifnum{\thetrunclength<\trunclim}{%
\tctestifcatnx A##1{\addcytoks{##1}}{%
\tctestifcatnx 0##1{\addcytoks{##1}}{%
}}%
}{}}%
{\processtoks{[##1]}}%
{\stepcounter{trunclength}%
\tctestifnum{\thetrunclength<\trunclim}{%
\addcytoks{/}%
\addcytoks[2]{\expandafter\@gobble\string##1}}{}}%
{\stepcounter{trunclength}%
\tctestifnum{\thetrunclength<\trunclim}{\addcytoks{##1}}{}}%
{#1}%
}
\makeatother
% TODO this still does not work for special sequences! kind of escape inbetween?
\newcommand{\MYTODO}[2][]{%
\myleft{#2}\todo[inline, caption={\the\cytoks}, #1]{#2}
}
\begin{document}
\listoftodos
\bigskip
\MYTODO[author=me]{ABCDEF}
\MYTODO{%
but what if
\begin{align*}
x^2
\end{align*}
}
\end{document}
Wenn trunclim
auf 40 gesetzt ist, ist dies das Ergebnis: