¿Cómo puedo ocultar / mostrar la sección LaTeX como lo hace el modo org con los titulares?

29

Al editar archivos de organización, me resulta extremadamente conveniente cómo puedes ocultar y mostrar los titulares y su contenido simplemente presionando TABel título.

Por ejemplo, considere el siguiente búfer

* Headline 1
Some text here.

* Headline 2
Some more text here.

Si coloco el punto en el primero *y presiono TAB, obtendré lo siguiente:

* Headline 1...
* Headline 2
Some more text here.

¿Hay alguna manera de lograr eso con las secciones de LaTeX?
es decir, ¿cómo puedo ocultar y mostrar el contenido de una sección / capítulo / etc de LaTeX, manteniendo el título visible? Estoy usando AucTeX para el modo LaTeX pero no he encontrado nada que parezca cumplir este rol.

Malabarba
fuente
Vea Org fuera de Org: orgmode.org/worg/org-tutorials/org-outside-org.html y modo outshine
mankoff

Respuestas:

13

NB: gran parte de este texto proviene de una respuesta a una pregunta que resultó ser un duplicado de esta pregunta . Parte del material es lo suficientemente diferente como para que valga la pena agregarlo a esta pregunta.

El modo de esquema y las instalaciones de plegado de AUCTeX son dos bestias diferentes que están destinadas a hacer lo mismo en términos generales: ocultar y mostrar partes seleccionadas del búfer.

outline-minor-mode

Un elemento clave para reconocer cuando se usa outline-minor-modees que tiene una clave de prefijo diferente a outline-mode(es decir, el modo principal ), precisamente para evitar conflictos de teclas con teclas de movimiento, etc. Ese prefijo tiene el valor predeterminado de torpe al tipo C-c @(aunque puede cambiar eso personalizando outline-minor-mode-prefix). Todas las combinaciones de teclas enumeradas en este nodo del manual aún deberían funcionar, pero con el giro que reemplaza el prefijo de modo mayor de C-ccon el prefijo de modo menor de C-c @. Por lo tanto, C-c @ C-ccorre hide-entry, C-c @ C-ecorre show-entry, etc.

Para usar estas instalaciones, debe habilitarlo outline-minor-mode. La forma más simple es con un gancho de modo:

(add-hook 'LaTeX-mode-hook #'outline-minor-mode)

cambiando outline-minor-mode-prefix

Se debe ser una cosa simple de cambio outline-minor-mode-prefix(que solía ser en su día). Pero no lo es. ¡Qué divertido!

La cadena de documentos ahora da una nota críptica que:

Clave de prefijo para usar para los comandos de esquema en modo secundario de esquema. El valor de esta variable se verifica como parte de la carga del modo Esquema. Después de eso, cambiar la clave de prefijo requiere manipular mapas de teclas.

Si, muy útil. Por extraño que parezca, incluso customizeno establece esta variable a tiempo para evitar "manipular mapas de teclas" (a pesar de estar definido defcustomen el código fuente). La solución práctica: establezca esta variable en su archivo de inicio antes de cargar outlineo cualquier otra cosa que se base en él (por ejemplo, org-mode)

Es posible que, por ejemplo, desee que el prefijo sea C-o(lo que significa que está perdiendo open-line, pero puede volver a vincularlo si realmente lo desea). Poner lo siguiente temprano en su archivo init hará el truco:

(global-unset-key "\C-o")
(setq outline-minor-mode-prefix "\C-o")

Ahora, debería poder acceder a todas las funciones del modo esquema utilizando el C-oprefijo: C-o C-cllamar hide-entry, C-o C-ellamar show-entry, etc.

Agregar nuevos encabezados de esquema

Como beneficio adicional, también puede personalizar qué encabezados de esquema se pueden plegar y en qué niveles. Por ejemplo, me gusta poder hacer encabezados de sección "falsos" para ocultar el texto que no tiene un encabezado LaTeX verdadero, pero lógicamente se mantiene en el mismo nivel del documento. Con el siguiente código, puede usar:

%section{a fake section}

Blah blah blah blah blah, LaTeX doesn't recognize me as a section...

\section{a real section}

Blah blah blah blah blah, LaTeX treats me as a real section

Y podrá manipular la sección falsa como cualquier otra, pero LaTeX la ignorará cuando compile el documento:

;; extra outline headers 
(setq TeX-outline-extra
      '(("%chapter" 1)
        ("%section" 2)
        ("%subsection" 3)
        ("%subsubsection" 4)
        ("%paragraph" 5)))

;; add font locking to the headers
(font-lock-add-keywords
 'latex-mode
 '(("^%\\(chapter\\|\\(sub\\|subsub\\)?section\\|paragraph\\)"
    0 'font-lock-keyword-face t)
   ("^%chapter{\\(.*\\)}"       1 'font-latex-sectioning-1-face t)
   ("^%section{\\(.*\\)}"       1 'font-latex-sectioning-2-face t)
   ("^%subsection{\\(.*\\)}"    1 'font-latex-sectioning-3-face t)
   ("^%subsubsection{\\(.*\\)}" 1 'font-latex-sectioning-4-face t)
   ("^%paragraph{\\(.*\\)}"     1 'font-latex-sectioning-5-face t)))

outline-magic

outline-magicextiende los modos de esquema para usar org-modecomo ocultar / mostrar con la tecla de tabulación mágica. En otras palabras, probablemente pueda agregar esto a su flujo de trabajo y hacer que sus documentos LaTeX se comporten más como orgdocumentos. (No lo uso yo mismo, así que no puedo comentar sobre la funcionalidad).

Instalaciones plegables AUCTeX

Las instalaciones de plegado de AUCTeX funcionan en entornos y lo que (confusamente) llaman macros , en lugar de secciones. Para usar esta funcionalidad, deberá habilitarla con TeX-fold-mode.

Por ejemplo, el itemize entorno , desplegado, podría verse así:

\begin{itemize}
  \item An item
  \item Another item
\end{itemize}

Las llamadas TeX-fold-env(por defecto:) C-c C-o C-edentro del entorno lo pliegan para que se vea así:

[itemize]

Colocar el cursor en algún lugar adentro [itemize]lo expandirá temporalmente nuevamente mientras lo edita, y luego se plegará nuevamente [itemize]cuando mueva el cursor fuera del entorno.

Por "macro", AUCTeX significa cosas como \footnote{...}. Por lo tanto, llamar TeX-fold-macro(por defecto:) C-c C-o C-mcuando \footnote{This is a footnote}esté dentro lo doblará hasta [f]; se expandirá y contraerá de manera análoga a lo que sucede con los entornos.

Puede usar las dos outline-minor-modeinstalaciones de plegado de AUCTeX juntas en el mismo documento: hacen diferentes cosas en diferentes partes del mismo.

Dan
fuente
1
Solo para el registro, el nombre "macro" no es una rareza de AUCTeX, es el nombre de estas "cosas" en * TeX. Es el mismo concepto que las macros en cualquier lenguaje de macroexpansión, incluidas las macros de elisp. Sobre su última oración, agregaría que funciona principalmente porque usan diferentes combinaciones de teclas. Hay intentos de unificar ambos ( github.com/mlf176f2/fold-dwim-org ) pero aún no son completamente funcionales.
T. Verron
También vale la pena señalar que las secciones de LaTeX son muy parecidas a los encabezados de organización y los entornos de LaTeX son muy parecidos a los bloques de organización. Org se pliega con ambos TAB, y esto probablemente podría funcionar para AUCTeX. Plegar macros con TABsería molesto en mi opinión (sería similar a plegar especificaciones de rebajas en línea ...).
T. Verron
Y último punto, outline-minor-modedebería funcionar de forma inmediata con AUCTeX: gnu.org/software/auctex/manual/auctex/Outline.html . Es decir, hasta que comience a definir nuevas macros de encabezado en LaTeX ...
T. Verron
26

Lo que quieres se llama plegar, y hay 2 formas de hacerlo.

Esquema-modo menor

Este es un modo menor incorporado que es exactamente lo que utiliza el modo org para ocultar y mostrar sus titulares. Puede asegurarse de que siempre esté activado latex-modecon

(add-hook 'LaTeX-mode-hook #'outline-minor-mode)

Las combinaciones de teclas que define son un poco difíciles de usar, por lo que es posible que desee cambiar algunas de ellas.

C-c @ C-a       show-all
C-c @ C-c       hide-entry
C-c @ C-d       hide-subtree
C-c @ C-e       show-entry
C-c @ TAB       show-children
C-c @ C-k       show-branches
C-c @ C-l       hide-leaves
C-c @ C-o       hide-other
C-c @ C-q       hide-sublevels
C-c @ C-s       show-subtree
C-c @ C-t       hide-body

Latex-extra

latex-extra es un modo menor disponible en Melpa y Melpa-stable. Puede instalarlo M-x package-install RET latex-extray encenderlo con

(add-hook 'LaTeX-mode-hook #'latex-extra-mode)

Agrega una serie de comodidades latex-mode, una de ellas es el plegado de secciones. latex-extratambién se usa outline-minor-modedetrás de escena, pero la ventaja es que emula el comportamiento del modo org más de cerca (aunque no de forma idéntica).

De su léame :

Al igual que el modo org oculta y muestra subárboles, si presiona TAB en un encabezado de sección latex-extra ocultará el contenido de esa sección para usted. Al presionar la pestaña dos veces se expandirá nuevamente.
Esto no interferirá con lo que sea con otras combinaciones de teclas que haya configurado para TAB , como yasnippet o autocompletado.

Shift-TAB hará lo mismo para todo el búfer.

Por supuesto, lo mismo aplica para capítulos, subsecciones, etc.

Malabarba
fuente