我已经阅读了关于此错误的讨论,但没有任何帮助。我的 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}