横跨正文和边注的页眉和页脚

横跨正文和边注的页眉和页脚

默认情况下,页眉和页脚仅跨越文本主体的宽度,但我需要它们跨越边距注释的宽度正文。我能够得到的最接近的结果是使用headwidthpaperwidth选项。

\documentclass[a4paper,oneside]{article}

\usepackage{mwe}
\usepackage[margin=2cm,marginparwidth=4cm,includemp,reversemp]{geometry}
\usepackage[headwidth=paper, footwidth=paper]{scrlayer-scrpage}

\ihead{left header}
\chead{centre header}
\ohead{right header}

\ifoot{left footer}
\cfoot{centre footer}
\ofoot{right footer}

\begin{document}

\section{Some text}

\blindtext
\marginpar{This is a margin note}

\section{Some more text}

\blindtext

\end{document}

现在,页眉与页边注释列正确左对齐。但是,“右页眉”超出了页面边缘。显然,我需要将页眉宽度设置为诸如 marginwidth + marginparsep + textwidth 之类的值。但是,我在 KOMA-Script 手册(至少是英语版本,scrguide-en.pdf)中找不到有关如何执行此操作的任何信息。

我对有或没有 的解决方案持开放态度scrlayer-scrpage。我宁愿避免手动放置标题元素(例如使用textpos),因为我认为其他人维护代码会更加困难。

在此处输入图片描述

答案1

问题在于reversemp选项geometry。因此,简单的方法headwidth=textwithmarginpar不起作用。但是,您可以使用额外的偏移量:

\documentclass[a4paper,oneside]{article}

\usepackage{mwe}
\usepackage[margin=2cm,marginparwidth=4cm,includemp,reversemp]{geometry}

\usepackage{scrlayer-scrpage}
\KOMAoptions{headwidth=textwithmarginpar:-\marginparsep-\marginparwidth,footwidth=textwithmarginpar:-\marginparsep-\marginparwidth}

\ihead{left header}
\chead{centre header}
\ohead{right header}

\ifoot{left footer}
\cfoot{centre footer}
\ofoot{right footer}

\begin{document}

\section{Some text}

\blindtext
\marginpar{This is a margin note}

\section{Some more text}

\blindtext

\end{document}

一页有页眉和页脚

提供偏移量的信息记录在英文版 KOMA-Script 手册第 5.5 节中。

注意:使用类似的偏移量-\marginparwidth-\marginparsep不能作为的可选参数,\usepackage而只能使用\KOMAoption\KOMAoptions

编辑:KOMA-Script 的作者告诉我,从 KOMA-Script 3.39 开始,

\usepackage[headwidth=textwidthmarginpar,footwidth=head]{scrlayer-scrpage}

如果 在和选项scrlayer-scrpage之后加载或在加载之前激活,则足够了。geometrygeometryreversemp\reversemarginparscrlayer-scrpage

答案2

只是为了好玩:

这重新定义了 pagestyle plain,通过重叠边缘来生成宽标题。

\documentclass[a4paper,oneside]{article}

\usepackage[margin=2cm,marginparwidth=4cm,includemp,reversemp,showframe]{geometry}
\usepackage{blindtext}

\makeatletter
\def\ps@plain{%
    \def\@oddhead{\hspace{\dimexpr -\marginparwidth-\marginparsep}%
      \rlap{\ihead}\hfill\chead\hfill\llap{\ohead}}
    \let\@evenhead\@oddhead% just in case
    \def\@oddfoot{\hspace{\dimexpr -\marginparwidth-\marginparsep}%
      \rlap{\ifoot}\hfill\cfoot\hfill\llap{\ofoot}}
    \let\@evenfoot\@oddfoot% just in case
    \let\@mkboth\@gobbletwo
    \let\sectionmark\@gobble
    \let\subsectionmark\@gobble
    }
\makeatother

\def\ihead{left header}
\def\chead{centre header}
\def\ohead{right header}

\def\ifoot{left footer}
\def\cfoot{centre footer}
\def\ofoot{right footer}

\pagestyle{plain}

\begin{document}

\section{Some text}

\blindtext
\marginpar{This is a margin note}

\section{Some more text}

\blindtext

\end{document}

这使用 paracol 将 marginpar 区域实现为单独的列。请注意,只能\marginpar在段落之间使用。另一方面,这些 marginpar 会跨页。

\documentclass[a4paper,oneside]{article}

\usepackage[margin=2cm,showframe]{geometry}
\usepackage{paracol}
\usepackage{fancyhdr}
\usepackage{blindtext}

\fancyhead[L]{left header}
\fancyhead[C]{centre header}
\fancyhead[R]{right header}

\fancyfoot[L]{left footer}
\fancyfoot[C]{centre footer}
\fancyfoot[R]{right footer}

\pagestyle{fancy}

\renewcommand{\marginpar}[1]{\switchcolumn*
  \vspace*{-\baselineskip}{\parindent=0pt\sloppy#1}%
  \switchcolumn}

\begin{document}
\setcolumnwidth{4cm}% uses \columnsep instead of \marginparsep
\begin{paracol}{2}
\switchcolumn% start in right column
\section{Some text}

\blindtext
\marginpar{This is a margin note}

\section{Some more text}

\blindtext

\end{paracol}
\end{document}

相关内容