Как я могу скрыть / отобразить раздел 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-режима, но я не нашел ничего, что могло бы выполнять эту роль.

Malabarba
источник
См. Org вне Org: orgmode.org/worg/org-tutorials/org-outside-org.html и режим выхода за пределы : github.com/tj64/outshine
mankoff

Ответы:

13

NB: большая часть этого текста пришла от ответа на вопрос, который оказался дубликатом этого вопроса . Некоторые материалы достаточно разные, поэтому казалось, что стоит добавить их к этому вопросу.

Режим Outline и средства складывания 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(это было раньше ). Но это не так. Как весело!

Строка документации теперь дает загадочное примечание:

Префиксная клавиша, используемая для команд Outline в вспомогательном режиме Outline. Значение этой переменной проверяется как часть режима загрузки Outline. После этого изменение префиксного ключа требует манипулирования раскладками клавиш.

Да, очень полезно. Как ни странно, даже customizeне устанавливает эту переменную вовремя, чтобы избежать «манипулирования клавишами» (несмотря на то, что это определено defcustomв исходном коде). Практический обходной путь : установите эту переменную в вашем файле инициализации перед загрузкой outlineили чем-либо еще созданным из него (например, org-mode).

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

(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(default:) C-c C-o C-eвнутри среды складывает его так, чтобы он выглядел следующим образом:

[itemize]

Поместив курсор где-то внутри, [itemize]он временно будет снова расширяться, пока вы его редактируете, а затем будет уменьшаться до того [itemize]момента, когда вы будете перемещать курсор из среды.

Под «макросом» AUCTeX подразумеваются такие вещи, как \footnote{...}. Следовательно, вызов TeX-fold-macro(default:), 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

То, что вы хотите, называется сворачиванием, и есть два способа сделать это.

План-минорный режим

Это встроенный второстепенный режим, который используется именно в орг-режиме, чтобы скрывать и отображать заголовки. Вы можете убедиться, что он всегда включен 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

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

latex-extra - это второстепенный режим, доступный в Melpa и Melpa-stable. Вы можете установить его с помощью M-x package-install RET latex-extraи включить его

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

Он добавляет ряд удобств latex-mode, одним из которых является складывание секций. latex-extraтакже используется outline-minor-modeза кулисами, но преимущество заключается в том, что он более близко имитирует поведение режима org (хотя и не идентично).

Из его readme :

Подобно тому, как режим org скрывает и отображает поддеревья, если вы нажмете TAB в заголовке раздела, то latex-extra скрыт для вас содержимое этого раздела. Если дважды нажать вкладку, она снова развернется.
Это не повлияет ни на какие другие комбинации клавиш, которые вы установили для TAB , такие как yasnippet или автозаполнение.

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

Конечно, то же самое касается глав, подразделов и т. Д.

Malabarba
источник