我的论文中有一个附录,由于fancyheader
限制,我将其定义为\chapter*
而不是\appendix
。但是,现在当我使用 引用它时,\cref
我得到的是“章节”,我可以手动更改它,但我确信有一种方法可以使用 来定义它cleverref
。我是对的吗?如何实现这一点?
编辑:MWEs
引发此问题的原因。使用此代码
\documentclass[final]{report}
\usepackage{cleveref}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\renewcommand{\sectionmark}[1]{\markright{#1}}
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
\begin{document}
\chapter{title}
\fancyhead[L]{%
\nouppercase{\leftmark}
}
\fancyhead[R]{%
\nouppercase{\rightmark}
}
\clearpage
some text
\label{chapter}
\appendix
\chapter{A}
\fancyhead[L]{%
\nouppercase{Appendix \leftmark}
}
\clearpage
some text
\label{appendix}
\end{document}
这正是我想要的。但是,章节简介页面显示如下
我真的不喜欢。删除这个没问题,我用替换\Chapter{A}
,\Chapter{}
但标题会丢失 A。或者,我可以采取“丑陋”的解决方案,将附录中的标题定义更改为
\fancyhead[L]{%
\nouppercase{Appendix A}
}
我就是这么做的。
我曾考虑将附录简单地命名chapter*
为Appendix A
,但这会破坏 cleverref,因为它将附录称为章节。那么有没有办法强制 cleverred 将章节识别为附录?
编辑:当前的问题。
在这个设置中,有两个问题。放置\cref{appendix}
某个地方的结果将是“第 1 章”,而不是“附录 A”。此外,方程编号是 (1.n) 而不是 (An)。我想我的手动解决方案是最简单的。而且安德鲁答案有我需要的。
答案1
由于没有最小工作示例这可能不是真正需要的但我认为问题在于聪明人当您希望使用“附录”时,却打印“章节”作为附录名称。
这cleveref 包提供\crefformat
用于控制如何打印不同标签的命令。解决您的问题的一种方法是让此命令对章节和附录执行不同的操作。要做到这一点,\crefformat
需要知道附录何时开始。因此,我制作了一个计数器appendicesStart
,它给出第一个附录的“章节号”,之后我使用以下代码定义了 cleveref 章节格式:
\crefformat{chapter}{% make cleveref's chapter format dynamic
\ifnum#1<\arabic{appendicesStart}\relax Chapter~#1#2#3%
\else Appendix%
\fi%
}
使用这个我的mwe产生:
其中“第 1 章”和“附录”是由\cref{...}
命令形式生成的标签cleveref
。要使其工作,您需要设置appendicesStart
计数器的值。这可以手动设置,但我已定义了一个\StartAppendices
命令来跟踪它。
完整代码如下:
\documentclass{book}
\usepackage{fancyhdr}% OP said this was being used
\usepackage{cleveref}% OP said this was being used
\usepackage{refcount}
\newcounter{appendicesStart}% counter to mark start of appendices
\setcounter{appendicesStart}{1000}% set to ridiculously high value by default
\AtBeginDocument{% set appendicesStart from aux file
\setcounterref{appendicesStart}{AppendicesStart}%
}
\crefformat{chapter}{% make cleveref's chapter format dynamic
\ifnum#1<\arabic{appendicesStart}\relax Chapter~#1#2#3%
\else Appendix%
\fi%
}
\newcommand\StartAppendices{%
\refstepcounter{chapter}%
\label{AppendicesStart}% save as reference to be read in AtBeginDocument
}
\begin{document}
\chapter{First one}
\label{C:first}
\StartAppendices
\chapter*{Second one}
\label{C:second}
\cref{C:first} and \cref{C:second}.
\end{document}
有几点需要注意:
- 这不适用于编号附录
- 如果附录后面有章节,则此方法无效
- 这会不是与...合作超链接
前两个问题并不难处理。(正如 OP 所言,\chapter*{...}
第一个问题可能不是问题)。要使用它们,hyperref
需要一些思考。
答案2
以下内容可能正是您想要的。指令之后\appendix
,代码具有以下说明:
\chapter{} \label{chap:app}
\renewcommand\leftmark{\thechapter}
\fancyhead[L]{\nouppercase{\appendixname~\leftmark}}
在文档前面,该指令\cref{chap:app}
生成“附录 A”作为输出。
\documentclass{report}
\usepackage{fancyhdr}
\usepackage{cleveref}
\pagestyle{fancy}
\fancyhf{}
\renewcommand{\sectionmark}[1]{\markright{#1}}
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
\begin{document}
\chapter{title} \label{chap:title}
\fancyhead[L]{\nouppercase{\leftmark}}
\fancyhead[R]{\nouppercase{\rightmark}}
\clearpage
some text
A cross-reference to \cref{chap:app}.
\appendix
\chapter{} \label{chap:app}
\renewcommand\leftmark{\thechapter}
\fancyhead[L]{\nouppercase{\appendixname~\leftmark}}
\clearpage
some text
A cross-reference to \cref{chap:title}.
\end{document}