
У меня есть несколько коротких уравнений, и я хочу показать их в двух столбцах. По сути:
А = Б (1) || С = Г (2)
Э = Ж (3) || Г = Н (4)
Сначала я попробовал flalign
среду (я бы предпочел ее align
, но это не обязательно), но я не смог пронумеровать уравнения так, как мне хотелось бы. Среда align
рассматривает каждую строку как одно уравнение.
Пример:
\documentclass{article}
\usepackage{mathtools}
\usepackage{amsmath}
\begin{document}
\begin{flalign}
A = & B & C = & D \\
E = & F & G = & H
\end{flalign}
\end{document}
Другой подход представлял собой простую multicolumn
среду с принудительным разрывом столбцов:
\documentclass{article}
\usepackage{mathtools}
\usepackage{amsmath}
\usepackage{multicol}
\begin{document}
\begin{multicols}{2}
\begin{align}
A = & B \\
E = & F
\end{align}
\columnbreak
\begin{align}
C = & D \\
G = & H
\end{align}
\end{multicols}
\end{document}
Однако есть несколько проблем:
- Уравнения, похоже, расположены не по вертикали
- Нумерация идет вертикально, а не горизонтально (для меня это было бы приемлемо)
Буду признателен за любую помощь по этому вопросу.
решение1
Я считаю, что нумеровать уравнения следует только в том случае, если вы собираетесь ссылаться на них позже, поэтому, следуя этой философии, почему бы не определить макрос, который и вставляет номер уравнения, и создает метку:
\newcommand\Label[1]{&\refstepcounter{equation}(\theequation)\ltx@label{#1}&}
Сначала equation
счетчик увеличивается, выводится на печать, а затем есть некоторые хитрости, чтобы сделать метку (среды amsmath выводят сообщения об ошибках, когда в одной строке появляется несколько меток, и нам нужно обойти это). Из-за @
' это должно быть заключено в \makeatletter...\makeatother
.
Возможно, неразумно, я включил &
's внутрь макроса, и, следовательно, неявно предположил, что это \Label
всегда будет использоваться внутри чего-то вроде align*
окружения -- обратите внимание, *
поскольку вы не хотите, чтобы окружение давало дополнительные метки. С другой стороны, потребовалось немного дополнительных усилий, чтобы не align*
выдавать ошибку (поскольку align*
подавляет номера уравнений), поэтому этот макрос не будет работать вне окружения выравнивания ams.
Использование этого макроса дает:
Вот полный код:
\documentclass{article}
\usepackage{mathtools}
\usepackage{amsmath}
\makeatletter
\newcommand\Label[1]{&\refstepcounter{equation}(\theequation)\ltx@label{#1}&}
\makeatother
\begin{document}
\begin{align*}
A &= B \Label{one}& C &= D \Label{two}\\
E &= F \Label{three}& G &= H \Label{four}
\end{align*}
See equations \ref{one}, \ref{two}, \ref{three} and \ref{four}.
\end{document}
Как я уже сказал выше, вероятно, неразумно помещать два символа &
'' внутрь \Label
макроса, поскольку это скрывает часть структуры align*
среды, что в конечном итоге может кого-то запутать.
Кстати, это так же хорошо работает и с flalign*
окружением.
решение2
Я не могу добавить комментарий к ответу, поэтому добавляю его в качестве ответа для тех, у кого возникнет похожая проблема с \Label
использованием только первой буквы.
Я добавил фиктивную переменную, \tmpLabel
используя примитив \def
, чтобы ее можно было правильно раскрыть внутри \ltx@label
.
\makeatletter
\newcommand{\allignLabel}[1]{&\refstepcounter{equation}(\theequation)\def\tmplab{#1}\ltx@label\tmplab&}
\makeatother
Я уверен, что есть более элегантное решение этой проблемы, поэтому, пожалуйста, прокомментируйте или отредактируйте этот ответ, указав подходящее решение.