我在用minitoc
在我的文档中每个章节标题下方。但是,根据章节标题的大小,minitoc
向下移动。这看起来不太好,因为我的章节标题大小不同,因此当你浏览文档时minitoc
出现在章节标题页的不同位置。下面的 MWE 举例说明了这个问题:
\documentclass[pdftex,10pt,b5paper,twoside]{book}
\usepackage[lmargin=25mm,rmargin=25mm,tmargin=27mm,bmargin=30mm]{geometry}
\usepackage[english]{babel}
\usepackage{csquotes}
\usepackage{quotchap}
\usepackage{lipsum}
\usepackage{hyperref}
\usepackage{mdframed}
\usepackage[nohints,tight]{minitoc}
\setcounter{minitocdepth}{1}
\begin{document}
\dominitoc
\tableofcontents
\chapter[ONE]{RATHER LONG TITLE THAT OCCUPIES MORE THAN ONE LINE AND THUS SHIFTS THE MINITOC BELOW DOWN} \label{chap:1}
\minitoc
\vfill
\begin{mdframed}
Comments on Chapter~\ref{chap:1} also varying in size.
\end{mdframed}
\clearpage
\section{SECTION ONE}
\lipsum[1-2] \cite{lipsum}.
\section{SECTION TWO}
\lipsum[1-2] \cite{lipsum}.
\section{SECTION THREE}
\lipsum[1-2] \cite{lipsum}.
\cleardoublepage
\chapter[TWO]{SHORT TITLE} \label{chap:2}
\minitoc
\vfill
\begin{mdframed}
Comments on Chapter~\ref{chap:2} which also may vary in size but should not influence the position of the \texttt{minitoc}.
\end{mdframed}
\clearpage
\section{SECTION ONE}
\lipsum[1-2] \cite{lipsum}.
\section{SECTION TWO}
\lipsum[1-2] \cite{lipsum}.
\section{SECTION THREE}
\lipsum[1-2] \cite{lipsum}.
\section{SECTION FOUR}
\lipsum[1-2] \cite{lipsum}.
\subsection{SUBSECTION FOUR ONE}
\lipsum[1-4] \cite{lipsum}.
\cleardoublepage
\begin{thebibliography}{9}
\bibitem{lipsum}
Patrick Happel.
lipsum -- Easy access to the Lorem Ipsum dummy text.
2014
\end{thebibliography}
\cleardoublepage
\end{document}
答案1
我认为有两种方法可以解决这个问题。
一种方法是使用 textpos,它可以用于各种文档。如果您将 textpos 与选项一起包含[absolute]
,则会导致{textblock}
元素位于页面上的绝对位置,这样\minitoc
每次将您的元素放在那里时,它都会位于同一位置。
另一种方式 — — 对我来说更有吸引力,但是却相当声名狼藉 — — 就是进行黑客攻击\chapter
。
宏在标准中内部\chapter
调用,并且似乎在重新定义之后调用。我们可以查看的定义,然后重新定义它:\@makechapterhead
book.cls
{quotchap}
{quotchap}
\makeatletter
\let\@makechapterhead@fmbm\@makechapterhead % save default
\def\@makechapterhead@mainmatter#1{
\vbox to 10cm{% or whatever size you prefer
\chapterheadstartvskip
\size@chapter\sectfont
\raggedleft
\ifnum \c@secnumdepth >\m@ne
{\chapnumfont\thechapter\par\nobreak}
\fi
\advance\leftmargin 10em
\interlinepenalty \@M
#1\par
%\hrule %uncomment to see the result of the spacing
\vss}
%\hrule %ditto
\nobreak}
\def\@makechapterhead{
% use our new one in the mainmatter
\if@mainmatter
\let\next\@makechapterhead@mainmatter
\else
% and the original in the front- and back-matter
\let\next\@makechapterhead@fmbm
\fi
\next}
\makeatother
这样就可以将章节标题设置在固定大小的框中。您甚至可以\minitoc
在后面附加\nobreak
,这样就免去了每章都输入标题的繁重工作!
我并不是说这一定是好的做法,但这可能是我在这种情况下会做的事情(但在破解 LaTeX 方面,我的忍耐度相当高)。顺便说一句,您那里有一套精心设计的软件包。在您的处境下,我可能会将它们转储到一个文件中mybook.cls
(可能连同上述定义),然后开始\documentclass{mybook}
在我使用它的各种文档中使用它。