
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 を実行すると、次のものが生成されます。
特に、「log
in」は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}