格式化以特定字母序列开头的单词

格式化以特定字母序列开头的单词

是否可以自动格式化从特定字母序列开始的单词?例如,在文本中,我希望从(区分大小写)"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}

相关内容