为什么这不起作用?如何修复它?
\begin{document}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[LE,RO]{\textbf{Name}}
\fancyhead[RE,LO]{\textit{\leftmark}}
\fancyfoot[CE,CO]{{\parbox{\textwidth}{\hrulefill\kern-0.6ex\raisebox{-0.5ex}{$\Bigl[$\makebox[\widthof{1.2{\thepage
of \pageref{LastPage}}}][c]{\thepage \hspace{1pt} of \pageref{LastPage}}$\Bigr]$}\kern-0.5ex\hrulefill}}}
\end{document}
它应该是一个包含我的名字和章节/部分的页眉。页脚应该是一个漂亮的页码。有人能帮我吗?
答案1
再次使用现代的解决方案scrlayer-scrpage
:
\documentclass{book}
\usepackage{blindtext}
\usepackage{lastpage}
\usepackage{scrlayer-scrpage}
\clearscrheadfoot
\ihead{\headmark}
\ohead{\textbf{Your Name}}
\usepackage{calc}
\newcommand\footy{\parbox{\textwidth}{\hrulefill\kern-0.6ex\raisebox{-0.5ex}{$\Bigl[$\makebox[\widthof{1.2{\thepage\,
of \pageref{LastPage}}}][c]{\thepage\, of \pageref{LastPage}}$\Bigr]$}\kern-0.5ex\hrulefill}}
%Thanks to Pouya
\cfoot[\footy]{\footy}
\begin{document}
\blinddocument
\blinddocument
\end{document}
这几乎和我给出的答案一样文档类书籍的页眉和页脚存在问题。
答案2
您的示例无法运行的主要原因是 fancyheader 设置为使用 \leftmark 作为章节信息,使用 \rightmark 作为节信息。然后,它会将这些信息放入您指定的标题中。由于您将 NAME 放入标题中,而 NAME 通常会放在其中一个位置,因此您只能获得名称以及 \leftmark(章节信息)或 \rightmark(节信息)中的一个。要获取标题中的名称和节和章节信息,您需要使用 \renewcommand 更改 \leftmark 或 \rightmark 或两者的含义,或者您需要告诉 fancy header 将 \leftmark 和 \rightmark 放在标题中的同一位置。下面我将展示一种执行此操作的方法。
在页脚中,您似乎试图告诉 latex 用页码信息制作框的宽度。您可以使用 calc 包和 \settowidth 执行您要执行的操作,但只需使用 \width 而不是 \widthof 即可创建更简单且可接受的结果。这样您就不需要输入 \pageref{lastpage} 等信息两次。使用 \width,latex 将使框的宽度达到适合放置在其中的材料所需的宽度。
为了使您的示例能够编译,我必须添加:
\usepackage{fancyhdr}
\usepackage{nameref}%To allow creation of a new command for section name
和
\usepackage{lastpage}%To make the "last page" part of your footer work
这是一个可行的示例想法。
\documentclass{book}
\usepackage{fancyhdr}
\usepackage{lipsum}
\usepackage{lastpage}
\begin{document}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[LE,RO]{\textbf{Name}}
\makeatletter%to give access to "@" command
\newcommand*{\currentname}{\@currentlabelname}%Assigns the current section name to "\currentname."
\makeatother%to give access to "@" command
\fancyhead[RE,LO]{\textit{\leftmark - \currentname}}%Puts section head after Chaptername (left mark is the Chapter Name)
\chapter{Example Chapter}
\section{Section Head}
\lipsum
\fancyfoot[CE,CO]{{\parbox{\textwidth}{\hrulefill\kern-.6ex\raisebox{-0.5ex}
{$\Bigl[$\makebox[\width{{
}}][c]{\thepage \hspace{1pt} of \pageref{LastPage} }$\Bigr]$}\kern- 0.5ex\hrulefill}}}%removed second instance of the page numbers.
\section{two.}
\lipsum
\end{document}
您没有明确说明标题中要显示什么章节名称。这包括章节编号和章节名称,后面跟着章节标题。
我怀疑在实践中你可能会发现整个文本太长了。
除了像我一样创建 \currentlabel 之外,您还可以执行以下操作:
\fancyhead[RE,LO]{\textit{\leftmark - \rightmark}}
这将包括更多带有章节号和节号的信息。