我在 LateX 报告中为所有部分使用了标题。对于\section*{}
,我必须添加\sectionmark{}
才能使其工作。出于某种原因,\lstlistoflistings
当我有两页列出的列表时,它无法很好地工作。
下面是我的代码的相关示例(但有些包对于这部分可能没用):
\documentclass[12pt]{article}
\usepackage[english]{babel}
\usepackage[utf8x]{inputenc}
\usepackage{graphicx}
\usepackage{parskip}
\usepackage{fancyhdr}
\usepackage[T1]{fontenc}
\usepackage{hyperref}
\usepackage{listings}
\pagestyle{fancy}
\renewcommand{\sectionmark}[1]{\markboth{#1}{}} % set the \leftmark
\fancyhf{}
\fancyhead[L]{\leftmark} % 1. sectionname
\fancypagestyle{plain}{%
\fancyhf{}%
\renewcommand{\headrulewidth}{0pt}%
}
\renewcommand{\listfigurename}{List of Figures and Annexes}
\renewcommand*{\lstlistlistingname}{List of Annexes}
\begin{document}
\listoffigures
\addcontentsline{toc}{section}{List of Figures and Annexes}
\vspace{15cm}
\sectionmark{List of Figures and Annexes}
\lstlistoflistings
\sectionmark{List of Figures and Annexes}
\pagebreak
\section*{Introduction}
\sectionmark{Introduction}
\addcontentsline{toc}{section}{Introduction}
text
\pagebreak
\centering
\section*{Annexes}\label{sec:annex}
\sectionmark{\nameref{sec:annex}}
\addcontentsline{toc}{section}{\nameref{sec:annex}}
\subsection*{Test}
\lstinputlisting{test.txt}
\subsection*{Test}
\lstinputlisting{test.txt}
\subsection*{Test}
\lstinputlisting{test.txt}
\subsection*{Test}
\lstinputlisting{test.txt}
\end{document}
我只\vspace{15cm}
在这里添加了一个代码来展示创建第二个页面时会发生什么,而没有test.txt
在这个示例中添加太多内容。使用此代码,我获得了在简介部分(第 3 页)中寻找的结果:
我怎样才能使第 1 页的页眉变成“图表和附件列表”而不是“附件列表”?
编辑:Christian Hupfer 的答案对于前面的代码非常有效。以下是示例的长版本,其中标题仍然消失:
\documentclass[12pt]{article}
\usepackage[english]{babel}
\usepackage{url}
\usepackage[utf8x]{inputenc}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{parskip}
\usepackage{fancyhdr}
\usepackage{float}
\usepackage{amsfonts}
\usepackage{amsmath}
\usepackage{textcomp}
\usepackage[T1]{fontenc}
\usepackage{tocloft} % cftaddline
\usepackage{fancyvrb}
\usepackage{listings}
\usepackage[colorlinks = true,
linkcolor = black,
urlcolor = blue,
citecolor = black,
anchorcolor = black]{hyperref}
\usepackage{vmargin}
\title{Title}
\author{Author}
\makeatletter
\let\thetitle\@title
\let\theauthor\@author
\let\thedate\@date
\makeatother
\pagestyle{fancy}
\renewcommand{\sectionmark}[1]{\markboth{#1}{}}
\fancyhf{}
\fancyhead[R]{\theauthor} % predefined ()
\fancyhead[L]{\leftmark} % 1. sectionname
\fancyfoot[C]{\thepage}
\fancypagestyle{plain}{%
\fancyhf{}%
\renewcommand{\headrulewidth}{0pt}%
}
\AtBeginDocument{%
\renewcommand{\listfigurename}{List of Figures}
\renewcommand{\lstlistlistingname}{List of Annexes}
}
\begin{document}
\clearpage
\thispagestyle{empty}
\section*{Acknowledgements}\label{sec:ackn}
\paragraph{} Text \\
\addcontentsline{toc}{section}{\nameref{sec:ackn}}
\clearpage
\begin{abstract}
\addcontentsline{toc}{section}{Abstract}
Text
\end{abstract}
\sectionmark{Abstract}
\clearpage
\tableofcontents
\addcontentsline{toc}{section}{Contents}
\sectionmark{Contents}
\clearpage
\listoffigures
\addcontentsline{toc}{section}{\listfigurename}
\sectionmark{\listfigurename}
\clearpage
\lstlistoflistings
\addcontentsline{toc}{section}{\lstlistlistingname}
\sectionmark{\lstlistlistingname}
\clearpage
\section*{Introduction}
\sectionmark{Introduction}
\addcontentsline{toc}{section}{Introduction}
text
\clearpage
\section{Section}
\paragraph{} Text
\clearpage
\section*{Conclusion}
\addcontentsline{toc}{section}{Conclusion}
\sectionmark{Conclusion}
Text
\clearpage
\begingroup
\centering
\section*{Annexes}\label{sec:annex}
\endgroup
\sectionmark{\nameref{sec:annex}}
\addcontentsline{toc}{section}{\nameref{sec:annex}}
Text
\end{document}
我可以通过删除一些对我的报告来说不是必需的包(如 parskip)来纠正它,然后标题会重新出现。
答案1
造成此问题的主要原因有:
- 更改后缺少
\clearpage
或 (\cleardoublepage
)\sectionmark
- 对等的更改
\lstlistoflistings
无效,因为包随后很快就会对其进行更改,即必须在\AtBeginDocument
- 钩子中输入自己的定义以“保证”使用这些自己的设置。
\documentclass[12pt]{article}
\usepackage[english]{babel}
\usepackage[utf8x]{inputenc}
\usepackage{graphicx}
\usepackage{parskip}
\usepackage{fancyhdr}
%\usepackage[nottoc]{tocbibind}
\usepackage[T1]{fontenc}
\usepackage{listings}
\usepackage{hyperref}
\pagestyle{fancy}
\renewcommand{\sectionmark}[1]{\markboth{#1}{}} % set the \leftmark
\fancyhf{}
\fancyhead[L]{\leftmark} % 1. sectionname
\fancypagestyle{plain}{%
\fancyhf{}%
\renewcommand{\headrulewidth}{0pt}%
}
\AtBeginDocument{%
\renewcommand{\listfigurename}{List of Figures and Annexes}
\renewcommand*{\lstlistlistingname}{List of Annexes}
}
\usepackage{blindtext}
\begin{document}
\tableofcontents
\clearpage
\listoffigures
\addcontentsline{toc}{section}{\listfigurename}%List of Figures and Annexes}
\sectionmark{\listfigurename}
\clearpage
\lstlistoflistings
\sectionmark{\lstlistlistingname}
\clearpage
\section*{Introduction}
\sectionmark{Introduction}
\addcontentsline{toc}{section}{Introduction}
\blindtext
\clearpage
\begingroup
\centering%?????
\section*{Annexes}\label{sec:annex}
\endgroup
\sectionmark{\nameref{sec:annex}}
\addcontentsline{toc}{section}{\nameref{sec:annex}}
\subsection*{Test}
\lstinputlisting{test.txt}
\subsection*{Test}
\lstinputlisting{test.txt}
\subsection*{Test}
\lstinputlisting{test.txt}
\subsection*{Test}
\lstinputlisting{test.txt}
\end{document}
答案2
在添加文档所需的其他一些包后,同样的问题再次出现。可以使用\nouppercase
在所需位置强制使用小写字母来解决。这里,对于标题,可以使用以下方法解决:
\fancyhead[L]{\nouppercase{\leftmark}}