회고록의 \목차를 기본적으로 별표 표시된 \목차*처럼 동작하게 만드는 방법은 무엇입니까?

회고록의 \목차를 기본적으로 별표 표시된 \목차*처럼 동작하게 만드는 방법은 무엇입니까?

(ToC 내에 ToC를 나열함) 및 (ToC 내에 ToC를 나열하지 않음)을 기반으로 memoir하는 클래스를 작성 중입니다 .\tableofcontents\tableofcontents*

나는 보았다이 질문중복되는 항목이 많지만 사용자의 선택에 관계없이 목차 자체가 목차에 나열되는 것을 방지하고 싶습니다.\tableofcontents* \tableofcontents.

memoir매뉴얼(섹션 9.2) 에 따라 현재 etoolbox다음 작업을 수행하고 있습니다.

\pretocmd{\tableofcontents}{\begin{KeepFromToc}}{}{<class warning omitted>}
\apptocmd{\tableofcontents}{\end{KeepFromToc}}{}{<class warning omitted>}

예상대로 작동합니다(별표가 있는 변형과 별표가 없는 변형 모두 ToC 항목을 작성하지 않습니다).

이것이 권장되는 방법입니까? 이 방법에 제가 생각하지 못한 나쁜 부작용이 있나요?

수행하려는 모든 테스트에 대한 MWE는 다음과 같습니다.

\documentclass{memoir}
\usepackage{etoolbox}

\pretocmd{\tableofcontents}{\begin{KeepFromToc}}{}{}
\apptocmd{\tableofcontents}{\end{KeepFromToc}}{}{}

\begin{document}

\tableofcontents   
\chapter{Test Chapter}
\section{Test Section}

\end{document}

답변1

명령 \tableofcontents은 다음과 같이 정의됩니다.

> \tableofcontents=macro:
->\@ifstar {\@nameuse {mem@tableofcontents}{01}}{\@nameuse {mem@tableofcontents}{00}}.

\show\tableofcontents정의가 간접적이기 때문에 사용해야 했습니다 .

\newlistof{tableofcontents}{toc}{\contentsname}

따라서

\makeatletter
\renewcommand{\tableofcontents}{%
  \@ifstar{\mem@tableofcontents{01}}
          {\mem@tableofcontents{01}}%
}
\makeatother

할 것입니다.

완전한 예:

\documentclass{memoir}
\makeatletter
\renewcommand{\tableofcontents}{%
  \@ifstar{\mem@tableofcontents{01}}
          {\mem@tableofcontents{01}}%
}
\makeatother

\begin{document}

\tableofcontents
\chapter{Test Chapter}
\section{Test Section}

\end{document}

그것 으로 \tableofcontents*동일할 것입니다.

답변2

패키지 가 없으면 etoolbox다음과 같이 할 수 있습니다.

\documentclass{memoir}

\makeatletter
\let\oldtableofcontents\tableofcontents
\def\tableofcontents{\@ifstar{\oldtableofcontents*}{\oldtableofcontents*}}
\makeatother

\begin{document}

\tableofcontents  
\chapter{Test Chapter}
\section{Test Section}

\end{document}

(물론 파일에는 , .cls가 필요하지 않습니다 \makeatletter. \makeatother)

관련 정보