设置 cleveref 压缩功能的最小引用数

设置 cleveref 压缩功能的最小引用数

我用于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以允许你想要的。如果你想完全自动生成你想要的格式,恐怕你只能靠自己了。(欢迎你给我发补丁,但我可能会因为上述理由而拒绝它。)

相关内容