我目前正在使用ulem
和\sout
做删除线,但如果我想在章节标题中添加删除线怎么办?
我正在使用hyperref
并在使用时收到以下错误\section{\sout{..}}
:
Argument of \UL@word has an extra }.
有谁知道如何做到这一点?
答案1
与往常一样,在使用宏移动诸如章节标题之类的参数时,您需要格外小心。它们被写入目录,也hyperref
写入 PDF 书签,这些书签只接受文本,不接受格式。
确保\protect
所有宏(\sout
已受保护)。解决方案为什么 hyperref 不喜欢在章节标题中通过 \let 设置的命令?没有用,但使用\texorpdfstring
可以。我建议使用自己的包装器宏,它在内部使用并使用(或)\texorpdfstring
定义:\DeclareRobustCommand
\protected\def
\documentclass{article}
\usepackage{ulem}
\usepackage{hyperref}
\usepackage{nameref}
\DeclareRobustCommand{\hsout}[1]{\texorpdfstring{\sout{#1}}{#1}}
\begin{document}
\tableofcontents
\section{\hsout{Striked out section title}}\label{foo}
\ref{foo}
\autoref{foo}
\nameref{foo}
\end{document}
答案2
\sout
您可以通过将以下内容放入其中来实现\section
:
\documentclass{article}
\usepackage{ulem}
\begin{document}
\section{\sout{Striked out part} of a section title}
\end{document}
使其与 hyperref 一起工作
为了使它能够正常工作,hyperref
请使用\texorpdfstring
\section{\texorpdfstring{\sout{Striked out part}}{Striked out part} of a section title}
\section
或者使用可选参数
\section[Striked out part of a section title]{\sout{Striked out part} of a section title}