Выравнивание многострочных уравнений и таблиц в режиме латекса

12

Допустим, я редактирую латекс в режиме латекса Auctex, и у меня есть следующее уравнение.
Это просто с отступом indent-region.

\begin{align}
    \phi & = a + b
    + c + d \\
    & = a + b
    + c + d + e
\end{align}

Вышеупомянутое выравнивание - то, что я получаю, если я выбираю все и нажимаю TAB, то есть, если я просто использую indent-region.

Я хотел бы получить следующее:
обратите внимание, как + c + dтекст выравнивается по тексту после &. Это было бы наиболее разумно, поскольку они + c + dявляются частью того же «столбца», что и = a + b.

\begin{align}
    \phi & = a + b
           + c + d \\
         & = a + b
           + c + d + e
\end{align}

Вот что я получу, если позвоню align-current.

\begin{align}
    \phi & = a + b
    + c + d \\
         & = a + b
         + c + d + e
\end{align}

Который почти добирается, но не совсем. Разница очевидна.
Кроме того, если я решу удалить \phi, align-currentделает что-то просто странное:

\begin{align}
 & = a + b
    + c + d \\
 & = a + b
         + c + d + e
\end{align}

Есть ли способ, которым я могу настроить align-currentили использовать что-то еще, чтобы получить желаемый эффект?

Malabarba
источник
1
Я не за компьютером, чтобы написать правильный ответ. Но вы можете выбрать этот регион и использовать align-regexpи предоставить регулярное выражение символов, которые вы хотите выровнять +|=. Возможно, вам придется убежать от некоторых из этих персонажей.
Каушал Моди
Регулярное выражение, которое вы вводите, на самом деле [+=]. Но это не даст именно то, что вы хотели .. это не выровняет &вместе с +.
Каушал Моди

Ответы:

6

Результат, который вы хотите - это функция AUCTeX с октября 2013 года . Это еще не присутствует в текущем выпуске (11.87). Все, что вам нужно сделать, это отметить регион и нажать TAB. Посмотрите, LaTeX-hanging-ampersand-positionкак реализован отступ.

Або-або
источник
Хорошо, TAB действительно работает! Теперь, как мне превратить git-репо в пакет? Мне удалось установить его нормально. Но у меня есть пакеты elpa, которые зависят от auctex, и кажется, что вызов make installиз git repo не определяет пакет «auctex», поэтому другие пакеты не могут быть инициализированы.
Малабарба
(require 'tex-site)должно быть достаточно после make installзавершения.
abo-abo
@ abo-abo Это активирует auctex, но package.el все еще не видит это для меня. В любом случае, я справился с этим, также установив Auctex из Elpa и просто удалив все, кроме -pkgфайла, из его установочного каталога.
Малабарба
4

Предполагая, что у вас нет пустых строк между \ begin и \ end ваших уравнений, вы можете вызвать эту функцию, когда курсор находится в любом месте в пределах области \ begin- \ end.

(defun my/align-latex-eq ()
  "Align the & chars and then align the +/= chars."
  (interactive)
  (backward-paragraph)
  (mark-paragraph)
  ;; align-regexp syntax:  align-regexp (beg end regexp &optional group spacing repeat)
  (align-regexp (region-beginning) (region-end) "\\(\\s-*\\)&" 1 1 nil)
  (mark-paragraph)
  (align-regexp (region-beginning) (region-end) "\\(\\s-*\\)[+=]" 1 1 nil))
Каушал Моди
источник