Alignement d'équations et de tableaux à lignes multiples en mode latex

12

Disons que je modifie un latex en mode latex d'Auctex, et j'ai l'équation suivante.
C'est juste en retrait indent-region.

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

L'alignement ci-dessus est ce que j'obtiens si je sélectionne tout et frappe TAB, c'est-à-dire si j'utilise simplement indent-region.

Ce que je voudrais obtenir est le suivant:
Notez comment le + c + dest aligné sur le texte après le &. Cela aurait le plus de sens, car ils + c + dfont partie de la même "colonne" que = a + b.

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

Voici ce que j'obtiens si j'appelle align-current.

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

Ce qui y arrive presque , mais pas tout à fait. La différence est claire.
De plus, si je décide de supprimer le \phi, align-currentfait quelque chose de tout simplement bizarre:

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

Existe-t-il un moyen de personnaliser align-currentou d'utiliser autre chose pour obtenir l'effet souhaité?

Malabarba
la source
1
Je ne suis pas actuellement sur mon ordinateur pour écrire une bonne réponse. Mais vous pouvez sélectionner cette région et utiliser align-regexpet fournir l'expression régulière des caractères que vous souhaitez aligner +|=. Vous devrez peut-être échapper à certains de ces personnages.
Kaushal Modi
Le regex que vous entrez est en fait [+=]. Mais il ne donnera pas exactement ce que vous vouliez .. il n'alignera pas le &long avec le +.
Kaushal Modi

Réponses:

6

Le résultat souhaité est déjà une fonctionnalité AUCTeX depuis octobre 2013 . Ce n'est pas encore présent dans la version actuelle (11.87). Tout ce que vous avez à faire est de marquer la région et de frapper TAB. Voir LaTeX-hanging-ampersand-positioncomment l'implémentation est implémentée.

abo-abo
la source
Ok, TAB fonctionne en effet! Maintenant, comment puis-je transformer le dépôt git en package? J'ai réussi à bien l'installer. Mais j'ai des paquets elpa qui dépendent d'auctex, et il semble que l'appel make installdepuis le dépôt git ne semble pas définir un paquet "auctex" donc ces autres paquets ne parviennent pas à s'initialiser.
Malabarba
(require 'tex-site)devrait suffire une fois make installterminé.
abo-abo
@ abo-abo Cela active auctex, mais package.el ne le voit toujours pas pour moi. Dans tous les cas, j'ai contourné cela en installant également Auctex d'Elpa et en supprimant tout, sauf le -pkgfichier, de son répertoire d'installation.
Malabarba
4

En supposant que vous n'avez pas de lignes vides entre le \ begin et \ end de vos équations, vous pouvez appeler cette fonction pendant que votre curseur se trouve n'importe où dans la région \ 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))
Kaushal Modi
la source