我用于cleveref
交叉引用。默认sort&compress
选项压缩三个或以上连续引用到某个范围内。我希望已经获得此压缩二连续引用:
\documentclass{article}
\usepackage{amsmath}
\usepackage[nameinlink,sort&compress]{cleveref}
\newcommand*{\crefrangeconjunction}{--} %% instead of the default ' to\nobreakspace'
\newcommand*{\crefpairconjunction}{, } %% instead of the default ' and\nobreakspace'
\begin{document}
\begin{align}
a & = b \label{eq:1}\\
c & = d \label{eq:2}\\
e & = f \label{eq:3}\\
g & = h \label{eq:4}\\
i & = j \label{eq:5}
\end{align}
\cref{eq:1,eq:2,eq:4,eq:5} default behaviour
eqs. (1)--(2), (4)--(5) looks better, IMHO.
\end{document}
答案1
如果不破解内部机制,就不可能完全自动生成这种格式cleveref
。您可以使用它来
\def\creflastconjunction{, }
抑制枚举最后一个元素之前的连词,这将在 MWE 中产生“eqs.~(1), (2), (4), (5)”。(\creflastgroupconjunction
在这种情况下,您可能需要重新定义,具体取决于您要实现的具体目标。)
你能使用以下方式半手动生成所需的格式:
\def\crefpairconjunction{--}
\cref{eq1,eq2}, \labelcref{eq3,eq4}
(人们可能过于痴迷于尝试在 LaTeX 中自动完成所有操作,但有时针对个别情况的最佳解决方案就是直接在文档中写下你想要的内容。)
但是,良好的文体要求交叉引用读起来符合语法。您说“看起来更好”的格式读起来是:“等式 (1) 至 (2),(4) 至 (5)”。这既不符合语法(缺少“和”),又容易引起混淆。读者会怀疑引用中是否有错误,或者是否缺少了什么;当 (1) 和 (2) 之间没有任何内容时,写成“(1) 至 (2)”就很奇怪了。产生的格式\def\creflastconjunction{, }
同样不符合语法,但不那么令人困惑。
您是否更看重写作中的“看起来更好”而不是清晰度?
有充分的理由cleveref
不对两个引用使用范围,并在列表的最后两个元素之间插入“and”。所以我不太可能花时间进行修改cleveref
以允许你想要的。如果你想完全自动生成你想要的格式,恐怕你只能靠自己了。(欢迎你给我发补丁,但我可能会因为上述理由而拒绝它。)