
讓 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}
但不要使用它。如果你想專門標記一個單字,可以使用巨集。
為什麼?依賴自動程式總是有風險的:如果我有選擇,我更喜歡顯式標記。另一個原因是xesearch
資源匱乏且目前未維護。
沒有什麼類似的pdflatex
; LuaLaTeX 可以做一些事情。我嘗試過chickenize
,但似乎沒有提供該功能。
答案2
雖然有點晚了,但這裡有一個基於 LuaLaTeX 的解決方案。它設定一個掃描輸入的函數前TeX 進行任何常規處理;任何實例字串hello
都會「即時」替換為{\ttfamily\bfseries\color{cyan}hello}
, 以由 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}
答案3
答案4
為了我的使用樂趣乳膠3,下面的程式碼定義了一個環境boldwords
,該環境接受逗號分隔的單字列表,並在環境中以粗體排版。運行 MWE 會產生:
請特別注意,log
incatalogue
未加粗,因為它不是一個完整的單字。
\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}