删除标题中的文字装饰

删除标题中的文字装饰

我可以从目录中删除文本装饰,例如突出显示或待办事项,但不能从标题行中删除。我这样做时没有将纯文本放入的可选参数中,因为\chapter[]{}pandoc 用于将文本转换为 latex,目前不支持可选参数。

这是一个简单的 MWE:

\documentclass[oneside]{book}

\usepackage{xcolor}
\usepackage{soul}
\usepackage{todonotes}
\usepackage{lipsum}
\usepackage{ulem}
\DeclareRobustCommand{\nohl}[1]{#1}
\addtocontents{toc}{\begingroup%
  \protect\renewcommand{\protect\todo}[1]{}
  \let\hl\nohl
}
\AtEndDocument{%
  \addtocontents{toc}{\endgroup}
}

\begin{document}

\tableofcontents

{\let\clearpage\relax \chapter{Header with \hl{highlights} and \sout{deletions}}}

\section[A second header with a note]{A second header with a note\todo{keep it}}

\lipsum[1-2]

\end{document}

标题装饰

如何在不使用 \chapter 可选参数的情况下删除标题行中的突出显示(默认和 fancyhdr)?或者甚至可以删除任何 latex 命令/宏并仅保留内部文本?

顺便说一句:\DeclareRobustCommand\let\hl\nohl是一种解决方法,因为\protect\renewcommand{\hl}[1]{#1}会产生错误! Illegal parameter number in definition of \reserved@a.

答案1

您可以使用 检查命令是否进入目录或标题\ifx\protect\@unexpandable@protect <code for moving text> \else <normal code> \fi

请注意,为了使其正常工作,重要的是如此定义的宏不是受到保护/“强大”。

尝试这个:

\documentclass[oneside]{book}

\usepackage{xcolor}
\usepackage{soul}
\usepackage{todonotes}
\usepackage{lipsum}
\usepackage{ulem}

\makeatletter
\newcommand\ifmoving{%
    \ifx\protect\@unexpandable@protect
        \expandafter\@firstoftwo
    \else
        \expandafter\@secondoftwo
    \fi
}

\let\oldhl\hl
% If you used \DeclareRobustCommand or \protected\def it would not work.
\renewcommand\hl{\ifmoving{}{\oldhl}}
\makeatother


\begin{document}

\tableofcontents

{\let\clearpage\relax \chapter{Header with \hl{highlights} and \sout{deletions}}}

\section[A second header with a note]{A second header with a note\todo{keep it}}

\lipsum[1-2]

\end{document}

相关内容