¿Cómo hacer que emacs alinee e sangría una entrada bibtex?

7

Quiero bibtex-modealinear y sangrar correctamente los campos. Copié una entrada bibtex para el siguiente artículo en Emacs: (Fuente del artículo aquí)

Pero, con un simple pegado, la alineación se pierde en Emacs y la sangría está en mal estado:

La TABclave no funciona para alinear o sangrar la entrada. ¿Cómo resolver este problema?

Viesturs
fuente
1
Sin relación con su pregunta, considere usar el bibslurppaquete, le permite recuperar entradas BibTeX del Sistema de Datos de Astrofísica SAO / NASA dentro del propio Emacs.
giordano
1
No puedo reproducir ese comportamiento. ¿Qué sucede si inicia Emacs con el -Qinterruptor?
Erik
Tengo el mismo comportamiento cuando empiezo con un -Qinterruptor
Viesturs

Respuestas:

11

Cuando el cursor esté en algún lugar de la entrada, ejecute el comando bibtex-fill-entry(vinculado a C-c C-q), que alineará los campos. También es posible que desee establecer la variable bibtex-align-at-equal-signen un valor no nulo para cambiar los detalles de la alineación.

Dan
fuente
3

Tuve un problema similar cuando utilicé el paquete smartparens en modo bibtex, donde se insertaron cantidades vergonzosas de espacios. Por alguna razón desconocida, bibtex-mode establece la fill-prefixvariable en una cadena que contiene 18 espacios. (setq fill-prefix nil)en el bibtex-mode-hooksolucionado el problema en mi caso.

Jonatan Lindén
fuente
2

Como mencionó @ JonatanLindén, fill-prefixse establece en una cadena que contiene 18 espacios. Esto se debe a que bibtex-clean-entryse usa fill-prefixpara alinear el texto continuo después del signo igual. Establecer fill-prefixen ""puede resolver el problema de sangría. Pero para tener una mejor alineación al formatear la entrada, puede aconsejar bibtex-clean-entryconfigurar temporalmente fill-prefix.

(defun bibtex-mode-setup ()
  (setq-local fill-prefix ""))
(add-hook 'bibtex-mode-hook #'bibtex-mode-setup)

(defun bibtex-reset-fill-prefix (orig-func &rest args)
  (let ((fill-prefix (make-string (1+ bibtex-text-indentation) ? )))
    (apply orig-func args)))
(advice-add 'bibtex-clean-entry :around #'bibtex-reset-fill-prefix)
stackunderflow
fuente
1

Por lo general, usaría el align-regexpcomando (o el aligncomando si lo bibtex-modeadmite). Pero eso no te ayudará con la sangría rota.

Erik
fuente