จะเยื้องรายการในสภาพแวดล้อม Laize DeaX / AUCTeX ได้อย่างไร


17

ถาม:ฉันจะได้รับการเยื้อง "เหมาะสม" ของitemizeสภาพแวดล้อมLaTeX ได้auctexอย่างไร

นี่คือสิ่งที่ฉันต้องการจะอยู่itemในitemizeสภาพแวดล้อม:

  • \item บรรทัดถูกเยื้องสองช่องว่างสัมพันธ์กับจุดเริ่มต้นของสภาพแวดล้อม
  • บรรทัดที่มีความต่อเนื่องในรายการจะเพิ่มช่องว่างอีกสองช่องที่สัมพันธ์กับ\itemบรรทัด

นี่คือสิ่งที่ฉันต้องการ / คาดหวังที่จะเห็น:

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

หนึ่งสามารถปรับเยื้องเริ่มต้นของรายการที่มีตัวแปรที่เริ่มต้นที่LaTeX-item-indent -2ด้วยค่าเริ่มต้นนี้ฉันจะได้รับพฤติกรรมที่ไม่พึงประสงค์ของการ\itemไม่เยื้อง แต่ฉันจะได้รับพฤติกรรมที่ต้องการของเส้นต่อเนื่องที่ถูกชดเชยด้วยช่องว่างสองช่องเพิ่มเติม:

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

การตั้งค่าLaTeX-item-indentเพื่อให้0ฉันได้รับการเยื้องที่ต้องการใน\itemบรรทัด (สองช่องว่างใน) แต่ไม่ได้รับฉันในช่วงครึ่งหลังของพฤติกรรมที่ต้องการของเส้นต่อเนื่องที่ถูกชดเชยด้วยช่องว่างเพิ่มเติมสอง:

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

ดังนั้น: วิธีหนึ่งได้รับพฤติกรรมที่ต้องการทั้งสอง :

  • เยื้องเริ่มต้นของ\itemช่องว่างสองบรรทัดและ
  • ต่อเนื่องบรรทัดอีกสองช่องว่างเยื้องหรือไม่

(หมายเหตุเธรด SO ที่เกี่ยวข้อง )


2
ฉันยุ่งกับเรื่องนี้มาสองสามชั่วโมงแล้ว วิธีการแรกของคุณจะทำงานหากคุณตั้งค่าLaTeX-indent-levelเป็น 4 รายการจะถูกเยื้องไปที่ 4 - 2 = 2 และบรรทัดต่อเนื่องจะถูกเยื้องเป็น 4 = 2 + 2 อย่างไรก็ตามนี่หมายความว่าทุกสภาพแวดล้อมอื่น ๆ ในไฟล์จะถูกเยื้อง 4 (และไม่ใช่ 2) ซึ่งอาจหรืออาจไม่เป็นที่ต้องการ ฉันต้องการให้พวกเขาเยื้องที่ 2 ตัวเองซึ่งเป็นที่ที่ฉันติดอยู่
sykora

คุณลองปรับแต่งLaTeX-indent-environment-listและเพิ่มฟังก์ชั่นที่กำหนดเองสำหรับการเยื้องหรือไม่? ฟังก์ชันLaTeX-indent-tabularอาจมีจุดเริ่มต้นที่สมเหตุสมผล (หรืออย่างน้อยก็เป็นตัวอย่างที่เหมาะสมของการเยื้องที่กำหนดเองภายในสภาพแวดล้อม) ฉันเพิ่งเจอตัวแปร / ฟังก์ชั่นนี้ดังนั้นฉันจึงไม่ได้มีโอกาสตรวจสอบด้วยตัวเอง
zroth

คำตอบ:


14

@ ความคิดเห็นเกี่ยวกับ sykora ของ(setq LaTeX-item-indent -2 LaTeX-indent-level 4)เกือบจะมี แต่มันหมายความว่าเราทะลักไปยังสภาพแวดล้อมอื่น ๆ เช่นกัน ตัวอย่างเช่นเราจะมี:

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

ฟังก์ชั่นดังต่อไปนี้สร้างออกเก่า (และเสียดูเหมือน?) โค้ดจากTassilo ฮอร์น ได้รับการเยื้องที่ถูกต้องรวมถึงสภาพแวดล้อมที่ซ้อนกัน การทำงานสำหรับitemize, enumerateและdescriptionสภาพแวดล้อมในการบูต:

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

ฉันอดไม่ได้ที่จะรู้สึกว่ามีฉากง่าย ๆ ที่ฉันขาดไปและนี่เป็นเวอร์ชั่นRube Goldberg ยังคงทำงานและรอยขีดข่วนคันผมเคยมีสำหรับปีที่ผ่านมา

แก้ไข:เพื่อตอบสนองต่อความคิดเห็นของ @ sykora ฉันได้แก้ไขฟังก์ชั่นการเขียนโค้ดแบบยาก \items ตอนนี้มีLaTeX-indent-levelช่องว่างเยื้อง สายต่อเนื่องสามารถใช้ค่าของตัวแปรใหม่หรือหากคุณไม่ต้องการที่จะผูกหลังสองครั้งค่าของLaTeX-indent-level-item-continuationLaTeX-indent-level

เมื่อเกิดขึ้นการเชื่อมโยงและการตั้งค่าLaTeX-indent-level-item-continuationเป็น 8 จะให้ผลลัพธ์ที่น่าพึงพอใจ ฉันอาจเปลี่ยนเป็น:

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

เมื่อเช้านี้ฉันใช้เวลาดูเล็กน้อย แต่จำเป็นต้องมีสมาธิกับเรื่องอื่น ฉันคิดว่าบรรทัด 3060 ของlatex.el- คือ(+ (LaTeX-indent-calculate-last force-type) LaTeX-item-indent))- มีส่วนช่วยในระดับของการเยื้อง
กฎหมาย

ฉันเพิ่งจะลองขับดูและดูเหมือนจะทำได้ดีมาก - ขอบคุณ! หากเป็นไปได้คุณสามารถแทนที่ฮาร์ดโค้ด 2 วินาทีด้วยLaTeX-indent-levelตัวแปรใดตัวแปรหนึ่งLateX-item-continuation-indentหรือ?
sykora

@sykora: คำแนะนำที่ดี! Incorporated
แดน

ในฐานะที่เป็น TeXer บ่อยครั้งสิ่งนี้ยอดเยี่ยมมาก มันบั๊กฉันจริงๆ! ขอบคุณ :)
Sean Allred

คุณกำลังใช้โหมดการตัดคำอะไรอยู่ที่นี่ ฉันได้รับทุกบรรทัดที่เหลือ ดูi61.tinypic.com/eq8n7b.jpg
NVaughan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.