Aplicar automáticamente formato especial a palabras seleccionadas en el texto.

Aplicar automáticamente formato especial a palabras seleccionadas en el texto.

¿Es posible y además constructivo hacer que LaTeX formatee automáticamente palabras específicas de una manera específica? Digamos, por ejemplo, que me gustaría tener cada aparición de la palabra "hola" en una fuente monoespaciada cian en negrita, mientras que el resto del documento permanece normal, sin serifa y negro.

¿Cómo puedo lograr eso sin tener que realizar una búsqueda y reemplazo para colocar "hola" en un comando personalizado cada vez antes de compilar el archivo .tex?

Respuesta1

Compila esto con XeLaTeX

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

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

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

ingrese la descripción de la imagen aquí

Pero no lo uses. Si desea marcar especialmente una palabra, utilice una macro.

¿Por qué? Confiar en procedimientos automáticos siempre es arriesgado: si tengo la opción, prefiero el margen explícito. Otra razón es que xesearchnecesita muchos recursos y actualmente no recibe mantenimiento.

No hay nada similar para pdflatex; Posiblemente se pueda hacer algo con LuaLaTeX. Lo intenté chickenizepero no parece ofrecer la función.

Respuesta2

Un poco tarde para la fiesta, pero aquí tienes una solución basada en LuaLaTeX. Configura una función que escanea la entrada.antesTeX realiza cualquiera de sus procesos habituales; cualquier cadena de instancia hellose reemplaza "sobre la marcha" con {\ttfamily\bfseries\color{cyan}hello}, para ser procesada por LaTeX.

ingrese la descripción de la imagen aquí

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

Respuesta3

En ConTeXt, puede utilizar el translatemódulo para realizar dicha búsqueda y reemplazo en tiempo de compilación:

\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

lo que da:

ingrese la descripción de la imagen aquí

Respuesta4

Para mi diversión al usarLátex3, el código siguiente define un entorno boldwordsque acepta una lista de palabras separadas por comas que se escribirán en negrita dentro del entorno. Ejecutar el MWE produce:

ingrese la descripción de la imagen aquí

Tenga en cuenta, en particular, que la logentrada catalogueno está en negrita porque no es una palabra 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}

información relacionada