我使用exam
AUCTeX 中的文档类为我的学生编写考试。我想使用提供的功能outline-minor-mode
隐藏我已完成的所有练习,仅显示我正在编辑的练习。考试类中有\question
用于编写练习的宏。以下是示例:
\documentclass{exam}
\begin{document}
\begin{questions}
\question % exercise N°1
statement of exercise 1
\question % exercise N°2
statement of exercise 2
\question % exercise N° 3
statement of exercise 3
\end {questions}
\end{document}
例如,当我编辑练习 2 的语句时,我想隐藏练习 1 和 3 的语句!所以我用这样的
\question
变量添加到 AUCTeX 的标题列表中: 但并没有像预期的那样被识别为标题!TeX-outline-extra
M-x (setq TeX-outline-extra '(("\question" 1)))
\question
答案1
这个答案是由@Tyler 在这篇文章中给出的
您没有正确转义“\question”的正则表达式。它应该是:
"\\\\question\\b"
这是一个字符串,为了对字符串中的单个反斜杠进行编码,需要用其自己的反斜杠进行转义。为了在正则表达式中使用文字反斜杠,必须用另一个反斜杠进行转义。因此,要使正则表达式匹配\
字符串中的单个文字,您需要使用\\\\
。
\\b
字符串末尾的 与单词的结尾匹配,即正则表达式\b
。
\question
这仅在出现在行首时才有效。这就是@arashesbati 添加的原因[ \t]*
,这使得正则表达式可以匹配\question
行上任意数量的制表符或空格。
将大纲级别设置为 1 似乎有点高,我认为你最终可能会将问题下方的所有内容(包括后续部分)折叠到问题中。因此,使用类似以下内容可能更有用:
("[ \t]*\\\\question\\b" 4)
最后,看起来 AucTex 只在会话开始时读取它,并且后续更改直到您重新启动才会生效。因此,进行此添加的最佳方式可能是通过M-x customize-variable TeX-outline-extra
。这样,您就知道下次启动 Emacs 时在加载 AucTex 之前将更改变量。在我的例子中,此变量定义为:
'(("[ ]*\\\\question\\b" 4) ("[ ]*\\\\\\(bib\\)?item\\b" 7) ("\\\\bibliography\\b" 2))