book
我正在编写一个以作为文档类的LaTeX 文档并用 进行编译pdflatex
。TexLive 版本是最新的 2012。
对于介绍(和结论)章节,我使用:
\chapter*{Introduction \markboth{INTRODUCTION}{}}
\label{intro}
\addcontentsline{toc}{chapter}{\hspace{12pt} Introduction}
chapter*
因为我希望它是非编号的\markboth
因为否则标题就不是“INTRODUCTION”而是“CONTENTS”(参见页眉和章节*例如)\addcontentsline
使其出现在目录中
\nameref{intro}
但是如果我在另一章中引用它( \chapter{my chapter}
),那么该章的标题将变为“简介”而不是“第 1 章 - 我的章节”。
请注意,如果我不使用\markboth
简介,则第 1 章的标题是正确的,但简介的标题不正确(它变成了“内容”)。
当然,如果就\nameref{}
在第 1 章之后,我调用\markboth{CHAPTER 1 - MY CHAPTER}{}
第 1 章的标题又是正确的,但这显然不切实际。
下面是显示该问题的最小代码:
\documentclass[a4paper,twoside]{book}
%\usepackage[english]{babel}
% nameref is buggy, when used, header names for chapter in which it is used are wrong
% if previous chapter is a chapter
% even version from 2012/07/31 is buggy ...
\usepackage{nameref}[2012/07/31]
\title{test}
\author{alex}
\begin{document}
\frontmatter
\maketitle
blabla
\tableofcontents
\mainmatter
%\markboth is needed otherwise header is "CONTENTS" instead of "INTRODUCTION" because this is a chapter*{}, not a chapter{}
\chapter*{Introduction \markboth{INTRODUCTION}{}}
\label{intro}
\addcontentsline{toc}{chapter}{\hspace{12pt} Introduction}
blabla.
\newpage
blabla.
\chapter{On the use of Foo in Bar}
\label{chap1}
blabla.
\newpage
And here if I namereference the \nameref{intro} it will break the nice header.
%And here if I namereference the \nameref{intro} with a \markboth{CHAPTER 1 - On the use of Foo in Bar}{} it will do what I need but it is *not* practical at all.
\chapter{On the use of Bar in Foo}
\label{chap2}
blabla.
\chapter*{Conclusions \markboth{CONCLUSIONS}{}}
\label{conclusions}
\addcontentsline{toc}{chapter}{\hspace{12pt} Conclusions}
blabla.
\newpage
blabla
\chapter{And here too}
\label{chap3}
blabla.
\newpage
blabla with a nameref. to the \nameref{chap1}. cause the same problem, header that should read "CHAPTER 3 - AND HERE TOO" is replaced by "INTRODUCTION".
\backmatter
blabla
\end{document}
答案1
\chapter*{简介 \markboth{INTRODUCTION}{}}
标题是什么?整个论点是:
Introduction \markboth{INTRODUCTION}{}
如果使用 \nameref 会发生什么情况?包括 \markboth 在内的整个标题都会被调用,并且执行会\markboth
更改您的标题。
解决方案:
放
\markboth
后\chapter*
:\chapter*{Introduction} \markboth{INTRODUCTION}{}
自 2009/12/08 版本起,v2.34 软件包
nameref
使用软件包gettitlestring
。此软件包知道一个使用标题提取方法expansion
,允许过滤掉内容,请参阅 的软件包文档gettitlestring
。\GetTitleStringSetup{expand} \GetTitleStringDisableCommands{% \def\markboth#1#2{\unskip}% }
在标题字符串提取期间,宏\markboth
会删除其参数并调用
unskip
以摆脱先前的空格。