Вирівнювання багаторядкових рівнянь та таблиць у латексному режимі


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або використовувати щось інше, щоб отримати бажаний ефект?


1
Наразі я не за своїм комп’ютером, щоб написати належну відповідь. Але ви можете вибрати цей регіон і використовувати align-regexpта надати регулярний вираз символів, які потрібно вирівняти +|=. Можливо, вам доведеться уникнути деяких із цих персонажів.
Каушал Моді

Регекс, який ви вводите, є насправді [+=]. Але він не дасть саме того, що ви хотіли .. він не вирівняє &поряд із +.
Каушал Моді

Відповіді:


6

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


Гаразд, TAB дійсно працює! Тепер, як я перетворять git repo в пакет? Мені вдалося встановити це чудово. Але у мене є пакети elpa, які залежать від auctex, і, здається, виклик make installз git repo, схоже, не визначає пакет "auctex", тому інші пакунки не ініціалізуються.
Малабарба

(require 'tex-site)повинно вистачити після того, як make installбуло завершено.
або-або

@ abo-abo Це активує auctex, але package.el все ще не бачить його. У будь-якому випадку, я обійшов це, також встановивши Auctex з Elpa і просто видаливши все, крім -pkgфайлу, з його інсталяційного каталогу.
Малабарба

4

Якщо припустити, що у вас немає жодних порожніх рядків між \ початком і \ кінцем рівнянь, ви можете викликати цю функцію, поки курсор перебуває в будь-якому районі \ початку- кінця області.

(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))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.