Jak mogę ukryć / wyświetlić sekcję LaTeX, podobnie jak tryb org z nagłówkami?

29

Podczas edytowania plików org uważam, że niezwykle wygodne jest ukrywanie i wyświetlanie nagłówków oraz ich zawartości, po prostu naciskając TABna nagłówek.

Weźmy na przykład następujący bufor

* Headline 1
Some text here.

* Headline 2
Some more text here.

Jeśli położę punkt na pierwszym *i uderzę TAB, otrzymam następujące:

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

Czy można to osiągnąć za pomocą sekcji LaTeX?
tj. jak mogę ukryć i wyświetlić zawartość sekcji / rozdziału / etc LaTeXa, jednocześnie zachowując tytuł widoczny? Używam AucTeX do trybu LaTeX, ale nie znalazłem niczego, co zdawałoby się wypełniać tę rolę.

Malabarba
źródło

Odpowiedzi:

13

Uwaga: duża część tego tekstu pochodzi z odpowiedzi na pytanie, które okazało się być duplikatem tego pytania . Niektóre materiały są na tyle różne, że warto dodać je do tego pytania.

Tryb konspektu i funkcje składania AUCTeX to dwie różne bestie, które mają zasadniczo robić to samo: ukrywać i pokazywać wybrane części bufora.

outline-minor-mode

Kluczowym elementem, który należy rozpoznać podczas używania, outline-minor-modejest to, że ma on inny klucz prefiksu niż outline-mode(tj. Tryb główny ) - właśnie w celu uniknięcia konfliktu kluczy z kluczami ruchu itp. Prefiks ten domyślnie jest niezręczny do pisania C-c @(chociaż można to zrobić zmień to, dostosowując outline-minor-mode-prefix). Wszystkie wymienione Skróty klawiszowe na tym węźle podręcznika powinien nadal działać, ale z akcentami, które zastąpi główną prefiks modalny C-cz minor prefiksu modalnej C-c @. Stąd C-c @ C-cprzebiegi hide-entry, C-c @ C-eprzebiegi show-entryi tak dalej.

Aby korzystać z tych udogodnień, musisz włączyć outline-minor-mode. Najprostszym sposobem jest hak trybu:

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

wymiana pieniędzy outline-minor-mode-prefix

To powinna być prosta rzecz do zmiany outline-minor-mode-prefix(to kiedyś z powrotem w ciągu dnia). Ale nie jest. Co za zabawa!

Dokumenty zawierają teraz tajemniczą notatkę, która:

Klawisz prefiksu używany dla poleceń Zarys w trybie pomocniczym Zarys. Wartość tej zmiennej jest sprawdzana w ramach ładowania trybu konspektu. Następnie zmiana klucza prefiksu wymaga manipulowania mapami klawiszy.

Tak, bardzo pomocny. Co dziwne, nawet customizenie ustawia tej zmiennej w czasie, aby uniknąć „manipulowania mapami klawiszy” (mimo że jest zdefiniowana defcustomw kodzie źródłowym). Praktyczne obejście: ustaw tę zmienną w pliku init przed załadowaniem outlinelub jakimkolwiek innym elementem z niego zbudowanym (np org-mode.).

Możesz na przykład chcieć, aby prefiks był C-o(co oznacza, że ​​przegrywasz open-line, ale możesz ponownie powiązać go, jeśli naprawdę chcesz). Umieszczenie następujących plików na początku pliku inicjującego załatwi sprawę:

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

Teraz powinieneś być w stanie uzyskać dostęp do wszystkich funkcji trybu konspektu za pomocą C-oprefiksu - C-o C-caby zadzwonić hide-entry, C-o C-ezadzwonić show-entryi tak dalej.

dodawanie nowych nagłówków konspektu

Jako dodatkowy bonus możesz również dostosować, które nagłówki konturu można składać i do jakich poziomów. Na przykład lubię mieć możliwość tworzenia „fałszywych” nagłówków sekcji, aby ukryć tekst, który nie ma prawdziwego nagłówka LaTeX, ale logicznie jest przechowywany na tym samym poziomie dokumentu. Za pomocą następującego kodu możesz użyć:

%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

Będziesz mógł manipulować fałszywą sekcją tak jak każdą inną, ale LaTeX zignoruje ją podczas kompilacji dokumentu:

;; 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-magicrozszerza tryby konspektu na org-modeukrywanie / pokazywanie za pomocą magicznego klawisza tab. Innymi słowy, prawdopodobnie możesz dodać to do swojego przepływu pracy i sprawić, że twoje dokumenty LaTeX będą zachowywać się bardziej jak orgdokumenty. (Nie używam go sam, więc nie mogę komentować funkcjonalności.)

Składane urządzenia AUCTeX

Urządzenia do składania AUCTeX działają w środowiskach i w tym, co (myląco) nazywają makra , a nie sekcje. Aby korzystać z tej funkcji, musisz ją włączyć za pomocą TeX-fold-mode.

Na przykład itemize środowisko , które zostało rozwinięte, może wyglądać następująco:

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

Wywołanie TeX-fold-env(domyślnie C-c C-o C-e:) w środowisku składa się, aby wyglądać następująco:

[itemize]

Umieszczenie kursora gdzieś w środku [itemize]spowoduje jego tymczasowe rozwinięcie podczas edytowania, a następnie zwinie się z powrotem do [itemize]momentu wyprowadzenia kursora ze środowiska.

Przez „makro” AUCTeX oznacza takie rzeczy \footnote{...}. Dlatego wywołanie TeX-fold-macro(domyślnie :), C-c C-o C-mgdy jest w środku, \footnote{This is a footnote}złoży to do [f]; będzie się rozszerzać i kurczyć w sposób analogiczny do tego, co dzieje się w środowisku.

Możesz używać obu funkcji outline-minor-modeskładania i AUCTeX razem w tym samym dokumencie: robią różne rzeczy na różnych jego częściach.

Dan
źródło
1
Dla przypomnienia, nazwa „makro” nie jest dziwactwem AUCTeX, to nazwa tych „rzeczy” w * TeX. Jest to ta sama koncepcja, co makra w dowolnym języku rozwijającym się, włączając makra elisp. W ostatnim zdaniu dodam, że działa głównie, ponieważ używają różnych skrótów klawiszowych. Istnieją próby ujednolicenia obu ( github.com/mlf176f2/fold-dwim-org ), ale nie są one jeszcze w pełni funkcjonalne.
T. Verron,
Warto również zauważyć, że sekcje LaTeX są bardzo podobne do nagłówków organizacji, a środowiska LaTeX są podobne do bloków organizacji. Org pasuje do obu TABi prawdopodobnie można by to zrobić dla AUCTeX. Składanie makr TABbyłoby moim zdaniem denerwujące (byłoby to podobne do składania specyfikacji wstawiania przeceny ...).
T. Verron,
I ostatni punkt, outline-minor-modepowinien działać od razu po rozpakowaniu z AUCTeX: gnu.org/software/auctex/manual/auctex/Outline.html . To znaczy, dopóki nie zaczniesz definiować nowych makr nagłówków w LaTeX ...
T. Verron,
26

To, co chcesz, nazywa się składaniem i możesz to zrobić na 2 sposoby.

Tryb Zarys pomocniczy

Jest to wbudowany tryb pomocniczy, którego dokładnie używa tryb org do ukrywania i wyświetlania nagłówków. Możesz mieć pewność, że zawsze włączona w latex-modez

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

Skróty klawiszowe, które definiuje, są nieco trudne w użyciu, więc możesz chcieć zmienić niektóre z nich.

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

Dodatek lateksowy

latex-extra jest niewielkim trybem dostępnym w Melpie i stabilnym dla Melpy. Możesz go zainstalować M-x package-install RET latex-extrai włączyć za pomocą

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

Dodaje szereg udogodnień latex-mode, jednym z nich jest składanie sekcji. latex-extraużywa również outline-minor-modeza kulisami, ale zaletą jest to, że bardziej dokładnie emuluje zachowanie trybu org (choć nie identycznie).

Z jego pliku Readme :

Podobnie do tego, w jaki sposób tryb org ukrywa i wyświetla poddrzewa, jeśli wciśniesz TAB w nagłówku sekcji, lateks-extra ukryje dla ciebie zawartość tej sekcji. Dwukrotne naciśnięcie karty rozszerzy ją ponownie.
Nie będzie to kolidować z innymi skrótami klawiszowymi ustawionymi dla TAB , takimi jak yasnippet lub automatyczne uzupełnianie.

Shift-TAB zrobi to samo dla całego bufora.

Oczywiście to samo dotyczy rozdziałów, podrozdziałów itp.

Malabarba
źródło