节标记对 lstlistoflistings 标题的响应不佳

节标记对 lstlistoflistings 标题的响应不佳

我在 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}}

相关内容