刪除標題中的文字裝飾

刪除標題中的文字裝飾

我可以從目錄中刪除突出顯示或待辦事項等文字裝飾,但不能從標題行中刪除。我這樣做時沒有將純文字放入可選參數中,\chapter[]{}因為 pandoc 用於將文字轉換為乳膠,目前不支援可選參數。

這是一個簡單的 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)?或者甚至可以刪除任何乳膠命令/巨集並只保留內部文字?

順便一提:\DeclareRobustCommandand\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}

相關內容