Menyelaraskan persamaan multi-baris dan tabel dalam mode lateks

12

Katakanlah saya mengedit lateks dalam mode lateks Auctex, dan saya memiliki persamaan berikut.
Ini hanya indentasi dengan indent-region.

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

Keselarasan di atas adalah apa yang saya dapatkan jika saya memilih semuanya dan tekan TAB, yaitu, jika saya hanya menggunakan indent-region.

Yang ingin saya dapatkan adalah sebagai berikut:
Perhatikan bagaimana + c + dselaras dengan teks setelah &. Ini paling masuk akal, karena + c + dmerupakan bagian dari "kolom" yang sama dengan = a + b.

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

Di bawah ini adalah apa yang saya dapatkan jika saya menelepon align-current.

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

Yang hampir sampai di sana, tetapi tidak cukup. Perbedaannya jelas.
Juga, jika saya memutuskan untuk menghapusnya \phi, align-currentmelakukan sesuatu yang aneh:

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

Apakah ada cara saya dapat menyesuaikan align-currentatau menggunakan sesuatu yang lain untuk mendapatkan efek yang diinginkan?

Malabarba
sumber
1
Saya tidak di komputer saya saat ini untuk menulis jawaban yang tepat. Tetapi Anda dapat memilih wilayah itu dan menggunakan align-regexpdan memberikan regex karakter yang ingin Anda selaraskan +|=. Anda mungkin harus melarikan diri dari beberapa karakter tersebut.
Kaushal Modi
Regex yang Anda masukkan sebenarnya [+=]. Tapi itu tidak akan memberikan apa yang Anda inginkan .. itu tidak akan sejalan &dengan +.
Kaushal Modi

Jawaban:

6

Hasil yang Anda inginkan sudah menjadi fitur AUCTeX sejak Oktober 2013 . Ini belum hadir dalam rilis saat ini (11.87). Yang harus Anda lakukan adalah menandai wilayah dan tekan TAB. Lihat LaTeX-hanging-ampersand-positionbagaimana lekukan diimplementasikan.

abo-abo
sumber
Ok, TAB memang berfungsi! Sekarang bagaimana cara mengubah repo git menjadi sebuah paket? Saya berhasil menginstalnya dengan baik. Tapi saya punya paket elpa yang bergantung pada auctex, dan sepertinya menelepon make installdari git repo sepertinya tidak mendefinisikan paket "auctex" sehingga paket-paket lain gagal diinisialisasi.
Malabarba
(require 'tex-site)harus cukup setelah make installselesai.
abo-abo
@ abo-abo Itu mengaktifkan auctex, tetapi package.el masih tidak melihatnya untuk saya. Bagaimanapun, saya menyelesaikan ini dengan juga menginstal Auctex dari Elpa dan hanya menghapus semuanya kecuali -pkgfile dari direktori instalasinya.
Malabarba
4

Dengan asumsi bahwa Anda tidak memiliki garis kosong antara \ begin dan \ end dari persamaan Anda, Anda dapat memanggil fungsi ini saat kursor berada di mana saja di dalam wilayah \ 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
sumber