更改单个章节的 cleveref 类型

更改单个章节的 cleveref 类型

我的论文中有一个附录,由于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}

相关内容