交叉引用 elsarticle 文档类中的附录部分

交叉引用 elsarticle 文档类中的附录部分

我试图引用附录中给出的结果,但cleveref给出的是“附录附录”(将其加倍)。解决此问题的一种方法是添加\def\appendixname{}

毫不奇怪,这也从章节标题中删除了名称“附录”。我该如何解决这个问题,同时仍在章节标题中保留“附录”?

梅威瑟:

主文本

\documentclass[final,times,letterpaper,authoryear,12pt]{elsarticle}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{indentfirst}
\usepackage{amscd}
\usepackage{mathrsfs}
\usepackage{ulem}
\usepackage{bbm}
\usepackage{hyperref}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{setspace}
\usepackage{color}

\usepackage{subfiles}
\usepackage{graphicx}  
\usepackage[nameinlink]{cleveref} 
\usepackage{lmodern}
\usepackage{kpfonts}
\usepackage{etex,etoolbox}
\usepackage{amsthm,amssymb}
\usepackage{thmtools}
\usepackage{environ}
\crefname{lem}{lemma}{lemmas}
\crefname{prop}{Proposition}{Propositions}
\crefname{thr}{Theorem}{Theorems}
\crefname{cor}{Corollary}{Corollaries}
\crefname{ass}{Assumption}{Assumptions}
\crefname{df}{Definiton}{Definitons}
\usepackage{enumitem}
\usepackage{caption}
\usepackage{subcaption}
\usepackage[letterpaper,layout=letterpaper]{geometry}

\begin{document}

\subfile{testa}

\appendix
\subfile{appendix}
\subfile{appendixb}

\end{document}

种皮

\documentclass[main.tex]{subfiles}
\begin{document}

\section{Introduction}
This is an introduction. From now on we will hold Result A and B as true. We prove Result A in \Cref{regsol} and we prove Result B in \Cref{regsolB}.

附录.tex

\documentclass[main.tex]{subfiles}
\def\appendixname{}

\begin{document}

\section{Proof of Result A}\label{regsol}
We show that...

\end{document}

附录b.tex

\documentclass[main.tex]{subfiles}
\begin{document}

\section{Proof of Result B}\label{regsolB}
We show that...

\end{document}
\end{document}

答案1

执行时,文档类会以一种快速但不幸的是相当肮脏的方式elsarticle重新定义宏:\thesection\appendix

\gdef\thesection{\appendixname\@Alph\c@section}

[2020 年中更新:最新版本的说明elsarticle.cls

\gdef\thesection{\appendixname~\@Alph\c@section}

与我答案的原始形式的代码相比,唯一的区别是在 之后插入了一个不可破坏的空格\appendixname。]

这会将单词“Appendix”添加到(Alpha-stye)部分“数字”(A,B,C 等)的前缀。这就是导致生成的交叉引用调用cleveref包含两次字符串“Appendix”的原因。

快速解决方法是在交叉引用文档附录部分的章节时使用指令\labelcref而不是使用指令。\cref

更复杂的修复(即允许您继续使用\Cref\cref交叉引用附录中的章节的修复)涉及在\appendix指令后立即插入以下代码块:

\gdef\thesection{\Alph{section}} % corrected redefinition of "\thesection"
\makeatletter
\renewcommand\@seccntformat[1]{\appendixname\ \csname the#1\endcsname.\hspace{0.5em}}
\makeatother

单独的评论:说得委婉一点,文档的序言组织得不是很好。例如,您times\documentclass指令提供了选项;此选项告诉 LaTeX 加载“Times Roman”字体。稍后,您加载lmodern字体包,该包加载“Latin Modern”字体系列,然后加载kpfonts字体包,该包加载“Palatino”字体系列的克隆。您想要哪个字体系列?您可能需要浏览序言并确定真正需要哪些包。


以下是一个 MWE,它说明了上面显示的“更复杂的修复”的工作原理。(我简化了测试文档的序言和正文,以便将重点放在要点上。)

enter image description here

\documentclass[letterpaper,12pt]{elsarticle}
\usepackage[T1]{fontenc}
\usepackage[english]{babel}
\usepackage{geometry}
\usepackage[colorlinks]{hyperref}
\usepackage[nameinlink]{cleveref}

\begin{document}

\section{Introduction}

We prove Result A in \Cref{regsol} and we prove Result B in \Cref{regsolB}.

\appendix
%% now insert the new code block
\gdef\thesection{\Alph{section}}
\makeatletter
\renewcommand\@seccntformat[1]{\appendixname\ \csname the#1\endcsname.\hspace{0.5em}}
\makeatother


\section{Proof of Result A}\label{regsol}
We show that \dots

\section{Proof of Result B}\label{regsolB}
We show that \dots

\end{document} 

相关内容