我在写论文时使用了学校提供的自定义 documentclass,这是 documentclass 书的修改版。他们还提供了一个模板,其中包括以下行
\pagestyle{headings}
激活此功能后,每页(不开始章节的页面)顶部都有章节标题,右上角有页码。如果章节标题很长,它会直接延伸到页码,甚至会重叠。停用此功能后,我会丢失整个标题,包括章节标题和页码。
我知道覆盖 documentclass 文件的方法,比如通过指定不同的页面样式(如普通或花式),但这些方法也会覆盖我的标题。
我想将章节标题保留在页面顶部,但将页码移至底部。我需要编辑 documentclass 文件吗?或者有没有办法重新定义“标题”的作用?
我对编写 documentclass 文件一无所知,但我的猜测是我可以通过改变其中的一部分来获得所需的效果,如下所示:
\def\ps@headings{%
\let\@oddfoot\@empty\let\@evenfoot\@empty
\def\@evenhead{\thepage\hfil\slshape\leftmark}%
\def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
\let\@mkboth\markboth
\def\chaptermark##1{%
\markboth {\MakeUppercase{%
\ifnum \c@secnumdepth >\m@ne
\if@mainmatter
\@chapapp\ \thechapter. \ %
\fi
\fi
##1}}{}}%
\def\sectionmark##1{%
\markright {\MakeUppercase{%
\ifnum \c@secnumdepth >\z@
\thesection. \ %
\fi
答案1
有不同的方法。您可以修补原始代码以将页码放在底部。或者修补它以包装更长的章节标题(底部的示例)。其他方法可能是删除字符串章节或者完全删除所有大写字母。
所有这些都会改变模板的输出。无论哪种方式,使用包都比修补低级命令更好:
\documentclass[11pt,a5paper]{book}
\usepackage{geometry}
\usepackage{blindtext}
\usepackage{scrlayer-scrpage}
\ohead{}
\cfoot{\pagemark}
\begin{document}
\chapter{Wombats are cute and cuddly, just like ducks}
\blindtext[3]
\end{document}
标题包装:
\documentclass[11pt,a5paper]{book}
\usepackage{geometry}
\usepackage{blindtext}
\usepackage{etoolbox}
\tracingpatches
\makeatletter
\patchcmd{\@evenhead}{\leftmark}{\parbox[t]{.9\linewidth}{\leftmark}}{}{}
\makeatother
\begin{document}
\chapter{Wombats are cute and cuddly, just like ducks}
\blindtext[3]
\end{document}