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 사용)에서 강조 표시를 제거하려면 어떻게 해야 합니까? 아니면 라텍스 명령/매크로를 제거하고 내부 텍스트만 유지하는 것이 가능합니까?
그런데: \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}