如何在LaTeX / AUCTeX分项环境中缩进项目?


17

问:如何在LaTeX itemize环境中获得“正确的”缩进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-indent0获得\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 2014年

您是否尝试LaTeX-indent-environment-list过为缩进进行自定义和添加自定义功能?该功能LaTeX-indent-tabular可能会提供一个合理的起点(或至少一个环境中自定义缩进的合理示例)。我只是偶然发现了这个变量/函数,所以我自己没有机会研究它。
zroth

Answers:


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的一个旧的(似乎已损坏的?)代码片段的基础上。它可以获得正确的缩进,包括用于嵌套环境的缩进。它适用于itemizeenumeratedescription环境,以启动:

(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))-有助于缩进程度。
法律列表

我只是将其用于测试,它的表现似乎还不错-谢谢!如果可能的话,您可以用一个LaTeX-indent-level或一个新变量替换硬编码的2s- LateX-item-continuation-indent
sykora 2014年

@sykora:好建议!成立。

作为频繁的TeXer,这真是太棒了。真的总是烦我!谢谢:)
肖恩·阿雷德

您在这里使用哪种包装模式?我把每一行都冲洗掉了。参见i61.tinypic.com/eq8n7b.jpg
NVaughan 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.