Làm cách nào để thụt các mục trong môi trường LaTeX / AocateeX?


17

H: làm cách nào tôi có thể nhận được sự thụt lề "thích hợp" của itemizemôi trường LaTeX trong auctex?

Đây là nơi tôi muốn ở cùng itemtrong một itemizemôi trường:

  • \item dòng được thụt vào hai khoảng trắng so với đầu môi trường
  • các dòng tiếp tục trong mục được thụt lề thêm hai khoảng trắng so với \itemdòng

Đây là những gì tôi muốn / mong đợi để xem:

\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}

Người ta có thể điều chỉnh thụt đầu tiên của mục với LaTeX-item-indentbiến, mặc định là -2. Với mặc định này, tôi nhận được hành vi không mong muốn của \itemkhông được thụt vào, nhưng tôi làm được những hành vi mong muốn của các dòng tiếp tục được bù đắp bởi một thêm hai không gian:

\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}

Cài đặt LaTeX-item-indentđể 0giúp tôi thụt lề mong muốn trên \itemdòng (hai khoảng trắng trong), nhưng không cho tôi nửa sau hành vi mong muốn của các dòng tiếp tục được bù bởi hai khoảng trắng bổ sung:

\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}

Vì vậy: làm thế nào để có được cả hai hành vi mong muốn:

  • thụt lề ban đầu của \itemdòng hai dấu cách và
  • dòng tiếp tục thêm hai không gian thụt lề?

(Lưu ý chủ đề SO liên quan .)


2
Tôi đã loay hoay với vấn đề chính xác này trong một vài giờ; phương thức đầu tiên của bạn hoạt động nếu bạn cũng đặt LaTeX-indent-levelthành 4. Các mục sẽ được thụt vào 4 - 2 = 2 và các dòng tiếp tục sẽ được thụt vào 4 = 2 + 2. Tuy nhiên, điều này có nghĩa là mọi môi trường khác trong tệp sẽ được thụt vào 4 (và không phải 2), có thể hoặc không thể mong muốn. Tôi muốn họ được thụt vào 2 cái, đó là nơi tôi bị mắc kẹt.
sykora

Bạn đã thử tùy chỉnh LaTeX-indent-environment-listvà thêm một chức năng tùy chỉnh để thụt lề? Hàm này LaTeX-indent-tabularcó thể cung cấp một điểm khởi đầu hợp lý (hoặc ít nhất là một ví dụ hợp lý về thụt lề tùy chỉnh trong một môi trường). Tôi chỉ tình cờ tìm thấy biến / chức năng này, vì vậy tôi không có cơ hội tự mình xem xét nó.
zroth

Câu trả lời:


14

Nhận xét của @ sykora (setq LaTeX-item-indent -2 LaTeX-indent-level 4)gần như ở đó, nhưng điều đó có nghĩa là chúng tôi cũng tràn sang mọi môi trường khác. Vì vậy, ví dụ, chúng ta cũng sẽ có:

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

Hàm sau xây dựng một đoạn mã cũ (và dường như bị hỏng?) Từ Tassilo Horn . Nó được thụt lề chính xác, bao gồm cả cho các môi trường lồng nhau. Nó hoạt động cho itemize, enumeratedescriptionmôi trường, để khởi động:

(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)))

Tôi không thể không cảm thấy rằng có một cài đặt rất đơn giản mà tôi đang thiếu và đây là phiên bản Rube Goldberg . Tuy nhiên, nó vẫn hoạt động và nó gãi ngứa trong nhiều năm .

EDIT: để đáp lại nhận xét của @ sykora, tôi đã sửa đổi chức năng để loại bỏ mã hóa cứng. \itemBây giờ là LaTeX-indent-levelkhông gian thụt lề . Các dòng tiếp tục có thể lấy giá trị của một biến mới LaTeX-indent-level-item-continuation, hoặc, nếu bạn không muốn liên kết giá trị sau, gấp đôi giá trị của LaTeX-indent-level.

Khi nó xảy ra, ràng buộc và thiết lập LaTeX-indent-level-item-continuationthành 8 mang lại kết quả thẩm mỹ. Tôi thậm chí có thể chuyển sang nó:

\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}

Tôi đã dành một ít thời gian để xem nó sáng nay, nhưng cần tập trung vào thứ khác. Tôi nghĩ rằng dòng 3060 của latex.el- tức là, (+ (LaTeX-indent-calculate-last force-type) LaTeX-item-indent))- đang góp phần vào mức độ thụt lề.
luật

Tôi vừa mới lái thử, và nó dường như hoạt động khá tốt - cảm ơn! Nếu có thể, bạn có thể thay thế 2 mã hóa cứng bằng một LaTeX-indent-levelhoặc một biến mới - LateX-item-continuation-indent?
sykora

@sykora: đề nghị tốt! Hợp nhất.
Dân

Là một TeXer thường xuyên, điều này thật tuyệt vời . Nó thực sự luôn làm phiền tôi! Cảm ơn :)
Sean Allred

Bạn đang sử dụng chế độ gói nào ở đây? Tôi nhận được mỗi dòng tuôn ra trái. Xem i61.tinypic.com/eq8n7b.jpg
NVaughan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.