是否有可能并且更有建设性地让 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
为了我的娱乐使用LaTeX3,下面的代码定义了一个环境boldwords
,该环境接受以逗号分隔的单词列表,这些单词将在环境内以粗体显示。运行 MWE 会产生以下结果:
特别注意,inlog
没有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}