如何在一次\eqref
调用中引用多个项目/方程式?我想要的是“在(1,2)中……”而不是“在(1)和(2)中……”。我想我可以这样做
\begin{enumerate}
\item blah \label{it:1}
\item blah \label{it:2}
\end{enumerate}
In \eqref{it:1, it:2}...
但那不起作用。
答案1
该命令\eqref
用于以与编号方程式相同的格式(并且始终为直立类型)打印对方程式的引用。
对于其他交叉引用,这并不总是合适的。例如,项目通常不带括号进行编号,读者可能难以理解交叉引用“在(1,2)中”。但这是一个意见问题,你的观点和我的观点一样好。
当文档中只使用少数交叉引用时,这(\ref{it:1},~\ref{it:2})
就是解决方案。如果您需要多次使用它们,那么宏可能很有用。
最简单的方法是使用 LaTeX3 工具;如果需要,可以将宏定制为其他格式。
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\mref}{m}{\quinn_mref:n {#1}}
\seq_new:N \l_quinn_mref_seq
\cs_new:Npn \quinn_mref:n #1
{
\seq_set_split:Nnn \l_quinn_mref_seq { , } { #1 }
\seq_pop_right:NN \l_quinn_mref_seq \l_tmpa_tl
( % print the left parenthesis
\seq_map_inline:Nn \l_quinn_mref_seq
{ \ref{##1},\nobreakspace } % print the first references
\exp_args:NV \ref \l_tmpa_tl % print the last or only one
) % print the right parenthesis
}
\ExplSyntaxOff
如果要确保参考文献始终以直立形式打印,则可以将第一个定义更改为
\NewDocumentCommand{\mref}{m}{\textup{\quinn_mref:n {#1}}}
完整示例
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\mref}{m}{\quinn_mref:n {#1}}
\seq_new:N \l_quinn_mref_seq
\cs_new:Npn \quinn_mref:n #1
{
\seq_set_split:Nnn \l_quinn_mref_seq { , } { #1 }
\seq_pop_right:NN \l_quinn_mref_seq \l_tmpa_tl
( % print the left parenthesis
\seq_map_inline:Nn \l_quinn_mref_seq
{ \ref{##1},\nobreakspace } % print the first references
\exp_args:NV \ref \l_tmpa_tl % print the last or only one
) % print the right parenthesis
}
\ExplSyntaxOff
\begin{document}
\begin{enumerate}
\item\label{it:1} blah
\item\label{it:2} blah
\end{enumerate}
In \mref{it:1,it:2} and this \emph{does} work!
In \mref{it:1} there's only one!
\end{document}
答案2
如需引用多个方程式(但不是项目),请考虑以下建议https://stackoverflow.com/q/3328806例如,您可以使用子方程对多个(相关)方程进行分组,然后对齐,然后引用方程组或单个方程。