如何固定minitoc在章节标题页的绝对位置?

如何固定minitoc在章节标题页的绝对位置?

我在用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}
  • 有没有办法修复minitoc以便所有章节页面都一致?

  • 我应该考虑吗textpos或者主要用于beamers海报?

答案1

我认为有两种方法可以解决这个问题。

一种方法是使用 textpos,它可以用于各种文档。如果您将 textpos 与选项一起包含[absolute],则会导致{textblock}元素位于页面上的绝对位置,这样\minitoc每次将您的元素放在那里时,它都会位于同一位置。

另一种方式 — — 对我来说更有吸引力,但是却相当声名狼藉 — — 就是进行黑客攻击\chapter

宏在标准中内部\chapter调用,并且似乎在重新定义之后调用。我们可以查看的定义,然后重新定义它:\@makechapterheadbook.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}在我使用它的各种文档中使用它。

相关内容