软件包 soul 错误:重建失败

软件包 soul 错误:重建失败

我已经阅读了关于此错误的讨论,但没有任何帮助。我的 MWE

\documentclass{minimal}
\usepackage{xcolor}
\usepackage{soul}
%\soulregister{\cl}{7} irrelevant
%\soulregister{\sethlcolor}{7}
\definecolor{inlineBG}{HTML}{F1F1F1}
\newcommand{\cl}[2]{\textcolor[HTML]{#1}{#2}}

\newcommand{\codeinline}[1]{%
  \sethlcolor{inlineBG}{%
  \texttt{\hl{#1}}}%
}

\begin{document}

% ok :
\codeinline{ {\cl{FF0000}{Hello}} }

% Package soul Error: Reconstruction failed.
\codeinline{ {\cl{FF0000}{Hellooooooooooooooooooooooooooooooooooooooooo}} }

\codeinline{ {\cl{FF0000}{Hello World}} }

\end{document}

第一个\codeinline运行正常,其他的都不好。我该如何修复它?

答案1

在类似情况下,我发现 soul 包提供的帮助文本非常有用。它建议将文本包装在 mbox 中。事实上,如果你将定义更改为

\newcommand{\codelinline}[1]{%
  \sethlcolor{inlineBG}{%
  \texttt{\hl{\mbox{#1}}}}%
}

你的 MWE 对我很有用。如果里面的文本很长,可能会出现连字符问题\codeline。(一般来说,这似乎是灵魂的限制。)

答案2

它不起作用。soul 的单词/音节分析器相当脆弱,像 \textcolor 这样的复杂命令会使其偏离轨道。如果要为文本着色,您应该在 之前调用 color \hl。少量颜色可以隐藏在 \mbox 中:

\documentclass{article}
\usepackage{xcolor}
\usepackage{soul}

\definecolor{inlineBG}{HTML}{F1F1F1}
\definecolor{inlineFG}   {HTML}{FF0000}
\newcommand{\codeinline}[1]{{%
  \sethlcolor{inlineBG}%
  \color{inlineFG}%
  \ttfamily
  \hl{#1}%
}}

\begin{document}

% ok :
\codeinline{Hello}

\codeinline{Hellooooooooooooooooooooooooooooooooooooooooo}

\codeinline{Helloooooooooo\mbox{\textcolor{green}{oooo}}ooooooooooooooooooooooooooo}
\end{document}

在此处输入图片描述

相关内容