为什么当我引入连字符和包含等号的文本时突出显示会停止工作?

为什么当我引入连字符和包含等号的文本时突出显示会停止工作?

我使用soul's\texthl和 组合来\texttt呈现内联代码,当到达行尾时,该代码可以在任意连字符点处中断。为了模拟内联代码的“逐字”方面,我基本上转义了\${}_&%#~^逐字文本中可能出现的任何特殊字符 ( )。

以下是我所取得成果的一个例子:

\documentclass{article}

\usepackage[margin=2cm]{geometry}
\usepackage{xcolor}
\usepackage{fontspec}
\usepackage{soul}

\definecolor{bg}{rgb}{0.85, 0.85, 0.85}
\setmonofont{Courier New}
\sethlcolor{bg}

\begin{document}

     aklsdklasj asdkj alskjd aslkj dalskjd asldjd asad ldasd  sd pjwed e jope pojep 
     ojepoj ejpm pwj slakdj as  \texthl{\texttt{\textbackslash \-\-n\-e\-w\-c\-o\-m\-m\-a\-n\-d\-\{\-t\-e\-s\-t\-\}\-\{\-o\-u\-t\-\}}}
\end{document}

使用以下命令进行编译latexmk -lualatex test.tex

在此处输入图片描述

不幸的是,如果我尝试渲染,x = 3突出显示就不再起作用:

\documentclass{article}

\usepackage[margin=2cm]{geometry}
\usepackage{xcolor}
\usepackage{fontspec}
\usepackage{soul}

\definecolor{bg}{rgb}{0.85, 0.85, 0.85}
\setmonofont{Courier New}
\sethlcolor{bg}

\begin{document}

     aklsdklasj asdkj alskjd aslkj dalskjd asldjd asad ldasd  sd pjwed e jope pojep 
     ojepoj ejpm pwj slakdj as  \texthl{\texttt{\textbackslash \-\-n\-e\-w\-c\-o\-m\-m\-a\-n\-d\-\{\-t\-e\-s\-t\-\}\-\{\-o\-u\-t\-\}}}

    \texthl{\texttt{x\- \-=\- \-3}}
\end{document}

在此处输入图片描述

有人知道为什么吗?

答案1

遵循并扩展@UlrikeFischer的建议,您可能希望开始使用包lua-ul而不是soul。我还想建议您加载xurl包并将较长的字符串放在\path包装器中,以允许在任意位置换行。这样,您可以编写

\highLight{\path|\newcommand{\test}{out}|}

代替

\texthl{\texttt{\textbackslash \-\-n\-e\-w\-c\-o\-m\-m\-a\-n\-d\-\{\-\textbackslash\-t\-e\-s\-t\-\}\-\{\-o\-u\-t\-\}}}

在此处输入图片描述

\documentclass{article}

\usepackage{fontspec}
\setmonofont{Courier New}

\usepackage{luacolor} % repalcement for 'xcolor'
\definecolor{bg}{rgb}{0.85, 0.85, 0.85}

\usepackage{lua-ul}  % replacement for 'soul' package
\LuaULSetHighLightColor{bg}

\usepackage{xurl} % for \path macro, allow line breaks at arbitrary locations

\begin{document}
aklsdklasj asdkj alskjd aslkj dalskjd asldjd asadcd   
pwj slakdj as \highLight{\path|\newcommand{\test}{out}|}

\smallskip
\highLight{\path+x=3+}
\end{document}

相关内容