我是 LaTeX 的初学者,我选择了一个大学模板来撰写小组报告。
我不知道在哪里可以更改顶部和底部都有太多空白的章节标题。模板使用 fncychap,但我似乎找不到任何可以更改它的内容。还有一个类文件。我可能在哪里找到这个选项?我应该寻找什么?我可以手动覆盖它吗?
例如,我们的目录页面顶部有大约四分之一的空白,这导致它泄漏到两页上,这是完全没有必要的。
首先,我了解到 fncychap 中有模板,但我似乎无法弄清楚使用的是哪一个。这是类文件中的内容:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% Fancy Chapter Headings
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% (must be loaded before hyperref)
\RequirePackage{./local/fncychap/fncychap}
%
% customizations
\makeatletter
\ChNameVar{\raggedleft\Huge\rm}
\ChNumVar{\Huge\rm}
\ChTitleVar{\raggedleft\Huge\sf\bfseries}
\ChRuleWidth{2pt}
\renewcommand{\DOCH}{%
\vskip -0.5\baselineskip
\mghrulefill{\RW}\par\nobreak
\CNV\FmN{\@chapapp}\space \CNoV\thechapter
\par\nobreak
\vskip -0.5\baselineskip
}
\renewcommand{\DOTI}[1]{%
\mghrulefill{\RW}\par\nobreak
\CTV\FmTi{#1}\par\nobreak
\vskip 60\p@
}
\renewcommand{\DOTIS}[1]{%
\mghrulefill{\RW}\par\nobreak
\CTV\FmTi{#1}\par\nobreak
\vskip 60\p@
}
什么是 DOCH/DOTI 等?我尝试使用 \vskip,但似乎没有任何明显的效果。
(这模板正在讨论中)
答案1
如果您只需要减少“目录”一词上方的空间,您可以更改 的定义\DOTIS
。它代表 DO TItle Star 形式,它将是无编号章节中的第一个内容。如果您将其放在\vspace*{-50pt}
\mghrulefill 之前,这将取消 增加的 50pt 空间fncychap
。作为替代方案,您可以\@makeschapterhead
从重新定义fncychap.sty
,删除或更改行\vspace*{50pt}
。
如果您希望偶数章节的顶部空间较少,您可以重新定义\DOCH
。这代表 DO 章节标题,是编号章节中的第一个内容。\vspace*{-50pt}
出于同样的原因,您可以使用它来开始它。另一种方法是重新定义\@makechapterhead
并删除或更改起始\vspace
命令。
我会更改\@make...
命令。下面只需删除\vspace*{50pt}
:
\makeatletter
\def\@makechapterhead#1{%
% \vspace*{50\p@}% commenting out this line
{\parindent \z@ \raggedright \normalfont
\ifnum \c@secnumdepth >\m@ne
\if@mainmatter%%%%% Fix for frontmatter, mainmatter, and backmatter 040920
\DOCH
\fi
\fi
\interlinepenalty\@M
\if@mainmatter%%%%% Fix for frontmatter, mainmatter, and backmatter 060424
\DOTI{#1}%
\else%
\DOTIS{#1}%
\fi
}}
\def\@makeschapterhead#1{%
% \vspace*{50\p@}% commenting out this command
{\parindent \z@ \raggedright
\normalfont
\interlinepenalty\@M
\DOTIS{#1}
\vskip 40\p@
}}
\makeatother
把这个放在你的序言中(之前\begin{document}
)。
答案2
解决减少花哨章节标题上方垂直空白量问题的关键是注意dutmsc
文档类会加载book
文档类。因此,您需要修补 中定义的两个宏——具体来说,分别是编号和未编号章节的book.cls
宏\@makechapterhead
和。(这两个宏都是在包中定义并由包重新定义的,包也由类加载。有趣的是,该包的重新定义不会修改章节标题上方的默认空白量,该量由类设置。)\@makeschapterhead
book.cls
fncychap
dutmsc
50pt
book
如果需要,请在序言中添加以下说明不章节标题上方的额外空白。
\usepackage{etoolbox} % provides macros for patching macros
\makeatletter
\patchcmd{\@makechapterhead}{50\p@}{0\p@}{}{}
\patchcmd{\@makeschapterhead}{50\p@}{0\p@}{}{}
\makeatother