自动标记方程同一行中的子方程

自动标记方程同一行中的子方程

我希望能够自动标记和引用方程式的各个部分。为了解释我的意思,我将举一个例子。

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

在此处输入图片描述

相关内容