¿Cómo insertar un símbolo al principio de una línea para la cual aparece una palabra?

¿Cómo insertar un símbolo al principio de una línea para la cual aparece una palabra?

Esto es para indicar cambios para un archivo LaTeX. Digamos que quiero agregar una línea vertical al comienzo de una línea cada vez que aparezca "palabra 1", "palabra 2", ..." o "palabra 100". Esto se puede hacer manualmente para determinar dónde está "palabra 100". 1", pero puede resultar tedioso si hay muchas "palabras" y si es necesario repetir el proceso nuevamente. Entonces, ¿cuál es la forma inteligente de hacer esto?

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

Respuesta1

Utilizo una adaptación de mi titlecapspaquete, normalmente utilizada para poner en mayúscula la primera letra de cada palabra, dada una cadena de palabras (con excepciones especificadas por el usuario). Por lo tanto, en lugar de tapar palabras, las dejo sin cambios. Sin embargo, uso el código que busca las excepciones especificadas por el usuario para colocar una regla en el margen izquierdo y cambiar el color de la palabra resaltada (esas dos características funcionan de forma independiente y cualquiera de ellas se puede desactivar sin afectar a la otra).

Utilizo el tabtopaquete para facilitar la notación de líneas marginales.

Las palabras que se van a buscar se especifican mediante la macro \WordsToNote{word1 word2 word3}, una lista separada por espacios. Las invocaciones posteriores son acumulativas, por lo que \WordsToNote{word1 word2}\WordsToNote{word3}son funcionalmente equivalentes a la invocación anterior. La lista de palabras se puede restablecer con \Resetlcwords.

La invocación de macro en el párrafo es simplemente \NoteWords{<text>}.

Al igual que el titlecapspaquete, puede manejar un subconjunto limitado de invocaciones de macros, incluidos cambios de tamaño de texto y cambios de estilo.

EDITADO para manejar varios párrafos a la vez. CORREGIDO para que \parno se emita una nueva automáticamente al final de la macro.

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

ingrese la descripción de la imagen aquí

Tenga en cuenta: la línea \textwidth4in\relax\sloppyque coloqué a propósito en el código MWE para reducir los márgenes y eliminar las casillas demasiado llenas. Elimínelos antes de usar este código en otros lugares.

información relacionada