indentation – ¿Cómo sangrar elementos en entornos detallados LaTeX / AUCTeX?

Pregunta:

Q: ¿Cómo puedo obtener "adecuada" sangría de látex itemize los entornos en auctex ?

Aquí es donde me gustaría estar con un item en un entorno itemize :

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

Esto es lo que me gustaría / esperaría 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 variable LaTeX-item-indent , que por defecto es -2 . Con este valor predeterminado, consigo el comportamiento indeseable de la \item no ser una sangría, pero 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-indent en 0 me da la sangría deseada en la línea \item (dos espacios adentro), pero no me da la segunda mitad del comportamiento deseado de las líneas de continuación compensadas por 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 línea \item dos espacios, y
  • líneas de continuación ¿dos espacios adicionales con sangría?

(Tenga en cuenta el hilo SO relacionado ).

Respuesta:

El comentario de @ sykora sobre (setq LaTeX-item-indent -2 LaTeX-indent-level 4) está casi ahí, pero significa que también nos extendemos 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 , enumerate y description entornos, 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 me falta una configuración muy simple y esta es la versión de Rube Goldberg . Aún así, funciona y me rasca la 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. \item s ahora están sangrados en espacios de LaTeX-indent-level sangría LaTeX-indent-level . Las líneas de continuación pueden tomar el valor de una nueva variable, LaTeX-indent-level-item-continuation o, si no desea vincular este último, el doble del valor de LaTeX-indent-level .

Da la casualidad de que enlazar y establecer LaTeX-indent-level-item-continuation en 8 da resultados estéticamente agradables. Incluso podría cambiar a él:

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

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım