我真的很喜欢 cleveref。
我在写手稿时也用过它ametsoc 样式文件
但至少存在一个问题:附录字母(必须手动分配并在文本中引用)会发生位移。
例子:
\appendix[A]
\appendixtitle{Title name}
应该屈服
附录 A
标题名称
但我得到的却是
附录
A
标题名称
我不想浏览整个文本并\cref
用适当的图、方程式等替换我的文本……特别是因为我可能想在另一个文档中重复使用该文本,其中的部分可能是章节。
有任何想法吗?
最小工作示例
\documentclass[twocol]{ametsoc}
\journal{mwr}
\usepackage{cleveref}
\begin{document}
\appendix[A]
\appendixtitle{Title}
Blah blah
\end{document}
答案1
该cleveref
包修补程序\appendix
假设它是一个无参数的宏,但事实并非如此ametsoc
。
因此,我的策略是从修补不当的宏中恢复正确的定义\appendix
,并以更安全的方式进行修补。
\documentclass[twocol]{ametsoc}
\journal{mwr}
\usepackage{cleveref}
\usepackage{xpatch}
% split the badly patched \appendix command
% into the two parts: the first four tokens
% will restore the correct definition of \appendix
% and the rest is the patching text, stored
% into \appendtoappendix
\begingroup
\def\splitappendix#1#2#3#4#5\splitappendix{%
\endgroup
\def\appendix{#1#2#3{#4}}\toks0={#5}%
\edef\cleverefappendixaddition{\the\toks0}%
}
\expandafter\splitappendix\appendix\splitappendix % \splitappendix will disappear
\xapptocmd\appendix{\cleverefappendixaddition}{}{}
\begin{document}
\appendix[A]
\appendixtitle{Title}
Blah blah
\end{document}
一个可能更简单的策略是
\documentclass[twocol]{ametsoc}
\journal{mwr}
\let\goodappendix\appendix
\def\appendix{}
\usepackage{cleveref}
\let\cleverefappendixaddition\appendix
\let\appendix\goodappendix
\usepackage{xpatch}
\xapptocmd\appendix{\cleverefappendixaddition}{}{}
这将获得相同的结果,但需要与包加载混合的代码。