我目前正在使用 撰写手稿\documentclass{book}
。我想用手稿中的其中一章来证明早期的结果。我已将该章节命名为:
\chapter{Proof of Theorem \ref{Theorem1}}
实际章节本身(包括目录中的章节名称和章节标题)看起来不错。我在下面附上了一张图片。
但是,在章节偶数页的页面右上角是全大写的章节标题,并且那里的引用似乎没有经过:
我已经多次编译了代码,所以我确定这不是编译错误。有什么方法可以保留标题中的定理引用并使其正确显示在章节偶数页的顶部?
答案1
我相信(但无法检查)当章节标题在运行头中大写时,指定的名称\ref
也是大写的。这与原始标签不匹配。
将此标签设为“THEOREM1”而不是“Theorem1”,所有问题都应得到解决。
答案2
以下选项使用refcount
提取参考编号,但会丢失超链接:
\documentclass{book}
\usepackage[paper=a6paper]{geometry}% Just for this example
\usepackage{hyperref,refcount}
\newtheorem{theorem}{Theorem}
\renewcommand{\thetheorem}{\thechapter.\arabic{theorem}}
\begin{document}
\chapter{Proofs of Theorem~\getrefnumber{Theorem1}}
\begin{theorem}\label{Theorem1}
An important theorem.
\end{theorem}
\newpage
Some text.
\end{document}
因此,\ref{Theorem1}
您不应该使用 ,而应该使用\getrefnumber{Theorem1}
。
答案3
我认为,该问题部分是由标准类中的一个重大缺陷引起的,即将和\MakeUppercase
的定义应用于标题,而如果需要,它应该在排版标题时应用。\chaptermark
\sectionmark
但是,改变这一点是不够的,因为\MakeUppercase
在计算引用之前也会将标签大写。该包textcase
可以提供帮助,但遗憾的是,它hyperref
重新定义了\ref
,因此\DeclareRobustCommand
看到的\MakeTextUppercase
不是\ref
(宏知道如何处理),而是\ref•
(其中项目符号代表名称中的空格):第一级扩展\foo
after
\DeclareRobustCommand{\foo}{...}
确实如此\protect\foo•
。之所以发生这种第一级扩展,是因为标题是通过传递的\protected@edef
。
这是一个可能的解决方案,
修改
headings
页面样式定义,以便交换执行大写字母的位置;textcase
大写宏的用途\ref
借助于修改的定义etoolbox
,使其成为一个\protected
保持不变的宏\protected@edef
。
\documentclass{book}
\usepackage[paper=a6paper]{geometry}% Just for this example
\usepackage{textcase}
\usepackage{etoolbox}
\usepackage{hyperref}
\makeatletter
% modify \ps@headings so the uppercasing is done at the right place
\def\ps@headings{%
\let\@oddfoot\@empty\let\@evenfoot\@empty
\def\@evenhead{\thepage\hfil\slshape\MakeTextUppercase{\leftmark}}%
\def\@oddhead{{\slshape\MakeTextUppercase{\rightmark}}\hfil\thepage}%
\let\@mkboth\markboth
\def\chaptermark##1{%
\markboth{%
\ifnum \c@secnumdepth >\m@ne
\if@mainmatter
\@chapapp\ \thechapter. \ %
\fi
\fi
##1}{}%
}%
\def\sectionmark##1{%
\markright{%
\ifnum \c@secnumdepth >\z@
\thesection. \ %
\fi
##1}%
}%
}
% issue again the style declaration to renew it
\pagestyle{headings}
\makeatother
% modify \ref to become \protected; it needs to be done
% \AtBeginDocument because hyperref delays its redefinitions
\AtBeginDocument{\robustify{\ref}}
\newtheorem{theorem}{Theorem}
\begin{document}
\chapter{Proof of Theorem \ref{theorem1}}
\begin{theorem}\label{theorem1}
An important theorem.
\end{theorem}
\newpage
Some text.
\end{document}
答案4
这只是 Barbara Beeton 答案的演示。它不会破坏超链接。
\documentclass{book}
\usepackage[paper=a6paper]{geometry}% Just for this example
\usepackage{hyperref}
\newtheorem{theorem}{Theorem}
\begin{document}
\chapter{Proof of Theorem \ref{THEOREM1}}
\begin{theorem}\label{THEOREM1}
An important theorem.
\end{theorem}
\newpage
Some text.
\end{document}