Переделка среды выравнивания с определенным форматированием

Переделка среды выравнивания с определенным форматированием

Я хочу переделать среду \begin{align} \end{align} с некоторой стилизацией и не представляю, как это сделать. Ну, если быть точным, я хочу, чтобы в этой среде произошло две конкретные вещи:

  1. Я хочу, чтобы каждый перенос строки добавлял вертикальную линию в месте разрыва команды, например: введите описание изображения здесь

  2. Когда это операция, отличная от равенства, я хочу, чтобы при наличии переноса строки она выглядела следующим образом: введите описание изображения здесь

Я понятия не имею, как начать разрабатывать код, который это делает... Возможно, использование tikz было бы более простой альтернативой, но я не знаю, как это реализовать.

На обоих опубликованных мной изображениях линии нарисованы вручную.

решение1

Вот краткая tikzmarkверсия (правда, без библиотеки, поскольку нам не нужны никакие продвинутые методы, которые она может предложить).

Измените outer ysep, чтобы отрегулировать пустое пространство между =и фактической строкой. ( inner ysepБудет способствовать формированию ограничительного поля и может изменить вертикальное расположение строк, если оно слишком велико.)

Код

\documentclass[varwidth]{standalone}
%\documentclass{article}
\usepackage{amsmath, tikz}
\newcommand*\eqlineset{\pgfqkeys{/eqlines}}
\eqlineset{
  picture/.style={baseline, remember picture},
  line/.style={thick, draw=orange, line cap=round},
  node/.style={
    minimum size=+0pt, inner sep=+0pt, outer ysep=+.3333em, anchor=base,
    name=tma\thetikzmarkalign},
}
\newcounter{tikzmarkalign}
\makeatletter
\AtBeginEnvironment{align}{%
  \setcounter{tikzmarkalign}{0}%
  \newcommand*\noeq{\hphantom{{}={}}}%
  \newcommand*\eq{
    \ifnum\value{tikzmarkalign}=0
      \mathrel{\tikz[/eqlines/picture]\node[/eqlines/node]{$=$};}
    \else
      \mathrel{
        \begin{tikzpicture}[/eqlines/picture]
          \node[/eqlines/node] (tma\thetikzmarkalign) {$=$};
          \unless\ifmeasuring@
            \path[/eqlines/line, overlay] (tma\thetikzmarkalign)
                        -- (tma\pgfinteval{\thetikzmarkalign-1});
          \fi
        \end{tikzpicture}
      }
    \fi
    \stepcounter{tikzmarkalign}
  }%
}
\makeatother
\begin{document}
\begin{align}
 Lorem & \eq Ipsum \\
       & \eq dolor sit amet,\\
       & \noeq + \frac{consetetur sadipscing elitr}{sed diam nonumy} \\
       & \eq eirmod tempor invidunt.
\end{align}
\end{document}

Выход

введите описание изображения здесь

решение2

Как указано в комментариях, вы можете разместить знаки равенства \tikzmarknodes(добавьте их {}для создания правильного интервала), а затем использовать их tikzдля рисования линий между этими узлами (которые могут охватывать несколько строк):

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

\begin{document}

\begin{align}
    x & \tikzmarknode{eq1}{{}={}} a^2 + 2ab + b^2 \\
      & \tikzmarknode{eq2}{{}={}} (a + b)^2
\end{align}

\begin{tikzpicture}[remember picture, overlay]
    \draw[very thick, orange, shorten >=2pt, shorten <=2pt] (eq1) -- (eq2);
\end{tikzpicture}

\end{document}

введите описание изображения здесь

Связанный контент