我希望能够自动标记和引用方程式的各个部分。为了解释我的意思,我将举一个例子。
\documentclass{article}
\usepackage{amsmath,hyperref,cleveref}
\begin{document}
\begin{align}
w&=x &
y&=z
\label{eqn:full}
\mylabel{eqn:wx}{a}
\mylabel{eqn:yz}{b}
\end{align}
We're talking about \cref{eqn:full}, specifically \cref{eqn:wx}.
\end{document}
文本应为
我们正在讨论(1),特别是(1a)。
我该如何定义\mylabel
才能实现这一点?当然我可以使用多线方程,例如
\documentclass{article}
\usepackage{amsmath,hyperref,cleveref}
\begin{document}
\begin{subequations}\label{eqn:full}\begin{align}
w&=x \label{eqn:wx}\\
y&=z \label{eqn:yz}
\end{align}\end{subequations}
We're talking about \cref{eqn:full}, specifically \cref{eqn:wx}.
\end{document}
但是,当方程很小的时候,我希望能够将所有方程放在同一行以节省空间。另一种解决方案是简单地将 >a 添加到文本中,但如果我重新排序子方程,事情就会变得混乱。如果方程在文本中只出现在它们旁边的 (1) 上,那就没问题了,这是我感兴趣的引用。
编辑:显示我的问题的一个例子
\documentclass{article}
\usepackage{amsmath,hyperref,cleveref,multicol}
\DeclarePairedDelimiter{\shock}{[}{]_{-}^{+}}
\begin{document}
\begin{subequations}\begin{multicols}{2}
\begin{equation}
\shock*{(u-s) h} = 0 \label{eqn:part1}\\
\end{equation}
\break
\begin{equation}
\shock*{(u-s)^2 h + \frac{h^2}{2}} = 0 \label{eqn:part2}\\
\end{equation}
\end{multicols}\end{subequations}
We're talking about \cref{eqn:full}, specifically \cref{eqn:part1}.
\end{document}
Edit2:命令的最终版本
%Multiple labeled equations on same line
\newcommand{\sidebysidesubequations}[7]{
% #1 reference label
% #2 left subequation
% #3 left label
% #5 midtext
% #6 right subequation
% #7 right label
\begin{subequations}\label{#1}
\noindent
\begin{tabular}{@{}p{0.45\linewidth}@{}p{0.55\linewidth}@{}}
\begin{equation}
#2 \vphantom{\textrm{#4} \quad #5} \label{#3}
\end{equation}%
&
\begin{equation}
\textrm{#4} \qquad #5 \vphantom{#2} \label{#6}
\end{equation}%
\end{tabular}
\end{subequations}
}
答案1
改编自这个答案minipage
。请注意,如果您希望调整每个子方程的宽度,Gonzalo Medina 使用 s 的答案会更好。
\documentclass{article}
\usepackage{amsmath,hyperref,cleveref}
\usepackage{multicol}
\begin{document}
\begin{subequations}\label{eqn:full}
\begin{multicols}{2}
\begin{equation}
w=x \label{eqn:wx}
\end{equation}\break
\begin{equation}
y=z \label{eqn:yz}
\end{equation}
\end{multicols}
\end{subequations}
We're talking about \cref{eqn:full}, specifically \cref{eqn:wx}.
\end{document}
编辑
由于垂直对齐问题,感觉tabularx/vphantom
基于 的解决方案更合适。基本上,tabularx
由于
contentcell1 \vphatom{contentcell2}
结构。
我把所有代码包装到一起newcommand
以方便使用。
\documentclass{article}
\usepackage{mathtools,hyperref,cleveref,tabularx}
\DeclarePairedDelimiter{\shock}{[}{]_{-}^{+}}
\newcommand{\sidebysidesubequations}[3]{%
% 1st argument is the reference label
% 2nd argument is the left subequation
% 3rd argument is the right subequation
% Sublabels are defined with suffixes -left and -right
\begin{subequations}\label{#1}
\noindent
\begin{tabularx}{\linewidth}{XX}
\begin{equation}
#2 \vphantom{#3} \label{#1-left}
\end{equation}%
&
\begin{equation}
#3 \vphantom{#2} \label{#1-right}
\end{equation}
\end{tabularx}
\end{subequations}
}
\begin{document}
\sidebysidesubequations{eqn:full}{
\shock*{(u-s) h} = 0
}{
\shock*{(u-s)^2 h + \frac{h^2}{2}} = 0
}
We're talking about \cref{eqn:full}, specifically \cref{eqn:full-left}.
\end{document}