Wyrównanie wielowierszowych równań i tabel w trybie lateksowym

12

Załóżmy, że edytuję lateks w trybie lateksowym Auctex i mam następujące równanie.
To jest po prostu wcięte indent-region.

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

Powyższe wyrównanie jest tym, co otrzymuję, jeśli zaznaczę wszystko i uderzę TAB, to znaczy, jeśli tylko używam indent-region.

Chciałbym uzyskać następujące informacje:
Zwróć uwagę na + c + dwyrównanie tekstu z tekstem po &. Byłoby to najbardziej sensowne, ponieważ + c + dsą częścią tej samej „kolumny” co = a + b.

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

Poniżej otrzymam, jeśli zadzwonię align-current.

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

Co prawie się tam pojawia, ale nie do końca. Różnica jest wyraźna.
Ponadto, jeśli zdecyduję się usunąć \phi, align-currentrobi coś po prostu dziwnego:

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

Czy istnieje sposób, w jaki mogę dostosować align-currentlub użyć czegoś innego, aby uzyskać pożądany efekt?

Malabarba
źródło
1
Obecnie nie jestem przy komputerze, aby napisać poprawną odpowiedź. Możesz jednak wybrać ten region, użyć align-regexpi podać regex znaków, które chcesz wyrównać +|=. Być może będziesz musiał uciec przed niektórymi z tych postaci.
Kaushal Modi,
Wyrażenie regularne, które wprowadzasz, jest w rzeczywistości [+=]. Ale nie da dokładnie tego, czego chciałeś ... nie będzie pasować &do +.
Kaushal Modi,

Odpowiedzi:

6

Rezultat, który chcesz, jest już funkcją AUCTeX od października 2013 r . Nie jest to jeszcze obecne w bieżącej wersji (11.87). Wszystko, co musisz zrobić, to zaznaczyć region i trafić TAB. Zobacz, LaTeX-hanging-ampersand-positionjak zaimplementowano wcięcie.

abo-abo
źródło
Ok, TAB naprawdę działa! Jak teraz zmienić Git Repo w pakiet? Udało mi się to dobrze zainstalować. Ale mam pakiety elpa, które zależą od auctex, i wydaje się, że wywołanie make installz repozytorium git nie definiuje pakietu „auctex”, więc te inne pakiety nie mogą się zainicjować.
Malabarba
(require 'tex-site)powinno wystarczyć po make installzakończeniu.
abo-abo
@ abo-abo To aktywuje auctex, ale package.el wciąż mnie nie widzi. W każdym razie obejdę to, instalując Auctex z Elpy i usuwając wszystko oprócz -pkgpliku z katalogu instalacyjnego.
Malabarba
4

Zakładając, że nie ma żadnych pustych linii między \ początkiem i \ końcem równań, możesz wywołać tę funkcję, gdy kursor znajduje się w dowolnym miejscu w obszarze \ początek- \ koniec.

(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))
Kaushal Modi
źródło