pdflatex:pdfcomment 和 soul 之间的冲突

pdflatex:pdfcomment 和 soul 之间的冲突

这是MWE:

\documentclass{article}

\usepackage{soul}
\usepackage{pdfcomment}

\begin{document}

\section*{\hl{Fine}}

\section{\hl{Error}}

\end{document}

显示以下错误信息:

! Use of \SOUL@n doesn't match its definition.
\SOUL@ulunderline #1->{\setbox \z@ \hbox {#1}
                                             \dimen@ =\wd \z@ \dimen@i =\SOU...
l.10 \section{\hl{Error}}

?

未编号部分工作正常。此外,当我删除包时pdfcomment,一切正常。

答案1

pdfcomment加载hyperrefhyperref不知道如何处理\hl书签,然后出现错误。使用例如\texorpdfstring为书签提供替代文本:

\documentclass{article}

\usepackage{soul}

\usepackage{hyperref}


\begin{document}

\section*{\hl{Fine}}

%\section{\hl{Error}}

\section{\texorpdfstring{\hl{Fine}}{Fine}}

\end{document}

另外,你可以制作受\hl保护的

\usepackage{etoolbox}
\AtBeginDocument{\robustify\hl}

然后hyperref将以警告为代价放弃该命令:

Package hyperref Warning: Token not allowed in a PDF string (Unicode):
(hyperref)                removing `\hl' on input line 74.

答案2

问题出在书签上。\hl制作书签时只需返回其参数即可。

\documentclass{article}

\usepackage{soul}
\usepackage{pdfcomment}
%\usepackage{hyperref}

\makeatletter
\pdfstringdefDisableCommands{\let\hl\@firstofone}
\makeatother


\begin{document}

\section*{\hl{Fine}}

\section{\hl{Fine as well}}

\end{document}

在此处输入图片描述

答案3

快速浏览一下pdfcomment文档就会发现,它会加载soulpos,然后又会加载soulutf8,这是一个soul替代。因此,您应该检查是否只使用 加载 就缺少了某些功能pdfcomment

答案4

pdfcomment以与 不兼容的方式重新定义命令soul。如果您能够使用LuaLaTeX,这里有一个可能的解决方案(改用lua-ul):

\documentclass{article}

\usepackage{xcolor,luacolor,lua-ul}
\LuaULSetHighLightColor{yellow}
\usepackage{pdfcomment}

\begin{document}

\section*{\highLight{Fine}}
\section{\highLight{Error}}

\end{document}

请注意我必须在代码中如何更改,因为灵魂兼容模式也失败了\hl\highLight

相关内容