该\appendix
宏将“章节”重命名为“附录”,并将编号从阿拉伯数字更改为字母。我正在尝试创建一个类似的宏,\paper
将“章节”重命名为“论文”,并将编号更改为罗马数字。
至少在这方面我成功了,但如果我尝试单击指向其中一个论文章节的超链接,我会被引导至常规章节。此外,如果我与软件包\Cref
中的进行交叉引用cleveref
,它会正确显示数字,但仍然打印“章节”。我该如何修复此问题?
\documentclass{memoir}
\makeatletter
\newcommand{\paper}
{
\setcounter{chapter}{0}
\setcounter{section}{0}
\def \@chapapp{Paper}
\def \thechapter{\@Roman\c@chapter}
}
\makeatother
\usepackage{hyperref}
\usepackage{cleveref}
\begin{document}
\tableofcontents % Hyperlink to 'First Paper' not working
\chapter{First Chapter}
\label{sec:chapter}
\Cref{sec:chapter} % Correctly prints 'Chapter'
\Cref{sec:paper} % Incorrectly prints 'Chapter'
\paper
\chapter{First Paper}
\label{sec:paper}
\end{document}
答案1
重新定义\@chapapp
为Paper
不强制cleveref
使用Paper
交叉引用名称——它将使用与标签一起存储的计数器信息,这就是chapter
并抓取\crefname
为章节存储的等。
这是一种使用新计数器的方法,该计数器在命令末尾paper
增加 ——现在被告知使用而不是。\refstepcounter
\chapter
\memendofchapterhook
cleveref
paper
chapter
存储的超锚信息\theHchapter
也必须修改。
另一种可能性:定义paper
计数器并\label[paper]{sec:paper}
在本地说。
无论哪种方式:\crefname{paper}{paper}{papers}
等等都是需要提供正确的交叉引用名称。
\documentclass{memoir}
\makeatletter
\newcounter{paper}
\newcommand{\paper}
{%
\setcounter{chapter}{0}%
\setcounter{section}{0}%
\renewcommand{\theHchapter}{papter.\arabic{chapter}}%
\def\@chapapp{Paper}
\let\c@paper\c@chapter
\def\thechapter{\@Roman\c@chapter}
\let\thepaper\thechapter
\renewcommand{\memendofchapterhook}{%
\addtocounter{paper}{-1}%
\refstepcounter{paper}%
}%
}
\makeatother
\usepackage{hyperref}
\usepackage{cleveref}
\crefname{paper}{paper}{papers}
\Crefname{paper}{Paper}{Papers}
\begin{document}
\tableofcontents % Hyperlink to 'First Paper' not working
\chapter{First Chapter}
\label{sec:chapter}
\Cref{sec:chapter} % Correctly prints 'Chapter'
\Cref{sec:paper} % Incorrectly prints 'Chapter'
\paper
\chapter{First Paper}
\label{sec:paper}
\end{document}
答案2
您必须重新定义\theHchapter
以使hyperref
目标具有唯一编号。但要使其\paper
行为类似于在论文中\appendix
包含的命名也被称为“论文”(就像附录中的也被称为)。在这里我复制了\section
\section
appendix
附录代码并将cleveref
其paper
改为appendix
:
\documentclass{memoir}
\usepackage{hyperref}
\usepackage{cleveref}
\makeatletter
\newcommand{\paper}
{
\setcounter{chapter}{0}
\setcounter{section}{0}
\def \@chapapp{Paper}
\def \thechapter{\@Roman\c@chapter}
\def \theHchapter{paper-\@Roman\c@chapter}
\def\H@refstepcounter##1{%
\cref@old@H@refstepcounter{##1}%
\cref@constructprefix{##1}{\cref@result}%
\ifx\cref@result\@empty%
\def\cref@result{2147483647}%
\else%
\edef\cref@result{2147483647,\cref@result}%
\fi%
\def\@tempa{##1}%
\def\@tempb{chapter}%
\ifx\@tempa\@tempb%
\protected@edef\cref@currentlabel{%
[paper][\arabic{##1}][\cref@result]%
\csname p@##1\endcsname\csname the##1\endcsname}%
\else%
\def\@tempa{##1}%
\def\@tempb{section}%
\ifx\@tempa\@tempb%
\protected@edef\cref@currentlabel{%
[subpaper][\arabic{##1}][\cref@result]%
\csname p@##1\endcsname\csname the##1\endcsname}%
\else%
\def\@tempa{##1}%
\def\@tempb{subsection}%
\ifx\@tempa\@tempb%
\protected@edef\cref@currentlabel{%
[subsubpaper][\arabic{##1}][\cref@result]%
\csname p@##1\endcsname\csname the##1\endcsname}%
\else%
\def\@tempa{##1}%
\def\@tempb{subsubsection}%
\ifx\@tempa\@tempb%
\protected@edef\cref@currentlabel{%
[subsubsubpaper][\arabic{##1}][\cref@result]%
\csname p@##1\endcsname\csname the##1\endcsname}%
\else%
\@ifundefined{cref@##1@alias}%
{\def\@tempa{##1}}%
{\def\@tempa{\csname cref@##1@alias\endcsname}}%
\protected@edef\cref@currentlabel{%
[\@tempa][\arabic{##1}][\cref@result]%
\csname p@##1\endcsname\csname the##1\endcsname}%
\fi%
\fi%
\fi%
\fi%
}%
}%
\AtBeginDocument{\Crefname@preamble{paper}{Paper}{Papers}}
\Crefname{paper}{Paper}{Papers}%
\Crefname{subpaper}{Paper}{Papers}%
\Crefname{subsubpaper}{Paper}{Papers}%
\Crefname{subsubsubpaper}{Paper}{Papers}%
\makeatother
\begin{document}
\tableofcontents % Hyperlink to 'First Paper' not working
\chapter{First Chapter}
\label{sec:chapter}
\Cref{sec:chapter} % Correctly prints 'Chapter'
\Cref{sec:paper} % Incorrectly prints 'Chapter'
\Cref{sec:papersec}
\paper
\chapter{First Paper}
\label{sec:paper}
\section{First Paper section}
\label{sec:papersec}
\end{document}
如果您不想命名等,您可以更改名称subpaper
等。但是,例如。subsubpaper
\section
\subsection
paper
papersection