2

This question had good answers, here:

equation label within commutative diagram

and I thank everyone again.

But the text is very sensitive to changes, so when I try to change what people suggested, I get error messages.

So I created the smallest possible MWE:

\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}

\usepackage{hyperref, longtable, tabu, booktabs}
\usetikzlibrary{arrows.meta,shapes.arrows}

\usepackage{tikz-cd}


\begin{document}


    \begin{figure}[h]
        \begin{equation*} \label{eqn-commutative}
        \begin{tikzcd}[row sep=huge, column sep=width("bbbbbbbbbbbbbbbbbbbbbbb")]  
        A    \arrow[r,  "\qquad \qquad \qquad \quad  \mathrm{some \; text \; here} \hspace{3cm}"]  
        \arrow[d,   "\mathrm{some \, down \, text \, here}"  swap]  &     \arrow[d,  "\mathrm{some \, down \, text \, here}" ] B  \\

        C        & D    \arrow[l, "\qquad \qquad \qquad \quad  \mathrm{some \; text \; here} \hspace{3cm}" ] \\

        \end{tikzcd} 
        \end{equation*} 
        \vspace{-1.5cm} 
        \caption{Figure caption here}  
        \label{figure-commutative} 
    \end{figure}

In place of the "A" I would like the following: 

\begin{equation} \label{eq:1} 
\left\{\begin{array}{rl}
\sup & c^T x  \\
s.t.   & Ax \leq b.
\end{array} \right. 
\end{equation} 

with equation label adjusted to left.

In place of the "B" I would like the following:

\begin{equation} \label{eq:2} 
\left\{\begin{array}{rl}
\sup & f^T x  \\
s.t.   & Dx \leq e.
\end{array} \right. 
\end{equation} 

with equation label adjusted to left.

Then I would like to reference \eqref{eq:1} and \eqref{eq:2} here. 

\end{document}

enter image description here

5
  • 2
    Perhaps good to know: you can format a block of code by indenting it by four lines (like I've just done). This can be accomplished by either pressing the {}-button at the top or by pressing ctrl-K (or cmd-K in MacOS) while the text is selected, as demonstrated here. Feb 4, 2019 at 21:11
  • 2
    unrelated but it is best to avoid labels with numbers like \label{eq:1} they work but will be confusing for anyone looking at the source if the printed numbers are different. Feb 4, 2019 at 21:12
  • 2
    do you actually want to use the same global equation counter as used in the rest of the document, or do you want a local numbering starting from 1 in this figure? (It is rather rare to use main equation counter in a figure as figures float so can be out of sequence with non-floating equations. Feb 4, 2019 at 21:15
  • @David Carlisle I do want to use the same global equation counter. I usually manage to nail the figure in place with say \begin{figure}[H]
    – district9
    Feb 4, 2019 at 22:17
  • @district9 even [H] takes the figure out of the current context (so for example it is not set as part of a list) The only reason to use figure is to specify that it may move, if you don't want it to move just don't use figure equations are almost never put in floating environments such as figure. Feb 5, 2019 at 12:10

2 Answers 2

3

I'd define a suitable command for this. Note that you don't have to guess the width of the single big piece.

\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz-cd}

\makeatletter
\newcommand{\nodeequation}[1]{%
  \let\label\ltx@label
  \refstepcounter{equation}%
  (\theequation)%
  \quad#1%
}
\makeatother

\begin{document}
\begin{equation*}
\begin{tikzcd}[row sep=4em,column sep=10em,ampersand replacement=\&]
  \nodeequation{
    \label{eq:1}
    \begin{cases}
    \begin{alignedat}{2}
    &\sup          &\quad& c^T x  \\
    &\,\text{s.t.} &\quad& Ax \leq b.
    \end{alignedat}
    \end{cases}
  } 
  \arrow[r,"\text{some text here}"] \arrow[d,swap,"\text{some text here}"] \&
  \nodeequation{
    \label{eq:2}
    \begin{cases}
    \begin{alignedat}{2}
    &\sup          &\quad& f^T x  \\
    &\,\text{s.t.} &\quad& Dx \leq c.
    \end{alignedat}
    \end{cases}
  } 
  \arrow[d,"\text{some text here}"]
\\
  C \& D \arrow[l,"\text{some text here}"]
\end{tikzcd}
\end{equation*}
The references are \eqref{eq:1} and \eqref{eq:2}. Another equation to see
that the number is right
\begin{equation}
0=0
\end{equation}

\end{document}

enter image description here

3

Here is a proposal. The equation numbers on the left and right go back to David Carlisle's answer. So just squeeze these equations in minipages. And instead of having a \quad and \hspace gathering, just use pos=... in order to move the texts around, which are much more straightforward to typeset with \text BTW.

\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz-cd}
\usepackage{hyperref}

% https://tex.stackexchange.com/a/212099/121799
\makeatletter
\newcommand{\leqnomode}{\tagsleft@true\let\veqno\@@leqno}%
\newcommand{\reqnomode}{\tagsleft@false\let\veqno\@@eqno}%
\newcommand*{\compress}{\@minipagetrue}
\makeatother

\begin{document}


\begin{figure}[h]
\begin{equation*}
\begin{tikzcd}[row sep=huge, column sep=width("bbbbbbbbbbbbbbbbbbbbbbb"),
ampersand replacement=\&]  
\begin{minipage}{4cm}
\leqnomode
\begin{equation} \label{eq:1} 
\left\{\begin{array}{rl}
\sup & c^T x  \\
s.t.   & Ax \leq b.
\end{array} \right. 
\end{equation} 
\end{minipage}
   \arrow[r,  "\text{some text here}" pos=0.5]  
        \arrow[d,   "\text{some down text here}"  swap]  \&     
        \arrow[d,  "\text{some down text here}" ] 
\begin{minipage}{4cm}
\begin{equation} \label{eq:2} 
\left\{\begin{array}{rl}
\sup & f^T x  \\
s.t.   & Dx \leq e.
\end{array} \right. 
\end{equation} 
\end{minipage}\\
        C        \& D    
        \arrow[l, "\text{some text here}" pos=0.4 ] \\[-1cm]
\end{tikzcd} 
\end{equation*}
\caption{Figure caption here.}  
\label{figure-commutative} 
\end{figure}

Then I would like to reference \eqref{eq:1} and \eqref{eq:2} here. 

\end{document}

enter image description here

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .