Comment masquer / afficher la section LaTeX comme le fait le mode org avec les titres?

29

Lors de la modification de fichiers org, je trouve extrêmement pratique la façon dont vous pouvez masquer et afficher les titres et leur contenu en appuyant simplement TABsur le titre.

Par exemple, considérez le tampon suivant

* Headline 1
Some text here.

* Headline 2
Some more text here.

Si je place le point sur le premier *et frappe TAB, j'obtiendrai ce qui suit:

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

Existe-t-il un moyen d'y parvenir avec les sections LaTeX?
c'est-à-dire, comment puis-je cacher et afficher le contenu d'une section / chapitre / etc LaTeX, tout en gardant le titre visible? J'utilise AucTeX pour le mode LaTeX mais je n'ai rien trouvé qui semble remplir ce rôle.

Malabarba
la source
Voir Org en dehors d'Org: orgmode.org/worg/org-tutorials/org-outside-org.html et le mode Outshine
mankoff

Réponses:

13

NB: une grande partie de ce texte provient d'une réponse à une question qui s'est avérée être un double de cette question . Certains éléments sont suffisamment différents pour qu'il paraisse utile de les ajouter à cette question.

Le mode contour et les fonctions de pliage AUCTeX sont deux bêtes différentes qui sont censées faire globalement la même chose: masquer et afficher les parties sélectionnées du tampon.

outline-minor-mode

Un élément clé de reconnaître lors de l' utilisation outline-minor-modeest qu'il a un préfixe différent que outline-mode(soit le mode majeur ) - précisément pour éviter les conflits clés avec des clés de mouvement, etc. Ce défaut préfixe aux maladroits à type C-c @(bien que vous pouvez changer cela en personnalisant outline-minor-mode-prefix). Toutes les liaisons de touches répertoriées sur ce noeud du manuel devraient toujours fonctionner, mais avec la torsion que vous remplacez le préfixe de mode majeur de C-cpar le préfixe de mode mineur de C-c @. Par conséquent, C-c @ C-cs'exécute hide-entry, C-c @ C-es'exécute show-entry, etc.

Pour utiliser ces fonctionnalités, vous devez activer outline-minor-mode. Le moyen le plus simple est avec un hook de mode:

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

en changeant outline-minor-mode-prefix

Ce devrait être une chose simple à changer outline-minor-mode-prefix(il était de retour dans la journée). Mais ce n'est pas. Ce que c'est drôle!

La docstring donne maintenant une note cryptique qui:

Touche de préfixe à utiliser pour les commandes Outline en mode mineur Outline. La valeur de cette variable est vérifiée dans le cadre du chargement du mode Plan. Après cela, la modification de la clé de préfixe nécessite de manipuler des images clés.

Oui, très utile. Curieusement, même customizene définit pas cette variable à temps pour éviter de "manipuler les keymaps" (bien qu'elle soit définie avec defcustomdans le code source). La solution pratique: définissez cette variable dans votre fichier init avant de charger outlineou tout autre élément construit à partir de celui-ci (par exemple, org-mode).

Vous pouvez, par exemple, vouloir que le préfixe soit C-o(ce qui signifie que vous perdez open-line, mais vous pouvez le relier si vous le voulez vraiment). Mettre ce qui suit au début de votre fichier init fera l'affaire:

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

Maintenant, vous devriez pouvoir accéder à toutes les fonctionnalités du mode plan à l'aide du C-opréfixe - C-o C-cappeler hide-entry, C-o C-eappeler show-entry, etc.

ajout de nouveaux titres de plan

En prime, vous pouvez également personnaliser les en-têtes de contour pouvant être pliés et à quels niveaux. Par exemple, j'aime pouvoir créer des «faux» en-têtes de section pour cacher le texte qui n'a pas de véritable en-tête LaTeX, mais qui est logiquement conservé au même niveau du document. Avec le code suivant, vous pouvez utiliser:

%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

Et vous pourrez manipuler la fausse section comme n'importe quelle autre, mais LaTeX l'ignorera lorsque vous compilerez le document:

;; 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-magicétend les modes de contour pour utiliser le org-modemasquage / affichage comme avec la touche de tabulation magique. En d'autres termes, vous pouvez probablement l'ajouter à votre flux de travail et faire en sorte que vos documents LaTeX se comportent davantage comme des orgdocuments. (Je ne l'utilise pas moi-même, je ne peux donc pas commenter la fonctionnalité.)

Installations de pliage AUCTeX

Les installations de pliage AUCTeX fonctionnent sur des environnements et ce qu'ils appellent (de manière confuse) des macros , plutôt que des sections. Pour utiliser cette fonctionnalité, vous devrez l'activer avec TeX-fold-mode.

Par exemple, l' itemize environnement , déplié, pourrait ressembler à:

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

L'appel TeX-fold-env(par défaut:) C-c C-o C-eà l'intérieur de l'environnement le replie pour ressembler à:

[itemize]

Placer le curseur quelque part à l'intérieur [itemize]le développera temporairement à nouveau pendant que vous le modifiez, puis se repliera jusqu'à ce [itemize]que vous déplaciez le curseur hors de l'environnement.

Par une «macro», AUCTeX signifie des choses comme \footnote{...}. Par conséquent, appeler TeX-fold-macro(par défaut:) C-c C-o C-mlorsque l'intérieur \footnote{This is a footnote}le repliera [f]; il se développera et se contractera de manière analogue à ce qui se passe avec les environnements.

Vous pouvez utiliser les deux fonctions outline-minor-modede pliage et AUCTeX ensemble dans le même document: ils font des choses différentes sur différentes parties de celui-ci.

Dan
la source
1
Juste pour mémoire, le nom "macro" n'est pas une bizarrerie AUCTeX, c'est le nom de ces "choses" dans * TeX. C'est le même concept que les macros dans n'importe quel langage d'extension de macro, y compris les macros elisp. À propos de votre dernière phrase, j'ajouterais que cela fonctionne principalement parce qu'ils utilisent des raccourcis clavier différents. Il y a des tentatives d'unifier les deux ( github.com/mlf176f2/fold-dwim-org ) mais elles ne sont pas encore entièrement fonctionnelles.
T. Verron
Il convient également de noter que les sections LaTeX ressemblent beaucoup aux en-têtes d'organisation et que les environnements LaTeX sont similaires aux blocs d'organisation. Org se plie à la fois avec TAB, et cela pourrait probablement être fait pour fonctionner avec AUCTeX. Plier des macros avec TABserait gênant à mon avis (cela reviendrait à plier des spécifications de démarques en ligne ...).
T. Verron
Et dernier point, outline-minor-modedevrait fonctionner immédiatement avec AUCTeX: gnu.org/software/auctex/manual/auctex/Outline.html . Autrement dit, jusqu'à ce que vous commenciez à définir de nouvelles macros de titre dans LaTeX ...
T. Verron
26

Ce que vous voulez s'appelle le pliage, et il y a 2 façons de le faire.

Mode contour mineur

Il s'agit d'un mode mineur intégré qui est exactement ce que le mode organisation utilise pour masquer et afficher ses titres. Vous pouvez vous assurer qu'il est toujours activé latex-modeavec

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

Les raccourcis clavier qu'il définit sont un peu difficiles à utiliser, vous pouvez donc en changer certains.

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 est un mode mineur disponible sur Melpa et Melpa-stable. Vous pouvez l'installer avec M-x package-install RET latex-extraet l'activer avec

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

Il ajoute une série de commodités latex-mode, dont l'une est le pliage des sections. latex-extrautilise également outline-minor-modedans les coulisses, mais l'avantage est qu'il émule le comportement du mode org de plus près (mais pas de manière identique).

De son readme :

Semblable à la façon dont le mode organisation cache et affiche les sous-arbres, si vous appuyez sur TAB sur un en-tête de section, latex-extra masquera le contenu de cette section pour vous. Appuyez deux fois sur l'onglet pour l'agrandir à nouveau.
Cela n'interférera pas avec les autres raccourcis clavier que vous avez définis pour TAB , tels que le yasnippet ou la saisie semi-automatique.

Shift-TAB fera de même pour tout le tampon.

Bien sûr, il en va de même pour les chapitres, sous-sections, etc.

Malabarba
la source