
É 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}
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 xesearch
faltam 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.
\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 translate
mó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á:
Responder4
Para minha diversão em usarLaTeX3, o código abaixo define um ambiente boldwords
que aceita uma lista de palavras separadas por vírgula para serem escritas em negrito dentro do ambiente. A execução do MWE produz:
Observe, em particular, que log
in catalogue
nã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}