Як я можу приховати / відобразити розділ LaTeX так, як це робить режим org із заголовками?


29

Під час редагування файлів org я вважаю надзвичайно зручним, як можна приховати та відображати заголовки та їх вміст, просто натискаючи TABна заголовок.

Наприклад, розглянемо наступний буфер

* Headline 1
Some text here.

* Headline 2
Some more text here.

Якщо я поставлю крапку на перший *і натисну TAB, я отримаю наступне:

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

Чи є спосіб досягти цього за допомогою розділів LaTeX?
тобто як я можу приховати та відобразити вміст розділу / глави / тощо / LaTeX, зберігаючи заголовок видимим? Я використовую AucTeX для LaTeX-режиму, але я не знайшов нічого, що могло б заповнити цю роль.


Дивіться Org за межами Org: orgmode.org/worg/org-tutorials/org-outside-org.html та режим перекриття
mankoff

Відповіді:


13

NB: значна частина цього тексту виходила з відповіді на запитання, яке виявилося дублікатом цього питання . Деякі матеріали досить різні, що здавалося, що варто додати його до цього питання.

Режим контуру та складні засоби AUCTeX - це два різних звіри, які покликані робити те саме: сховати та показати вибрані частини буфера.

outline-minor-mode

Ключовим елементом, який слід розпізнати при використанні, outline-minor-modeє те, що він має інший ключ префікса, ніж outline-mode(тобто основний режим ) - саме для уникнення конфліктів ключів з клавішами руху тощо. Цей префікс за замовчуванням відповідає незручному типу C-c @(хоча ви можете змінити це за допомогою налаштування outline-minor-mode-prefix). Всі перераховані комбінації клавіш на цьому вузлі керівництва повинні працювати, але з родзинкою , що ви замінити основний режим префікс C-cз другорядним режимом приставкою C-c @. Отже, C-c @ C-cбігає hide-entry, C-c @ C-eбігає show-entryтощо.

Щоб користуватися цими засобами, потрібно включити outline-minor-mode. Найпростіший спосіб - за допомогою гачка режиму:

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

змінюючись outline-minor-mode-prefix

Це слід змінити на просту річ outline-minor-mode-prefix( раніше вона поверталася вдень). Але це не так. Яка забава!

Тепер у доктрині наводиться криптовалюта, що:

Префіксальний ключ, який використовується для команд Контур у другорядному режимі Контур. Значення цієї змінної перевіряється як частина завантаження режиму Контур. Після цього зміна ключа префікса вимагає маніпулювання картами.

Так, дуже корисно. Як не дивно, навіть customizeне встановлює цю змінну в часі, щоб уникнути "маніпулювання картами клавіш" (незважаючи на те, що визначено defcustomу вихідному коді). Практична робота: встановіть цю змінну у своєму файлі init перед завантаженням outlineабо іншим чином, складеним із нього (наприклад, org-mode).

Наприклад, ви хочете, щоб префікс був C-o(це означає, що ви програєте open-line, але ви можете відновити його, якщо ви цього дійсно хочете). Якщо вставити наступне у ваш файл init, ви зробите свою справу:

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

Тепер ви повинні мати доступ до всіх функцій режиму контуру за допомогою C-oпрефікса - C-o C-cдзвонити hide-entry, C-o C-eдзвонити show-entryтощо.

додавання нових заголовків контуру

Як додатковий бонус, ви також можете налаштувати, які контури заголовків можна скласти та на які рівні. Наприклад, мені подобається робити заголовки розділів, щоб приховати текст, який не має справжнього заголовка LaTeX, але логічно зберігається на тому самому рівні документа. За допомогою наступного коду ви можете використовувати:

%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

І ви зможете маніпулювати підробленим розділом так само, як і будь-який інший, але LaTeX проігнорує його при складанні документа:

;; 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розширює контури режимів на використання org-modeсхожих приховувань / показу за допомогою магічної клавіші вкладки. Іншими словами, ви, ймовірно, можете додати це до свого робочого процесу та змусити ваші документи LaTeX поводитись більше як orgдокументи. (Я не використовую його сам, тому не можу коментувати функціональність.)

AUCTeX складні засоби

Складні засоби AUCTeX працюють на середовищах і тому, що вони (заплутано) називають макросами , а не секціями. Щоб користуватися цією функціональністю, вам потрібно ввімкнути її TeX-fold-mode.

Наприклад, itemize середовище , розгорнуте, може виглядати так:

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

Виклик TeX-fold-env(за замовчуванням C-c C-o C-e:) всередині середовища складе його так, щоб виглядати так:

[itemize]

Якщо помістити курсор десь усередині, [itemize]він тимчасово знову розгорнеться під час редагування, а потім згорнеться назад, [itemize]коли ви перемістите курсор із середовища.

Під "макросом" AUCTeX означає такі речі \footnote{...}. Отже, виклик TeX-fold-macro(за замовчуванням:), C-c C-o C-mколи всередині \footnote{This is a footnote}буде складено його до [f]; вона буде розширюватися та стискатися аналогічно тому, що відбувається із середовищами.

Ви можете використовувати як outline-minor-modeскладні засоби AUCTeX разом в одному документі: вони виконують різні речі на різних його частинах.


1
Тільки для запису, назва "макрос" не є диваком AUCTeX, це назва цих "речей" у * TeX. Це те саме поняття, що і макроси в будь-якій мові, що розширює макрос, включаючи макроси elisp. Щодо вашого останнього речення, я додам, що він працює в основному, оскільки вони використовують різні клавіші. Є спроби об'єднати обидва ( github.com/mlf176f2/fold-dwim-org ), але вони ще не є повністю функціональними.
Т. Веррон

Також варто відзначити, що розділи LaTeX дуже схожі на заголовки org, а середовища LaTeX дуже схожі на блоки org. Org складається і з TAB, і це, ймовірно, може бути зроблено для роботи на AUCTeX. Складні макроси з TABмоєю думкою будуть дратувати (це буде схоже на складення специфікацій вбудованої розмітки ...).
Т. Веррон

І останній пункт, outline-minor-modeмає працювати нестандартно з AUCTeX: gnu.org/software/auctex/manual/auctex/Outline.html . Тобто, поки ви не почнете визначати нові макроси заголовка в LaTeX ...
Т. Веррон

26

Те, що ви хочете, називається складанням, і є два способи зробити це.

Контур-другорядний режим

Це вбудований другорядний режим, який саме використовується org-mode для приховування та відображення заголовків. Ви можете переконатися , що він завжди включений в latex-modeс

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

Ключові зв'язки, які він визначає, мало важкі у використанні, тому ви, можливо, захочете змінити деякі з них.

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

Латекс-екстра

латекс-екстра - це другорядний режим, доступний на Мельпі та Мельпа-стійких. Ви можете встановити M-x package-install RET latex-extraі ввімкнути його

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

Це додає низку зручностей latex-mode, одна з них - складання секцій. latex-extraтакож використовується outline-minor-modeза кадром, але перевага полягає в тому, що він більш імітує поведінку орга-режиму (хоч і не однаково).

З його прочитаного :

Подібно до того, як org-режим приховує та відображає підтрубки, якщо ви натиснете TAB на заголовок розділу латекс-extra , приховає вміст цього розділу для вас. Натиснувши вкладку двічі, її знову буде розгорнуто.
Це не буде заважати іншим параметрам інших ключів, встановлених для TAB , наприклад, yasnippet або автодоповнення.

Shift-TAB зробить те саме для всього буфера.

Звичайно, те саме стосується глав, підрозділів тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.