Bagaimana cara indentasi item di lingkungan LaTeX / AUCTeX itemize?

17

T: bagaimana saya bisa mendapatkan lekukan "tepat" dari itemizelingkungan LaTeX auctex?

Di sinilah saya ingin bersama dengan itemdi itemizelingkungan:

  • \item garis diindentasikan dua spasi relatif terhadap permulaan lingkungan
  • garis kelanjutan dalam item diberi indentasi tambahan dua spasi relatif terhadap \itemgaris

Inilah yang saya ingin / harapkan untuk dilihat:

\begin{itemize}
  \item Here's a really long item in a LaTeX itemize environment;
    note how the *initial* item line is indented two spaces, and the
    continuation lines are indented another two spaces.
\end{itemize}

Seseorang dapat menyesuaikan lekukan awal item dengan LaTeX-item-indentvariabel, yang defaultnya adalah -2. Dengan default ini, saya mendapatkan perilaku yang tidak diinginkan dari \itemtidak sedang menjorok, tapi aku lakukan mendapatkan perilaku yang diinginkan dari garis kelanjutan diimbangi oleh dua ruang tambahan:

\begin{itemize}
\item Here's a really long item in a LaTeX itemize environment;
  note how the *initial* item line is *NOT* indented two spaces,
  but the continuation lines are indented two spaces.
\end{itemize}

Pengaturan LaTeX-item-indentuntuk 0membuat saya lekukan yang diinginkan pada \itembaris (dua ruang di), tetapi tidak tidak mendapatkan saya paruh kedua perilaku yang diinginkan dari garis kelanjutan diimbangi oleh dua ruang tambahan:

\begin{itemize}
  \item Here's a really long item in a LaTeX itemize environment;
  note how the *initial* item line is indented two spaces, but the
  continuation lines are *NOT* indented an additional two spaces.
\end{itemize}

Jadi: bagaimana seseorang mendapatkan kedua perilaku yang diinginkan:

  • indentasi awal dari \itembaris dua spasi, dan
  • garis kelanjutan dan dua spasi tambahan yang berlekuk?

(Perhatikan utas terkait .)

Dan
sumber
2
Saya telah bermain-main dengan masalah yang tepat ini selama beberapa jam; Metode pertama Anda berfungsi jika Anda juga mengatur LaTeX-indent-levelke 4. Item akan diindentasi ke 4 - 2 = 2 dan garis kelanjutan akan diindentasi ke 4 = 2 + 2. Namun, ini berarti bahwa setiap lingkungan lain dalam file akan diindentasi ke 4 (dan bukan 2), yang mungkin atau mungkin tidak diinginkan. Saya lebih suka mereka indentasi pada 2 sendiri, yang mana saya terjebak
sykora
Apakah Anda mencoba menyesuaikan LaTeX-indent-environment-listdan menambahkan fungsi khusus untuk lekukan? Fungsi ini LaTeX-indent-tabulardapat memberikan titik awal yang masuk akal (atau setidaknya contoh indentasi yang disesuaikan dalam lingkungan). Saya baru saja menemukan variabel / fungsi ini, jadi saya belum punya kesempatan untuk melihatnya sendiri.
Zroth

Jawaban:

14

Komentar @ sykora tentang (setq LaTeX-item-indent -2 LaTeX-indent-level 4)hampir ada, tetapi itu berarti kita menumpahkan ke setiap lingkungan lain juga. Jadi, misalnya, kita juga akan memiliki:

\begin{abstract}
    This indents to the 4th column, which is way too far!
\end{abstract}

Fungsi berikut membangun cuplikan kode lama (dan tampaknya rusak?) Dari Tassilo Horn . Itu mendapatkan lekukan yang benar, termasuk untuk lingkungan bersarang. Ia bekerja untuk itemize, enumeratedan descriptionlingkungan, untuk boot:

(defun LaTeX-indent-item ()
  "Provide proper indentation for LaTeX \"itemize\",\"enumerate\", and
\"description\" environments.

  \"\\item\" is indented `LaTeX-indent-level' spaces relative to
  the the beginning of the environment.

  Continuation lines are indented either twice
  `LaTeX-indent-level', or `LaTeX-indent-level-item-continuation'
  if the latter is bound."
  (save-match-data
    (let* ((offset LaTeX-indent-level)
           (contin (or (and (boundp 'LaTeX-indent-level-item-continuation)
                            LaTeX-indent-level-item-continuation)
                       (* 2 LaTeX-indent-level)))
           (re-beg "\\\\begin{")
           (re-end "\\\\end{")
           (re-env "\\(itemize\\|\\enumerate\\|description\\)")
           (indent (save-excursion
                     (when (looking-at (concat re-beg re-env "}"))
                       (end-of-line))
                     (LaTeX-find-matching-begin)
                     (current-column))))
      (cond ((looking-at (concat re-beg re-env "}"))
             (or (save-excursion
                   (beginning-of-line)
                   (ignore-errors
                     (LaTeX-find-matching-begin)
                     (+ (current-column)
                        (if (looking-at (concat re-beg re-env "}"))
                            contin
                          offset))))
                 indent))
             ((looking-at (concat re-end re-env "}"))
              indent)
            ((looking-at "\\\\item")
             (+ offset indent))
            (t
             (+ contin indent))))))

(defcustom LaTeX-indent-level-item-continuation 4
  "*Indentation of continuation lines for items in itemize-like
environments."
  :group 'LaTeX-indentation
  :type 'integer)

(eval-after-load "latex"
  '(setq LaTeX-indent-environment-list
         (nconc '(("itemize" LaTeX-indent-item)
                  ("enumerate" LaTeX-indent-item)
                  ("description" LaTeX-indent-item))
                LaTeX-indent-environment-list)))

Saya merasa bahwa ada pengaturan yang sangat sederhana yang saya lewatkan dan ini adalah versi Rube Goldberg . Tetap saja, ini berhasil, dan itu menggaruk gatal yang saya alami bertahun - tahun .

EDIT: sebagai tanggapan atas komentar @ sykora, saya telah merevisi fungsi untuk mengeluarkan hard coding. \itemSekarang LaTeX-indent-levelruang indentasi . Garis kelanjutan dapat mengambil nilai variabel baru LaTeX-indent-level-item-continuation,, atau, jika Anda tidak ingin mengikat yang terakhir, dua kali nilai LaTeX-indent-level.

Seperti yang terjadi, pengikatan dan pengaturan LaTeX-indent-level-item-continuationke 8 memberikan hasil yang menyenangkan secara estetika. Saya bahkan mungkin beralih ke itu:

\begin{itemize}
  \item Example with LaTeX-indent-level-item-continuation set to 8.
  \item Here's a really long item that will spill over onto the
        continuation line; text lines up pretty nicely this way!
        \begin{itemize} 
          \item And here's a sub-item, with the environment
                indented to the relevant continuation line.
        \end{itemize}
\end{itemize}
Dan
sumber
Saya menghabiskan sedikit waktu melihatnya pagi ini, tetapi perlu fokus pada hal lain. Saya pikir baris 3060 latex.el- yaitu, (+ (LaTeX-indent-calculate-last force-type) LaTeX-item-indent))- berkontribusi pada tingkat indentasi.
hukum
Saya hanya mengambilnya untuk tes perjalanan, dan tampaknya berkinerja cukup baik - terima kasih! Jika memungkinkan, Anda dapat mengganti 2s yang dikodekan dengan salah satu LaTeX-indent-levelatau variabel baru - LateX-item-continuation-indent?
sykora
@sykora: saran bagus! Tergabung.
Dan
Sebagai TeXer yang sering, ini fantastis . Itu benar-benar selalu mengganggu saya! Terima kasih :)
Sean Allred
Mode pembungkus apa yang Anda gunakan di sini? Saya membuat setiap baris memerah kiri. Lihat i61.tinypic.com/eq8n7b.jpg
NVaughan