将页码包装在页脚的彩色框中

将页码包装在页脚的彩色框中

我正在寻找一种方法来使用 fancyhdr 创建的页脚中的页码实现以下结果:

期望的结果

我当前在独立示例中的代码如下所示:

\documentclass[12pt,a4paper,parskip=full]{scrartcl}

\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{lipsum}
\usepackage{fancyhdr}
\usepackage[a4paper,left=4.5cm,right=3cm,top=2.5cm,bottom=2cm,includeheadfoot]{geometry}

% Header and footer
\fancyhf{}
\pagestyle{fancy}
\renewcommand{\sectionmark}[1]{\markboth{\thesection.\ #1}{}}
\renewcommand{\headrulewidth}{0.3pt}
\renewcommand{\footrulewidth}{0.3pt}
\chead{\small{\leftmark}}
\lfoot{\small{Author name}}
\rfoot{\small{\thepage}}

\begin{document}

\pagestyle{fancy}

\section{Section One}

\lipsum

\clearpage

\section{Section Two}

\lipsum

\end{document}

这当然会导致一个非常标准的结果:

目前的结果

我在 fancyhdr 文档中找到最接近的东西是拇指索引,但是我不确定如何使它们适应这一点。

有没有简单的方法可以做到这一点,或者是否需要用 tikz 进行大量自定义绘图?

我感谢所有的提示。

答案1

由于您正在使用 KOMA-Script 类,scrartcl我建议您改用scrlayer-scrpagefancyhdr然后,您可以为页码背景定义并插入一个新层。

\documentclass[12pt,numbers=enddot,parskip=full]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{blindtext}
\usepackage[a4paper,left=4.5cm,right=3cm,top=2.5cm,bottom=2cm,includeheadfoot]{geometry}
\usepackage{xcolor}

% header and footer
\usepackage[automark,headsepline=.3pt,footsepline=.3pt]{scrlayer-scrpage}
\clearpairofpagestyles
\chead{\leftmark}
\ifoot{Author name}

\newcommand\pagenumberwidth{1cm}% <- width of the black box
\ofoot{\makebox[\pagenumberwidth]{\pagemark}}

% new layer for the pagenumber background:
\DeclareNewLayer[
    clone=scrheadings.foot.oneside,% <- clone the foot layer
    contents={\parbox{\layerwidth}{\raggedleft\rule{\pagenumberwidth}{\baselineskip}}}%<- black rule
  ]{pagenumber.bg}
% add the new layer to the pagestyle before the foot layer:
\AddLayersToPageStyleBeforeLayer{scrheadings}{pagenumber.bg}{scrheadings.foot.oneside}

% fonts
\addtokomafont{pageheadfoot}{\small\upshape}
\addtokomafont{pagenumber}{\bfseries\color{white}}% <- white pagenumber

\begin{document}
\Blinddocument
\Blinddocument
\end{document}

在此处输入图片描述


或者,您可以将黑框添加到图层headsepline并将该图层移动到背景:

\documentclass[12pt,numbers=enddot,parskip=full]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{blindtext}
\usepackage[a4paper,left=4.5cm,right=3cm,top=2.5cm,bottom=2cm,includeheadfoot]{geometry}
\usepackage{xcolor}

%Header and footer
\usepackage[automark,headsepline=.3pt,footsepline=.3pt]{scrlayer-scrpage}[2015/02/07]
\clearpairofpagestyles
\chead{\leftmark}
\ifoot{Author name}

\newcommand\pagenumberwidth{1cm}% <- width of the black box
\ofoot{\makebox[\pagenumberwidth]{\pagemark}}
\ModifyLayer[
  background,
  addcontents={%
    \nobreak\makebox[0pt][r]{\smash{\raisebox{-\height}{%
      \parbox{\layerwidth}{\raggedleft\rule{\pagenumberwidth}{\baselineskip}}%
  }}}}
]{scrheadings.foot.above.line}

% fonts
\addtokomafont{pageheadfoot}{\small\upshape}
\addtokomafont{pagenumber}{\bfseries\color{white}}% <- white pagenumber

\begin{document}
\Blinddocument
\Blinddocument
\end{document}

结果和上面一样。

请注意,该选项addcontents是在 KOMA-Script 版本 3.16(2015/02/07)中实现的。因此您需要此版本或更新版本来运行第二个示例。

答案2

我的第一个想法是使用,但如果您愿意加载包TikZ,则不需要。TikZxcolor

以下是我这个穷人的版本:

\documentclass{article}

\usepackage{xcolor}
\usepackage{fancyhdr}
\fancyhf{}
\pagestyle{fancy}
\renewcommand{\sectionmark}[1]{\markboth{\thesection.\ #1}{}}
\renewcommand{\headrulewidth}{0.3pt}
\renewcommand{\footrulewidth}{0.3pt}
\chead{\small{\leftmark}}
\lfoot{\small{Author name}}
\rfoot{\mypage}

\usepackage{lipsum}

\newcommand\mypage{%%
  \raisebox{2 pt}[0pt][0pt]{%%
  \rule[-1ex]{1cm}{3.5ex}%%
  \hspace*{-0.5cm}%%
  \makebox[0pt]{\textcolor{white}{\small\thepage}}%%
  \hspace*{0.5cm}}%%
}

\begin{document}

\lipsum[1-140]

\end{document}

在此处输入图片描述

相关内容