Wandelt den Variableninhalt in eine wörtliche Darstellung innerhalb eines neuen Befehls um (wird dann als optionales Argument verwendet)

Wandelt den Variableninhalt in eine wörtliche Darstellung innerhalb eines neuen Befehls um (wird dann als optionales Argument verwendet)

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

Ausgabe des Codes für \StrLeft{\raw}{10}

Antwort1

Anstatt zu versuchen, eine wörtliche Lösung zu erarbeiten, gehe ich hier tokcycleIhre To-Do-Notizen durch und verarbeite sie, um eine geeignete Überschrift zu erstellen. Die Verarbeitung zur Erstellung der Überschrift der To-Do-Liste umfasst:

  1. Die Tokens der Kategorien 10, 11 und 12 werden in die Beschriftung übernommen

  2. Die Verstrebung {}wird in Cat-12 umgewandelt[]

  3. Makronamen werden \stringgelöscht, jedoch \wird durch ein ersetzt /. Ein Makro zählt nur als 1 Token gegenüber den zulässigen trunclim, unabhängig von der Länge des Makronamens.

  4. Andere Catcodes als 0, 1, 2, 10, 11 und 12 werden ignoriert.

  5. 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.

  6. Im folgenden MWE trunclimist auf gesetzt 20.

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}

Bildbeschreibung hier eingeben

Wenn trunclimauf 40 gesetzt ist, ist dies das Ergebnis:

Bildbeschreibung hier eingeben

verwandte Informationen