这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}