我可以从目录中删除文本装饰,例如突出显示或待办事项,但不能从标题行中删除。我这样做时没有将纯文本放入的可选参数中,因为\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}