我如何像标题的org-mode一样隐藏/显示LaTeX部分?


29

编辑组织文件时,我发现通过单击标题即可隐藏和显示标题及其内容非常方便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模式,但没有发现任何似乎可以填补这一角色的东西。


Answers:


13

注意:本文中的大部分内容来自对一个问题的回答,该问题原来是该问题的重复。其中一些材料完全不同,因此似乎值得将其添加到此问题中。

大纲模式和AUCTeX 折叠功能是两种不同的野兽,它们的作用大致相同:隐藏和显示缓冲区的选定部分。

outline-minor-mode

使用时要识别的一个关键元素outline-minor-mode是它的前缀键与outline-mode(即main模式)不同-正是为了避免键与运动键等冲突。该前缀默认为笨拙的类型C-c @(尽管您可以通过自定义更改outline-minor-mode-prefix)。手册此节点上列出的所有键绑定仍应正常工作,但要用另一种方式,即将模式前缀替换C-c模式前缀C-c @。因此,C-c @ C-crun hide-entryC-c @ C-erun show-entry等。

要使用这些功能,您需要启用outline-minor-mode。最简单的方法是使用模式挂钩:

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

改变中 outline-minor-mode-prefix

应该是一个简单的事情变outline-minor-mode-prefix(它曾经是早在一天)。但事实并非如此。真有趣!

现在,文档字符串给出了一个神秘的注释:

在大纲次要模式下用于大纲命令的前缀键。该变量的值在加载轮廓模式时进行检查。此后,更改前缀键需要操作键映射。

是的,非常有帮助。奇怪的是,即使customize没有及时设置此变量也可以避免“操纵键盘映射”(尽管它defcustom在源代码中用定义)。实际的变通方法:在加载或从其构建任何其他文件之前,请在init文件中设置此变量。outlineorg-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-entryC-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-通过魔术Tab键隐藏/显示。换句话说,您可以将其添加到工作流程中,并使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(default C-c C-o C-m:)\footnote{This is a footnote}会将其折叠为[f]; 它将以与环境类似的方式扩展和收缩。

您可以outline-minor-mode在同一文档中同时使用AUCTeX的折叠工具:它们在其中的不同部分执行不同的操作。


1
仅作记录,名称“ macro”不是AUCTeX的奇数,它是* TeX中这些“事物”的名称。它与任何宏扩展语言(包括elisp宏)中的宏都具有相同的概念。关于您的最后一句话,我要补充一点,主要是因为它们使用了不同的键绑定。有尝试统一两者(github.com/mlf176f2/fold-dwim-org),但是它们还没有完全起作用。
T. Verron 2014年

同样值得注意的是,LaTeX部分与组织标题很像,LaTeX环境与组织块很像。Org都用折叠TAB,这可能可以用于AUCTeX。TAB在我看来,使用折叠宏会很烦人(类似于折叠内联markdown规范...)。
T. Verron 2014年

最后一点,outline-minor-mode应该与AUCTeX开箱即用:gnu.org/software/auctex/manual/auctex/Outline.html。也就是说,直到您开始在LaTeX中定义新的标题宏...
T. Verron 2014年

26

您想要的就是折叠,您可以通过2种方法来实现。

大纲小模式

这是一个内置的次要模式,正是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

乳胶额外

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-mode的行为(尽管不是完全一样)。

从其自述文件

与org-mode隐藏和显示子树的方式类似,如果在节标题上单击TAB,则 Latex-extra将为您隐藏该节的内容。两次点击选项卡将再次展开它。
不会干扰您为TAB设置的其他键绑定,例如yasnippet或自动完成。

Shift-TAB将对整个缓冲区执行相同的操作。

当然,章节,小节等也是如此。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.