헤더의 텍스트 장식 제거

헤더의 텍스트 장식 제거

TOC에서는 강조 표시나 할 일과 같은 텍스트 장식을 제거할 수 있지만 헤더 줄에서는 제거할 수 없습니다. \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}

관련 정보