我正在寻找一种方法来使用 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-scrpage
。fancyhdr
然后,您可以为页码背景定义并插入一个新层。
\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
,则不需要。TikZ
xcolor
以下是我这个穷人的版本:
\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}