Як відрізати елементи в середовищах деталізації LaTeX / 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 Horn . Це дає правильний відступ, в тому числі для вкладених середовищ. Він працює для 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)))

Я не можу не відчути, що є дуже проста настройка, якої я пропускаю, і це версія Руба Голдберга . Все-таки це працює, і він дряпає свербіж, який у мене був роками .

EDIT: у відповідь на коментар @ sykora, я переглянув функцію зняття жорсткого кодування. \items тепер є LaTeX-indent-levelпробілами. Рядки продовження можуть приймати значення нової змінної, LaTeX-indent-level-item-continuationабо, якщо ви не хочете зв'язувати останню, вдвічі більше значення LaTeX-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: гарна пропозиція! Включений.
Дан

Як часто TeXer, це фантастично . Це насправді завжди клопіть мене! Дякую :)
Шон Аллред

Який режим обгортання ви тут використовуєте? Я змушую залишити кожен рядок лівим. Дивіться i61.tinypic.com/eq8n7b.jpg
NVaughan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.