Automatisches Anwenden einer speziellen Formatierung auf ausgewählte Wörter im Text

Automatisches Anwenden einer speziellen Formatierung auf ausgewählte Wörter im Text

Ist es möglich und darüber hinaus sinnvoll, LaTeX dazu zu bringen, bestimmte Wörter automatisch auf eine bestimmte Weise zu formatieren? Nehmen wir beispielsweise an, ich möchte jedes Vorkommen des Wortes „Hallo“ in einer fetten, cyanfarbenen Monospace-Schriftart haben, während der Rest des Dokuments normal, serifenlos und schwarz bleibt.

Wie kann ich das erreichen, ohne jedes Mal vor der Kompilierung der TEX-Datei eine Suchen-und-Ersetzen-Funktion durchführen zu müssen, um „Hallo“ in einen benutzerdefinierten Befehl einzufügen?

Antwort1

Kompilieren Sie dies mit XeLaTeX

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

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

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

Bildbeschreibung hier eingeben

Aber verwenden Sie es nicht. Wenn Sie ein Wort besonders markieren möchten, verwenden Sie ein Makro.

Warum? Sich auf automatische Verfahren zu verlassen ist immer riskant: Wenn ich die Wahl habe, bevorzuge ich explizite Markierungen. Ein weiterer Grund ist, dass es xesearchressourcenhungrig ist und derzeit nicht gewartet wird.

Es gibt nichts Ähnliches für pdflatex; möglicherweise kann mit LuaLaTeX etwas gemacht werden. Ich habe es versucht, chickenizeaber es scheint diese Funktion nicht anzubieten.

Antwort2

Ein bisschen spät dran, aber hier ist eine LuaLaTeX-basierte Lösung. Sie richtet eine Funktion ein, die die Eingabe scanntVorTeX führt die übliche Verarbeitung durch; alle Instanzzeichenfolgen hellowerden „on the fly“ durch ersetzt {\ttfamily\bfseries\color{cyan}hello}, um von LaTeX verarbeitet zu werden.

Bildbeschreibung hier eingeben

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

Antwort3

In ConTeXt können Sie das translateModul verwenden, um solche Suchen und Ersetzungen zur Kompilierungszeit durchzuführen:

\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

Das Ergebnis ist:

Bildbeschreibung hier eingeben

Antwort4

Für meine Unterhaltung bei der VerwendungLaTeX3definiert der folgende Code eine Umgebung boldwords, die eine durch Kommas getrennte Liste von Wörtern akzeptiert, die innerhalb der Umgebung fett gesetzt werden sollen. Das Ausführen des MWE erzeugt:

Bildbeschreibung hier eingeben

Beachten Sie insbesondere, dass „ login“ cataloguenicht fett dargestellt wird, da es sich nicht um ein vollständiges Wort handelt.

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

verwandte Informationen