テキスト内の選択した単語に特別な書式を自動的に適用する

テキスト内の選択した単語に特別な書式を自動的に適用する

LaTeX で特定の単語を特定の方法で自動的にフォーマットすることは可能であり、さらに建設的でしょうか? たとえば、「hello」という単語をすべて太字のシアンの等幅フォントで表示し、ドキュメントの残りの部分は通常のサンセリフと黒のままにしたいとします。

.tex ファイルをコンパイルする前に、毎回検索と置換を実行してカスタム コマンドに「hello」を配置せずに、これを実現するにはどうすればよいでしょうか?

答え1

これをXeLaTeXでコンパイルする

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

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

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

ここに画像の説明を入力してください

ただし、これを使用しないでください。単語を特別にマークしたい場合は、マクロを使用してください。

なぜでしょうか? 自動手順に頼るのは常にリスクを伴います。選択できる場合は、明示的なマークアップを好みます。もう 1 つの理由は、xesearchリソースを大量に消費し、現在メンテナンスされていないことです。

には類似のものはありませんpdflatex。LuaLaTeX で何かできる可能性があります。試してみましたchickenizeが、その機能は提供されていないようです。

答え2

少し遅れましたが、LuaLaTeXベースのソリューションをご紹介します。これは入力をスキャンする関数を設定します。前にTeX は通常の処理を実行します。文字列のすべてのインスタンスは、LaTeX によって処理されるよう、helloその場で に置き換えられます。{\ttfamily\bfseries\color{cyan}hello}

ここに画像の説明を入力してください

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

答え3

ConTeXt では、translateモジュールを使用してコンパイル時の検索と置換を行うことができます。

\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

これにより、次のようになります。

ここに画像の説明を入力してください

答え4

使用して楽しむためにラテックス3以下のコードは、boldwords環境内で太字でタイプセットされる単語のコンマ区切りリストを受け入れる環境を定義します。MWE を実行すると、次のものが生成されます。

ここに画像の説明を入力してください

特に、「login」はcatalogue完全な単語ではないため太字になっていないことに注意してください。

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

関連情報