aplicar automaticamente formatação especial às palavras selecionadas no texto

aplicar automaticamente formatação especial às palavras selecionadas no texto

É possível e, além disso, construtivo fazer com que o LaTeX formate automaticamente palavras específicas de maneira específica? Digamos, por exemplo, que eu gostaria de ter todas as ocorrências da palavra "olá" em uma fonte ciano monoespaçada em negrito, enquanto o restante do documento permanece normal, sem serifa e preto.

Como posso conseguir isso sem precisar pesquisar e substituir para colocar "olá" em um comando personalizado sempre antes de compilar o arquivo .tex?

Responder1

Compile isso com XeLaTeX

\documentclass{article}
\usepackage{color,xesearch}

\SearchList*{redwords}{\textcolor{red}{#1}}{hello}

\begin{document}
This is hello and this is hellow.
\end{document}

insira a descrição da imagem aqui

Mas não use. Se você quiser marcar uma palavra especialmente, use uma macro.

Por que? Confiar em procedimentos automáticos é sempre arriscado: se tiver escolha, prefiro a marcação explícita. Outra razão é que xesearchfaltam recursos e atualmente não há manutenção.

Não há nada semelhante para pdflatex; algo pode ser feito com LuaLaTeX. Eu tentei chickenize, mas não parece oferecer o recurso.

Responder2

Um pouco atrasado para a festa, mas aqui está uma solução baseada em LuaLaTeX. Ele configura uma função que verifica a entradaantesO TeX faz qualquer um dos seus processamentos habituais; qualquer string de instância helloé substituída "on the fly" por {\ttfamily\bfseries\color{cyan}hello}, para ser processada pelo LaTeX.

insira a descrição da imagem aqui

\documentclass{article}
\usepackage{fontspec}
\setmonofont{Courier New}[BoldFont="Courier New Bold"]
\usepackage{luacode,xcolor}
\begin{luacode}
function hello ( s ) 
   return (string.gsub(s , "(hello)(%L)", "{\\ttfamily\\bfseries\\color{cyan}%1}%2"))
end
\end{luacode}
\AtBeginDocument{\directlua{
  luatexbase.add_to_callback("process_input_buffer", hello, "hello")}}
\begin{document}
hello hellow Hello hello.
\end{document}

Responder3

No ConTeXt, você pode usar o translatemódulo para fazer essa pesquisa e substituição em tempo de compilação:

\usemodule[translate]
\definehighlight[SPECIAL][color=cyan, style=\ttbf]
\def\HELLO{\SPECIAL{hello}}
\translateinput[hello][\HELLO{}]
\enableinputtranslation

\setupbodyfont[ss,12pt]

\starttext
When you greet people, you say hello. 
\stoptext

que dá:

insira a descrição da imagem aqui

Responder4

Para minha diversão em usarLaTeX3, o código abaixo define um ambiente boldwordsque aceita uma lista de palavras separadas por vírgula para serem escritas em negrito dentro do ambiente. A execução do MWE produz:

insira a descrição da imagem aqui

Observe, em particular, que login cataloguenão está em negrito porque não é uma palavra completa.

\documentclass{article}
\usepackage{environ}
\usepackage{expl3}

\ExplSyntaxOn
\clist_new:N \l_bold_word_clist
\tl_new:N \l_BODY_tl
\NewEnviron{boldwords}[1]{
   \clist_set:Nn \l_bold_word_clist {#1}
   \tl_set:No \l_BODY_tl {\BODY}
   \clist_map_inline:Nn \l_bold_word_clist {
      \regex_replace_all:nnN {\b##1\b} { \c{textbf}\cB\{##1\cE\} } \l_BODY_tl
   }
   \l_BODY_tl
}
\ExplSyntaxOff

\begin{document}

  \begin{boldwords}{dog, log}
     a dog, a cat, a frog a log and a catalogue
     a dog, a cat, a frog a log and a catalogue
     a dog, a cat, a frog a log and a catalogue

     a dog, a cat, a frog a log and a catalogue
     a dog, a cat, a frog a log and a catalogue
  \end{boldwords}

\end{document}

informação relacionada