![ASL 类文件与 cleveref 和 cite 包之间的冲突](https://linux22.com/image/354013/ASL%20%E7%B1%BB%E6%96%87%E4%BB%B6%E4%B8%8E%20cleveref%20%E5%92%8C%20cite%20%E5%8C%85%E4%B9%8B%E9%97%B4%E7%9A%84%E5%86%B2%E7%AA%81.png)
我想提交一篇论文给符号逻辑杂志,这意味着我需要使用符号逻辑协会的类文件asl.cls
和书目样式文件asl.bst
,这两个文件都可以使用这里。
过去,我曾成功地将hyperref
、cleveref
和cite
包与article
和book
文档类一起使用。但是,类文件asl.cls
造成了麻烦。以下是 MWE:
\documentclass{asl}
\usepackage{color}
\usepackage{hyperref}
\hypersetup{colorlinks=true,linkcolor={blue},citecolor={orange}}
%\usepackage[nameinlink]{cleveref} % If this is switched on, then the .tex file fails to compile.
\usepackage{cite} % This package doesn't lead to a catastrophic failure, but the citation appears as [?].
\newtheorem{thm}{Theorem}
\title{A minimal working example}
\author{M.W.\ Example}
\begin{document}
\maketitle
\begin{thm}\label{theorem}
There exists a solution to this \LaTeX{} problem.
\end{thm}
\begin{proof}
See the \TeX{} Stack Exchange.
\end{proof}
A reference to the theorem: \ref{theorem} This is working! :)
A citation: \cite{test} This is not working. :(
\bibliography{MWE}
\bibliographystyle{asl}
\end{document}
这是文件 MWE.bib:
@article{test,
author = {Why, Y.O.},
title = {Clashes between packages and class files},
journal = {Journal of tricky \LaTeX{} problems},
year = {2017},
volume = {1},
pages = {1-101}
}
迄今为止的一些观察和尝试:
- 该文件
asl.cls
是 2002 年的,我认为它早于一些软件包,但我找不到更新的版本。 - 我看过这个文件
asl.cls
,但我对 LaTeX 类文件内部工作原理的了解非常有限,并且有太多的依赖关系,我不知道从哪里开始。 - 如果我关闭该
cite
包,那么引用将正确显示为 [1](而不是 [?]),但不可点击。 - 一些标准包,例如
amsthm
,被内置到文件中asl.cls
(我并不完全理解如何做到的)。
所以,我的问题是:有没有办法将和hyperref
包与(可能修改过的版本)一起使用?cleveref
cite
asl.cls
答案1
我仔细查看了这些文件asl.cls
并asl.bst
试图理解文档类别的用户指南(在asldoc.ps
)。
复制该文件
asl.cls
并将副本命名为als-mod.cls
。在文本编辑器中打开文件
als-mod.cls
并转到第 3332 行,即(重新)定义\bibliographystyle
开始的地方。注释掉此宏的整个(重新)定义,即第 3332 行至第 3349 行。在您的主 tex 文件中,指定
asl-mod
为所需参数\documentclass
,并指定选项bibother
和otherbib
——是的,这两个!在您的主 tex 文件中,将
\bibliographystyle
from参数更改asl
为plain
。文件中的编码asl.bst
简直是太过分了。没有必要尝试修复它。asl
文档类的用户指南建议,尽管是间接的,可以使用 样式来编译参考书目plain
;去做吧!(用户指南指出“没有理由使用 以外的样式asl
。”虽然这听起来像是对使用参考书目样式的认可asl
,但没有迹象表明必须使用asl
。)
经过这些更改,\cite
说明实际上会为您提供数字引用标注。太棒了!
- 要
cleveref
上班,请务必(a)跑\newtheorem{thm}{Theorem}
前(b)提供装载后的cleveref
指令。\crefname{thm}{Theorem}{Theorems}
cleveref
\RequirePackage{filecontents}
\begin{filecontents}{MWE.bib}
@article{test,
author = {Why, Y. O.},
title = {Clashes between packages and class files},
journal = {Journal of tricky \LaTeX{} problems},
year = {2017},
volume = {1},
pages = {1-101}
}
\end{filecontents}
\documentclass[otherbib,bibother]{asl-mod} % not 'asl'
\usepackage{xcolor}
\usepackage{hyperref}
\hypersetup{colorlinks=true,
linkcolor={blue},
citecolor={red}}
\newtheorem{thm}{Theorem}
\usepackage[nameinlink]{cleveref} % 'nameinlink' option is optional
\crefname{thm}{Theorem}{Theorems}
\bibliographystyle{plain} % not 'asl'
\begin{document}
%\title{A minimal working example}
%\author{M.W.\ Example}
%\maketitle
\begin{thm}\label{theorem}
There exists a solution to this \LaTeX{} problem.
\end{thm}
\begin{proof}
See the \TeX{} Stack Exchange.
\end{proof}
A \verb+\cref+ cross-reference: \cref{theorem}. This is now working.
A citation call-out: \cite{test}. This now works too.
\bibliography{MWE}
\end{document}