Wie fügt man am Anfang einer Zeile, in der ein Wort vorkommt, ein Symbol ein?

Wie fügt man am Anfang einer Zeile, in der ein Wort vorkommt, ein Symbol ein?

Dies dient dazu, Änderungen in einer LaTeX-Datei anzuzeigen. Angenommen, ich möchte eine vertikale Linie am Zeilenanfang hinzufügen, wenn „Wort 1“, „Wort 2“, …“ oder „Wort 100“ erscheint. Dies kann manuell durchgeführt werden, um festzustellen, wo „Wort 1“ erscheint, es kann jedoch mühsam sein, wenn es viele „Wörter“ gibt und der Vorgang erneut wiederholt werden muss. Wie kann man dies also auf intelligente Weise tun?

I use this as an example to add vertical line 
| when word 1 appears and another vertical line
| word 2 appears.

Antwort1

Ich verwende eine Anpassung meines titlecapsPakets, die normalerweise verwendet wird, um den ersten Buchstaben jedes Wortes in einer gegebenen Zeichenfolge (mit benutzerdefinierten Ausnahmen) groß zu schreiben. Anstatt Wörter groß zu schreiben, lasse ich sie daher unverändert. Ich verwende jedoch den Code, der nach den benutzerdefinierten Ausnahmen sucht, um sowohl eine Regel in den linken Rand einzufügen als auch die Farbe des hervorgehobenen Wortes zu ändern (diese beiden Funktionen funktionieren unabhängig voneinander und können deaktiviert werden, ohne dass sich dies auf die andere auswirkt).

Ich verwende das tabtoPaket, um die Randliniennotation zu erleichtern.

Die zu suchenden Wörter werden durch das Makro angegeben \WordsToNote{word1 word2 word3}, eine durch Leerzeichen getrennte Liste. Nachfolgende Aufrufe sind kumulativ, sodass dies \WordsToNote{word1 word2}\WordsToNote{word3}funktional dem vorherigen Aufruf entspricht. Die Liste der Wörter kann mit zurückgesetzt werden \Resetlcwords.

Der Makroaufruf für den Absatz lautet einfach \NoteWords{<text>}: .

Wie das titlecapsPaket kann es eine begrenzte Teilmenge von Makroaufrufen verarbeiten, einschließlich Änderungen der Textgröße und des Stils.

BEARBEITET, um mehrere Absätze gleichzeitig zu verarbeiten. BEHOBEN, sodass \param Ende des Makros nicht automatisch ein „new“ ausgegeben wird.

\documentclass{article}
\usepackage{titlecaps}
\makeatletter
\renewcommand\titlecap[2][P]{%
  \digest@sizes%
  \if T\converttilde\def~{ }\fi%
  \redefine@tertius%
  \get@argsC{#2}%
  \seek@lcwords{#1}%
  \if P#1%
    \redefine@primus%
    \get@argsC{#2}%
    \protected@edef\primus@argi{\argi}%
  \else%
  \fi%
  \setcounter{word@count}{0}%
  \redefine@secundus%
  \def\@thestring{}%
  \get@argsC{#2}%
  \if P#1\protected@edef\argi{\primus@argi}\fi%
  \whiledo{\value{word@count} < \narg}{%
    \addtocounter{word@count}{1}%
    \if F\csname found@word\roman{word@count}\endcsname%
      \notitle@word{\csname arg\roman{word@count}\endcsname}%
      \expandafter\protected@edef\csname%
           arg\roman{word@count}\endcsname{\@thestring}%
    \else
      \notitle@word{\csname arg\roman{word@count}\endcsname}%
      \expandafter\protected@edef\csname%
           arg\roman{word@count}\endcsname{%
            \protect\MPAR\color{red}\@thestring\color{black}{}}%
    \fi%
  }%
  \def\@thestring{}%
  \setcounter{word@count}{0}%
  \whiledo{\value{word@count} < \narg}{%
    \addtocounter{word@count}{1}%
    \ifthenelse{\value{word@count} = 1}%
   {}{\add@space}%
    \protected@edef\@thestring{\@thestring%
      \csname arg\roman{word@count}\endcsname}%
  }%
  \let~\SaveHardspace%
  \@thestring%
  \restore@sizes%
\un@define}
\makeatother
\usepackage{tabto,xcolor}
\def\margrule{\protect\rule[-\dp\strutbox]{1pt}{\baselineskip}}
\def\MPAR{\protect\tabto*{-.2cm}%
  \margrule\protect\tabto*{\TabPrevPos}}
\let\WordsToNote\Addlcwords
\newcommand\NoteWords[1]{\NoteWordsHelp#1\par\relax}
\long\def\NoteWordsHelp#1\par#2\relax{%
  \titlecap{#1}%
  \ifx\relax#2\else\par\NoteWordsHelp#2\relax\fi%
}
\textwidth4in\relax\sloppy
\begin{document}
\WordsToNote{word1 word2 word3}
\NoteWords{
This is a test of finding  word1 and others like word2 and to see if
a marking can be placed in the \textit{margin when they} are found.
I also include word3 in the list.  \"Unfortunately, this only does
a single paragraph at a time.  \tiny Multiple ocurrences in a 
single row only result in a single\normalsize mark, with this word1 implementation.

For my second paragraph,
this is a test of finding  word1 and others like word2 and to see if
a marking can be placed in the \textit{margin when they} are found.
I also include word3 in the list.  \"Unfortunately, this only does
a single paragraph at a time.  \tiny Multiple ocurrences in a 
single row only result in a single\normalsize mark, with this word1 implementation.
}
Look Mom, no new paragraph.
\end{document}

Bildbeschreibung hier eingeben

Bitte beachten: Die Zeile \textwidth4in\relax\sloppyhabe ich absichtlich in den MWE-Code eingefügt, um die Ränder zu verkleinern und überfüllte Boxen zu vermeiden. Bitte entfernen Sie sie, bevor Sie diesen Code an anderen Orten verwenden.

verwandte Informationen