是否可以自动格式化从特定字母序列开始的单词?例如,在文本中,我希望从(区分大小写)"HalloWorld, HalloPeople, there is a nice day!"
开始的整个单词为红色(在本例中为和)。谢谢!"Hallo"
"HalloWorld"
"HalloPeople"
答案1
以下解决方案使用 LuaLaTeX,是以下答案的简单扩展:https://tex.stackexchange.com/a/165224/5001。
解决方案假设字符串“Hallo”(没有任何后续字母)也应突出显示。如果不是这种情况,只需将函数的第二个参数更改"(Hallo%a*)"
为。"(Hallo%a+)"
string.gsub
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{fontspec,xcolor}
\usepackage{luacode,luatexbase}
\begin{luacode}
function Hallo_Highlight ( line )
return string.gsub(line, "(Hallo%a*)" , "\\textcolor{red}{%0}")
end
luatexbase.add_to_callback( "process_input_buffer", Hallo_Highlight, "Hallo")
\end{luacode}
\begin{document}
Hallo xyz HalloWorld, HalloPeople! abc
\end{document}
附录解决 OP 的后续问题:要在lstlisting
环境处于活动状态时关闭“Hallo ...”单词的突出显示,有用的是(a)设置显式 LaTeX 宏来打开和关闭突出显示(分别称为\HighlightOn
和\HighlightOff
,以及(b)使用etoolbox
包修补lstlisting
环境,以便在环境处于活动状态时关闭突出显示)。开始环境lstlisting
并重新打开结尾环境lstlisting
。宏\HighlightOn
和\HighlightOff
也可以在文档的其他部分使用;但一定要交替使用宏。即,不要\HighlightOn
连续使用两次(或更多次); 也是如此\HighlightOff
。
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{fontspec}
\usepackage{xcolor,luacode,luatexbase}
\begin{luacode}
function Highlight ( line )
line = string.gsub (line, "(Hallo%a*)" , "\\textcolor{red}{%0}")
return ( line )
end
\end{luacode}
\newcommand\HighlightOn{\luaexec{%
luatexbase.add_to_callback( "process_input_buffer",
Highlight, "Highlight" )}}
\newcommand\HighlightOff{\luaexec{%
luatexbase.remove_from_callback('process_input_buffer',
"Highlight" )}}
\HighlightOn % switch on highlighting of "Hallo..." strings
\usepackage{listings,etoolbox}
\AtBeginEnvironment{lstlisting}{\HighlightOff}
\AtEndEnvironment{lstlisting}{\HighlightOn}
\begin{document}
Hallo xyz HalloWorld, HalloPeople! abc
\begin{lstlisting}
Write('HalloWorld');
\end{lstlisting}
Hallo xyz HalloWorld, HalloPeople! abc
\end{document}