我可以從目錄中刪除突出顯示或待辦事項等文字裝飾,但不能從標題行中刪除。我這樣做時沒有將純文字放入可選參數中,\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)?或者甚至可以刪除任何乳膠命令/巨集並只保留內部文字?
順便一提:\DeclareRobustCommand
and\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}