如何在不使用包的情况下自定义页眉和页脚

如何在不使用包的情况下自定义页眉和页脚

我知道一些控制 LaTeX 文档类中的页眉和页脚的主要命令book可以在 LaTeX 文档的标准文档类第 6.4 节中找到,例如

\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}}}}

但是如何生成诸如标题(或脚注)之类的装饰fancyhdr(我尝试插入\hrulefill但没有成功)?如何将子部分的名称放在左页标题上?我只对如何在不调用其他包的情况下完成基本工作感兴趣,也因为我想对输出进行一定的控制。

我知道它不是那么具体,但也许通过一些例子我可以详细阐述一些如何在没有外部包的情况下编辑标题的想法。

答案1

我完全同意 Bernards 的评论。为什么不使用fancyhdrtitleps包呢?

生成诸如主规则(或脚规则)之类的装饰,就像 fancyhdr 所做的那样

在我看来,主规则或脚规则都是邪恶的

如何将子部分的名称放在例如左页标题上?

您试过嗎\pagestyle{myheadings}

这里有一些想法,假设您没有使用任何其他 pagestyle 包,并使用带有自定义的titlesec标准类。它主要使用 的修补命令:book\pagestyle{headings}etoolbox

\documentclass{book}
\usepackage{etoolbox}
\begin{document} 
\makeatletter
  % define headrule and footrule
  \long\def\myline{\linebreak\hb@xt@\textwidth{\hrulefill\par}}
  % collect names from sectioning commands
  \apptocmd{\@chapter}{\gdef\currentchaptername{#1}}{}{}
  \apptocmd{\@schapter}{\gdef\currentchaptername{#1}}{}{}
  \apptocmd{\@sect}{{\ifnum#2=1\gdef\currentsectionname{#7}\else
  \ifnum#2=2 \gdef\currentsubsectionname{#7}\fi\fi}}{}{} 
  % enable multiline header
  \patchcmd{\@outputpage}{\hb@xt@\textwidth{\@thehead}}{\parbox{\textwidth}{\@thehead}}{}{}
  % redefine the \ps@headings macro by inserting \myline and \currentsubsectionname
  \def\ps@headings{%
    \let\@oddfoot\myline \let\@evenfoot\myline
    \ifundef{\currentsectionname}{\def\currentsectionname{}}{}
    \ifundef{\currentsubsectionname}{\def\currentsubsectionname{}}{}
    \long\def\@evenhead{\thepage\quad \slshape\leftmark\hfill \currentsectionname\hfill \currentsubsectionname\myline}%
    \long\def\@oddhead{{\slshape\rightmark}\hfil\thepage\myline}%
    \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}}}}
\makeatother

\begin{document}
\pagestyle{headings}

这个修补不会改变目录,并且还可以与babel、 和 一起使用hyperref(前提是它是在之后加载的)。

相关内容