toc 和 minitoc 中的节名称不同

toc 和 minitoc 中的节名称不同

我正在尝试在 ToC 和 mintoc 中使用不同的部分名称。

(这可能听起来很奇怪,但由于 toc 和 monitoc 不会具有相同的深度,我想对包含详细小节的 mintoc 中没有用的 toc 名称提供见解)

很容易将 toc 中的名称与 body 中的名称更改,但我无法在 toc 和 monitoc 中输入不同的名称。

数学方程

\documentclass[11pt]{report}

\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage[tight,k-tight]{minitoc}

\begin{document}

\dominitoc

\tableofcontents

\chapter{Animals}
\minitoc

\section{Lion}
\section[Zebra family]{Zebra}
\subsection{Mini-zebra}

\end{document}

我希望 toc 中有“Zebra family”,但在 monitoc 中有“Zebra”。

感谢您的帮助!

答案1

侵入一些核心内核宏:

\documentclass[11pt]{report}

\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage[tight,k-tight]{minitoc}

\usepackage{etoolbox}
\makeatletter
\patchcmd\@sect{\fi #7}{\fi \ONEORTHEOTHER{#7}{#8}}{}{\typeout{***FAILED***}}
\patchcmd\@sect{\fi #7}{\fi \ONEORTHEOTHER{#7}{#8}}{}{\typeout{***FAILED TOO***}}
\makeatother
\DeclareRobustCommand\ONEORTHEOTHER[2]{#1}% ensures normal default behaviour
\begin{document}

\dominitoc
\tableofcontents
\DeclareRobustCommand\ONEORTHEOTHER[2]{#2}% switches to usage of alternative title

\chapter{Animals}
\minitoc

\section{Lion}
\section[Zebra family]{Zebra}
\subsection{Mini-zebra}

\end{document}

主要目录:

enter image description here

米尼托克:

enter image description here

根据要求,它在 Minitoc 中使用与章节标题本身相同的标题 Zebra。

答案2

您可以定义一个强健的命令,该命令通常会选择其第一个参数并丢弃第二个参数,但在 minitoc 中会改变行为。

每个 minitoc 都是按组排版的,因此组结束时更改就会消失。

\documentclass[11pt]{report}

\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{etoolbox}

\usepackage[tight,k-tight]{minitoc}

\makeatletter
\pretocmd{\sv@minitoc@}
  {\let\tocorminitoc\@secondoftwo}
  {}{}
\newrobustcmd\tocorminitoc[2]{#1}
\makeatother

\begin{document}

\dominitoc

\tableofcontents

\chapter{Animals}
\minitoc

\section{Lion}
\section[Zebra\tocorminitoc{ family}{}]{Zebra}
\subsection{Mini-zebra}

\end{document}

enter image description here

相关内容