Как сделать отступ в элементах LaTeX / AUCTeX?

17

Q: как я могу получить "правильные" отступы в 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строки два пробела, и
  • строки продолжения еще два пробела с отступом?

(Примечание, относящееся к такому потоку .)

Дэн
источник
2
Я возился с этой проблемой в течение нескольких часов; Ваш первый метод работает, если вы также установите LaTeX-indent-level4. Элементы будут иметь отступ с 4 - 2 = 2, а строки продолжения будут с отступом 4 = 2 + 2. Однако это означает, что любая другая среда в файле будет иметь отступ 4 (а не 2), что может быть или не быть желательным. Я бы предпочел, чтобы они были с отступом в 2, вот где я застрял.
sykora
Вы пытались настроить LaTeX-indent-environment-listи добавить пользовательскую функцию для отступа? Функция LaTeX-indent-tabularможет обеспечить разумную отправную точку (или, по крайней мере, разумный пример настраиваемого отступа в среде). Я просто наткнулся на эту переменную / функцию, поэтому у меня не было возможности самому разобраться в этом.
зрота

Ответы:

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

Я не могу не чувствовать, что есть очень простая настройка, которую мне не хватает, и это версия Rube Goldberg . Тем не менее, это работает, и это царапает зуд, который у меня был в течение многих лет .

РЕДАКТИРОВАТЬ: в ответ на комментарий @ 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: хорошее предложение! Incorporated.
Дан
Как частый TeXer, это фантастика . Это действительно всегда беспокоило меня! Спасибо :)
Шон Оллред
Какой режим упаковки вы используете здесь? Я получаю каждую строчку влево. См. I61.tinypic.com/eq8n7b.jpg
NVaughan