Como posso ocultar / exibir a seção LaTeX da mesma forma que o modo organizacional faz com as manchetes?

29

Ao editar arquivos organizacionais, acho extremamente conveniente como você pode ocultar e exibir manchetes e seu conteúdo apenas pressionando TABa manchete.

Por exemplo, considere o seguinte buffer

* Headline 1
Some text here.

* Headline 2
Some more text here.

Se eu colocar o ponto no primeiro *e pressionar TAB, obterá o seguinte:

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

Existe uma maneira de conseguir isso com as seções do LaTeX?
ou seja, como posso ocultar e exibir o conteúdo de uma seção / capítulo / etc do LaTeX, mantendo o título visível? Estou usando o AucTeX no modo LaTeX, mas não encontrei nada que pareça desempenhar esse papel.

Malabarba
fonte

Respostas:

13

Nota: grande parte deste texto veio de uma resposta a uma pergunta que acabou sendo uma duplicata dessa pergunta . Parte do material é suficientemente diferente que parecia valer a pena adicioná-lo a essa pergunta.

O modo de estrutura de tópicos e as instalações dobráveis do AUCTeX são duas bestas diferentes que devem fazer amplamente a mesma coisa: ocultar e mostrar partes selecionadas do buffer.

outline-minor-mode

Um elemento-chave para reconhecer quando se usa outline-minor-modeé que ele tem uma tecla de prefixo diferente outline-mode(ou seja, o modo maior ) -, precisamente para evitar conflitos de chave com chaves de movimento, etc, que padrões de prefixo para o estranho-a-tipo C-c @(embora você pode mude isso personalizando outline-minor-mode-prefix). Todas as combinações de teclas listadas neste nó do manual ainda devem funcionar, mas com o toque que você substitui o prefixo do modo principalC-c com o prefixo do modo menor de C-c @. Portanto, C-c @ C-ccorre hide-entry, C-c @ C-ecorre show-entrye assim por diante.

Para usar esses recursos, você precisa habilitar outline-minor-mode. A maneira mais simples é com um gancho de modo:

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

mudando outline-minor-mode-prefix

Ele deve ser uma coisa simples de mudança outline-minor-mode-prefix(que costumava ser de volta ao dia). Mas isso não. Que divertido!

A docstring agora fornece uma nota enigmática de que:

Tecla de prefixo a ser usada nos comandos Estrutura de tópicos no modo secundário Estrutura de tópicos. O valor dessa variável é verificado como parte do carregamento do modo Esboço. Depois disso, alterar a chave de prefixo requer manipulação de mapas de teclas.

Sim, muito útil. Curiosamente, nem mesmo customizedefine essa variável a tempo de evitar "manipular mapas de teclas" (apesar de ser definida defcustomno código-fonte). A solução prática: defina essa variável no seu arquivo init antes de carregar outlineou qualquer outra coisa criada a partir dele (por exemplo, org-mode).

Você pode, por exemplo, querer que o prefixo seja C-o(o que significa que você está perdendo open-line, mas pode religá-lo, se realmente quiser). Colocar o seguinte no início do arquivo init fará o truque:

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

Agora, você deve conseguir acessar toda a funcionalidade do modo de estrutura de tópicos usando o C-oprefixo - C-o C-cpara ligar hide-entry, C-o C-eligar show-entrye assim por diante.

adicionando novos títulos de estrutura de tópicos

Como um bônus adicional, você também pode personalizar quais cabeçalhos de estrutura de tópicos podem ser dobrados e em que níveis. Eu, por exemplo, gostaria de poder criar cabeçalhos de seção "falsos" para ocultar o texto que não possui um cabeçalho LaTeX verdadeiro, mas logicamente é mantido no mesmo nível do documento. Com o seguinte código, você pode 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

E você poderá manipular a seção falsa como qualquer outra, mas o LaTeX a ignorará quando você compilar o 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-magicestende os modos de estrutura de tópicos para usar org-modeocultação / exibição semelhantes com a tecla tab mágica. Em outras palavras, você provavelmente pode adicionar isso ao seu fluxo de trabalho e fazer com que seus documentos LaTeX se comportem mais como orgdocumentos. (Eu não o uso, não posso comentar sobre a funcionalidade.)

Instalações dobráveis ​​AUCTeX

As instalações dobráveis ​​do AUCTeX funcionam em ambientes e no que eles (confusamente) chamam de macros , em vez de seções. Para usar essa funcionalidade, será necessário ativá-la TeX-fold-mode.

Por exemplo, o itemize ambiente , desdobrado, pode se parecer com:

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

A chamada TeX-fold-env(padrão :) C-c C-o C-edentro do ambiente é dobrada para se parecer com:

[itemize]

Colocar o cursor em algum lugar interno [itemize]o expandirá temporariamente novamente enquanto você o edita e depois se dobrará novamente para [itemize]quando você mover o cursor para fora do ambiente.

Por uma "macro", o AUCTeX significa coisas assim \footnote{...}. Portanto, chamar TeX-fold-macro(padrão C-c C-o C-m:) quando estiver dentro \footnote{This is a footnote}dobra-o até [f]; ele irá expandir e contrair de maneira análoga ao que acontece com os ambientes.

Você pode usar as outline-minor-modeinstalações dobráveis ​​e as do AUCTeX juntas no mesmo documento: elas fazem coisas diferentes em partes diferentes.

Dan
fonte
1
Apenas para constar, o nome "macro" não é uma raridade do AUCTeX, é o nome para essas "coisas" no * TeX. É o mesmo conceito que macros em qualquer linguagem de expansão de macros, incluindo macros elisp. Sobre sua última frase, eu acrescentaria que ela funciona principalmente porque eles usam combinações de teclas diferentes. Existem tentativas de unificar os dois ( github.com/mlf176f2/fold-dwim-org ), mas ainda não estão totalmente funcionais.
T. Verron
Também digno de nota é que as seções do LaTeX são muito parecidas com os títulos das organizações e os ambientes LaTeX são muito parecidos com os blocos organizacionais. A organização se dobra com ambos TAB, e isso provavelmente poderia funcionar para o AUCTeX. Dobrar macros com TABseria irritante na minha opinião (seria semelhante a dobrar especificações de descontos inline ...).
T. Verron
E o último ponto, outline-minor-modedeve funcionar imediatamente com o AUCTeX: gnu.org/software/auctex/manual/auctex/Outline.html . Isto é, até você começar a definir novas macros título em LaTeX ...
T. Verron
26

O que você quer se chama dobrar e há duas maneiras de fazer isso.

Modo secundário de estrutura de tópicos

Este é um modo secundário integrado que é exatamente o que o modo organizacional usa para ocultar e exibir suas manchetes. Você pode garantir que ele esteja sempre ativado latex-modecom

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

As teclas de atalho que define são um pouco difíceis de usar, portanto, você pode alterar algumas delas.

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

Látex-extra

O latex-extra é um modo secundário disponível no Melpa e no Melpa-stable. Você pode instalá-lo M-x package-install RET latex-extrae ativá-lo com

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

Ele adiciona uma série de conveniências latex-mode, uma delas é a seção dobrável. latex-extratambém usa outline-minor-modenos bastidores, mas a vantagem é que emula o comportamento do modo organizacional mais de perto (embora não de forma idêntica).

Do seu leia - me :

Semelhante a como o modo organizacional oculta e exibe subárvores, se você pressionar TAB em um cabeçalho de seção, o latex-extra ocultará o conteúdo dessa seção para você. Pressionar a guia duas vezes irá expandi-la novamente.
Isso não interferirá no que quer que seja com outras combinações de teclas que você definiu para o TAB , como yasnippet ou preenchimento automático.

Shift-TAB fará o mesmo para todo o buffer.

Obviamente, o mesmo vale para capítulos, subseções etc.

Malabarba
fonte