压缩交叉引用

压缩交叉引用

cleveref包对交叉引用进行排序和压缩。它还会自动确定引用的格式,这样您就不必在源中键入“方程式”。但是标准输出浪费空间。在示例中是引用方程式,如,eqs. (1), (2) and (4) to (6)但是我想要更短的表达式eqs. (1,2,4-6)。我没有被迫使用该包,cleveref但我不知道有其他替代方案。

在此处输入图片描述

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{mathtools}
\usepackage{cleveref}
\begin{document}
\begin{align}
equation 1\label{eq1}\\
equation 2\label{eq2}\\
equation 3\label{eq3}\\
equation 4\label{eq4}\\
equation 5\label{eq5}\\
equation 6\label{eq6}
\end{align}
\\
output of cleveref is \cref{eq2,eq4,eq1,eq5,eq6}\\
I want: eqs.\~(1,2,4-6)
\end{document}

答案1

改编

  • 添加了命令\crefmultiformat\crefrangemultiformat并且\crefrangeformat(参见cleverref手动的8.2.2 “参考范围”和 8.2.3 “多重交叉引用”)
  • 添加了一些测试用例
  • (我建议在逗号后使用空格)

结果

在此处输入图片描述

代码

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{mathtools}
\usepackage{cleveref}

\crefmultiformat{equation}{eqs.~(#2#1#3}%
{,#2#1#3)}{,#2#1#3}{,#2#1#3)}
\crefrangemultiformat{equation}{eqs.~(#3#1#4--#5#2#6}%
{,#3#1#4--#5#2#6)}{,#3#1#4--#5#2#6}{,#3#1#4--#5#2#6)}
\crefrangeformat{equation}{eqs.~(#3#1#4--#5#2#6)}

\begin{document}
\begin{align}
equation 1\label{eq1}\\
equation 2\label{eq2}\\
equation 3\label{eq3}\\
equation 4\label{eq4}\\
equation 5\label{eq5}\\
equation 6\label{eq6}
\end{align}
\\
output of cleveref is \cref{eq2,eq4,eq1,eq5,eq6}\\
I want: eqs.~(1,2,4-6)\\
Some tests:\\
\cref{eq4,eq5,eq6}\\
\cref{eq1,eq2,eq3,eq6}\\
\cref{eq1,eq3}\\
\cref{eq1,eq3,eq4}\\
\end{document}

答案2

像这样?请注意,LuaLaTeX 仅用于加快创建六个与方程式相关的\label指令的过程。

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article}

\usepackage{cleveref}
\newcommand{\creflastconjunction}{,}
\crefrangelabelformat{equation}{#3#1#4--#5#2#6)}
\crefrangeformat{equation}{eqs.~(#3#1#4--#5#2#6)}
\crefmultiformat{equation}{eqs.~(#2#1#3}{,#2#1#3)}{,#2#1#3}{,#2#1#3)}

\begin{document}
% create 6 equation-related \label instructions programmatically:
\directlua{
  for i=1,6 do tex.sprint ( '\\refstepcounter{equation}\\label{eq'..i..'}' ) end  
}

\obeylines
eqs.~(1,2,4--6) -- hard-coded
\cref{eq2,eq4,eq1,eq5,eq6} -- with \texttt{\string\cref}
\smallskip
\cref{eq1}
\cref{eq1,eq3}
\cref{eq2,eq4,eq3}
\crefrange{eq1}{eq5}

\end{document}

相关内容