¿Cómo sangrar elementos en entornos LaTeX / AUCTeX detallar?

17

P: ¿cómo puedo obtener una sangría "adecuada" de los itemizeentornos LaTeX auctex?

Aquí es donde me gustaría estar con un itemen un itemizeentorno:

  • \item la línea tiene dos espacios sangrados en relación con el comienzo del entorno
  • las líneas de continuación en el elemento tienen sangría dos espacios adicionales en relación con la \itemlínea

Esto es lo que me gustaría / esperar ver:

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

Se puede ajustar la sangría inicial del elemento con la LaTeX-item-indentvariable, que por defecto es -2. Con este valor predeterminado, consigo el comportamiento indeseable de la \itemque no se sangría, pero yo hago obtener el comportamiento deseado de las líneas de continuación ser compensado por un dos espacios adicionales:

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

Establecer LaTeX-item-indenten 0me da la sangría deseada en la \itemlínea (dos espacios adentro), pero no me da la segunda mitad del comportamiento deseado de las líneas de continuación que se compensan con dos espacios adicionales:

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

Entonces: ¿cómo se obtienen los dos comportamientos deseados?

  • sangría inicial de la \itemlínea dos espacios, y
  • líneas de continuación dos espacios adicionales sangrados?

(Observe el hilo SO relacionado ).

Dan
fuente
2
He estado jugando con este problema exacto durante un par de horas; su primer método funciona si también lo establece LaTeX-indent-levelen 4. Los elementos se sangrarán a 4 - 2 = 2 y las líneas de continuación se sangrarán a 4 = 2 + 2. Sin embargo, esto significa que todos los demás entornos del archivo estarán sangrados a 4 (y no 2), que puede o no ser deseable. Prefiero que tengan sangría en 2 ellos mismos, que es donde estoy atascado.
sykora
¿Intentó personalizar LaTeX-indent-environment-listy agregar una función personalizada para la sangría? La función LaTeX-indent-tabularpuede proporcionar un punto de partida razonable (o al menos un ejemplo razonable de sangría personalizada dentro de un entorno). Me topé con esta variable / función, por lo que no he tenido la oportunidad de analizarla yo mismo.
zroth

Respuestas:

14

El comentario de @ sykora (setq LaTeX-item-indent -2 LaTeX-indent-level 4)casi está ahí, pero significa que también nos contagiamos a todos los demás entornos. Entonces, por ejemplo, también tendríamos:

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

La siguiente función se basa en un fragmento de código antiguo (¿y aparentemente roto?) De Tassilo Horn . Obtiene la sangría correcta, incluso para entornos anidados. Funciona para itemize, enumeratey descriptionentornos, para arrancar:

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

No puedo evitar sentir que hay una configuración muy simple que me falta y esta es la versión de Rube Goldberg . Aún así, funciona y rasca una picazón que he tenido durante años .

EDITAR: en respuesta al comentario de @ sykora, he revisado la función para eliminar la codificación rígida. \itemLos s ahora son LaTeX-indent-levelespacios sangrados . Las líneas de continuación pueden tomar el valor de una nueva variable LaTeX-indent-level-item-continuationo, si no desea vincular esta última, el doble del valor de LaTeX-indent-level.

Como sucede, la unión y el ajuste LaTeX-indent-level-item-continuationa 8 dan resultados estéticamente agradables. Incluso podría cambiarlo:

\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}
Dan
fuente
Pasé un poco de tiempo mirándolo esta mañana, pero necesitaba concentrarme en otra cosa. Creo que la línea 3060 de latex.el, es decir, (+ (LaTeX-indent-calculate-last force-type) LaTeX-item-indent))está contribuyendo al nivel de sangría.
abogados el
Lo acabo de probar y parece que funciona bastante bien, ¡gracias! Si es posible, podría reemplazar los 2 codificados con una LaTeX-indent-levelo una nueva variable - LateX-item-continuation-indent?
sykora
@sykora: buena sugerencia! Incorporado.
Dan
Como un TeXer frecuente, esto es fantástico . ¡Realmente siempre me ha molestado! Gracias :)
Sean Allred
¿Qué modo de envoltura estás usando aquí? Tengo cada línea enjuagada a la izquierda. Ver i61.tinypic.com/eq8n7b.jpg
NVaughan