Como inserir um símbolo no início de uma linha para a qual aparece uma palavra?

Como inserir um símbolo no início de uma linha para a qual aparece uma palavra?

Isto é para indicar alterações em um arquivo LaTeX. Digamos que eu queira adicionar uma linha vertical ao início de uma linha sempre que aparecer "palavra 1", "palavra 2", ..." ou "palavra 100". Manualmente, isso pode ser feito para determinar onde "palavra 1" aparece, mas pode ser entediante se houver muitas "palavras" e se o processo precisar ser repetido novamente. Então, qual é a maneira inteligente de fazer isso?

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

Responder1

Eu uso uma adaptação do meu titlecapspacote, normalmente usada para colocar a primeira letra de cada palavra em maiúscula, dada uma sequência de palavras (com exceções especificadas pelo usuário). Portanto, em vez de limitar as palavras, deixo-as inalteradas. No entanto, eu uso o código que procura as exceções especificadas pelo usuário para colocar uma regra na margem esquerda e para alterar a cor da palavra destacada (esses dois recursos operam de forma independente e qualquer um pode ser desativado sem afetar o outro).

Eu uso o tabtopacote para facilitar a notação da linha marginal.

As palavras a serem pesquisadas são especificadas pela macro \WordsToNote{word1 word2 word3}, uma lista separada por espaços. As invocações subsequentes são cumulativas, de modo que \WordsToNote{word1 word2}\WordsToNote{word3}são funcionalmente equivalentes à invocação anterior. A lista de palavras pode ser redefinida com \Resetlcwords.

A invocação da macro no parágrafo é simplesmente \NoteWords{<text>}.

Tal como acontece com o titlecapspacote, ele pode lidar com um subconjunto limitado de invocações de macro, incluindo alterações de tamanho de texto e alterações de estilo.

EDITADO para lidar com vários parágrafos por vez. CORRIGIDO para que um novo \parnão seja emitido automaticamente ao final da 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}

insira a descrição da imagem aqui

Observação: a linha \textwidth4in\relax\sloppyque coloquei propositalmente no código MWE para reduzir as margens e eliminar caixas excessivamente cheias. Remova-os antes de usar este código em outros locais.

informação relacionada