удалить текстовые украшения в заголовке

удалить текстовые украшения в заголовке

Я мог бы удалить текстовые украшения, такие как выделение или todos, из TOC, но не из строки заголовка. Я сделал это, не помещая простой текст в необязательный параметр, потому \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}

украшения заголовков

Как убрать подсветку в строке заголовка (по умолчанию и с fancyhdr) без использования необязательного параметра \chapter? Или вообще возможно удалить любую команду/макрос latex и просто сохранить внутренний текст?

Кстати: \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}

Связанный контент