使用 AucTeX 插入小节的宏?

使用 AucTeX 插入小节的宏?

C-c C-s产生一个对话框钩子,上面写着Level: (default section)手动的表示子部分的代码应该是。但是,如果在完成部分名称和标签的其余对话框3挂钩后输入,则会得到3 RET

\3{title}
\label{label}

这显然不是预期或期望的行为。

问题:有没有办法修复此行为,以使其表现得更符合我的预期?

写出整个单词subsection似乎会使 AucTeX 宏的整个意义失效。人们是否通常需要大幅修改 AucTeX 的默认值,就像这样做的那样这里? 对于如何改变这种情况、习惯这种情况,或者尝试将章节、小节等插入到文档中的不同解决方案,我们将不胜感激。

编辑: 手册进一步指出

User Option: LaTeX-section-hook
List of hooks to run when a new section is inserted.

The following variables are set before the hooks are run

level
Numeric section level, default set by prefix arg to LaTeX-section.

name
Name of the sectioning command, derived from level.

对我来说,似乎当钩子/对话框/提示符(我是 emacs 新手,不知道正确的术语)要求输入 时,它Level应该是数字,并且 AucTeX 应该从中推断出Name,但它要求的是Name。这是正确的吗?也许我的设置以某种方式干扰了 AucTeX?(我使用的是 AquaMacs 安装附带的 AucTeX 版本,该版本可能经过了大量的预配置。)

编辑:在线手册与 emacs 内部的 LaTeX 部分钩子的信息相矛盾,具体地说:

LaTeX-section-heading Hook to prompt for LaTeX section name. Hide Insert this hook into ‘LaTeX-section-hook’ to allow the user to change the name of the sectioning command inserted with ‘M-x LaTeX-section’.

换句话说,这个钩子是故意设计的仅有的允许用户指定名称,不是级别。这与在线 AucTeX 文档形成了鲜明对比,该文档错误地声称此钩子允许更改名称和级别。

再次,这对我来说没有意义——级别唯一地决定了名称,不是吗?那么为什么允许用户指定不正确的部分命令,例如\notasection{},输入该命令也比级别编号花费更长的时间,并且还不允许指定部分的级别?这对我来说没有意义。

它还说

The following variables are set before the hooks are run: level, name, ...

即,它在运行任何钩子之前设置级别的值。没有任何钩子允许人们改变级别的值。

文档中提到了级别是前缀参数。据我所知,这意味着它只能在 emacs lisp 配置文件中更改,但不能在使用 emacs 时实时更改,这对我来说没有意义。这是基于 emacs 文档中的“前缀命令参数”这里,我其实不太明白。所以我想这个问题归结为如何在使用 emacs 时实时指定前缀命令参数。

答案1

总体而言,Emacs 的用户界面在某种程度上以 Minibuffer-tabcompletion 为中心。如果您不喜欢当前的实现LaTeX-section,您可以在 init 文件中添加以下几行:

(defun My-LaTeX-section ()
  (interactive)
  (let ((LaTeX-section-hook '(LaTeX-section-title
                              LaTeX-section-section
                              LaTeX-section-label)))
    (LaTeX-section
     (read-number "Level: "))))

(add-hook 'LaTeX-mode-hook
          (lambda ()
            (local-set-key (kbd "C-c s") #'My-LaTeX-section))
          t)

它定义了一个新函数My-LaTeX-section,该函数在本地重新绑定的值,LaTeX-section-hook然后它只要求您输入一个数字,该数字将传递给的原始实现。接下来,它在 LaTeX 模式下LaTeX-section将键绑定映射到您的函数。C-c s

现在,您可以键入C-c s 2 RET并将直接转到对的标题和标签的查询section

答案2

C-c C-s输入后su,然后TAB。 Emacs 将尽可能自动完成。

答案3

操作方法如下:首先输入C-u,然后输入级别(0 到 6 之间的数字,请参阅这里),然后C-c C-s正常输入并填写提示。

因此(在 ;LaTeX-section-heading的设置下禁用后LaTeX-section-hook见下文),如果输入以下内容,C-u 2 C-c C-s RET title RET label则会得到:

\section{title}
\label{label}

如果有人输入,C-u 4 C-c C-s anothertitle RET anotherlabel则会得到:

\subsubsection{anothertitle}
\label{anotherlabel}

对我来说这仍然很烦人,因为我更希望能够这样做,C-c C-s 4 RET anothertitle RET anotherlabel但不幸的是,这是命令当前的书写方式LaTeX-section。如果您知道如何更改这些文件并用 emacs lisp 书写,因此能够重写此函数,那么您可能不会遇到与我相同的问题。无论如何,它 (1) 解释了 AUCTeX 文档所讨论的内容,并且 (2) 是一个很多比输入更容易C-c C-s subsubsection RET anothertitle RET anotherlabel,(3)不需要输入整个节级名称,这应该是这些宏的要点。

在幕后,C-u是命令的快捷方式(“键绑定”)universal-argument看这里)允许您指定‘前缀参数’对于以下命令,在本例中为LaTeX-section,其快捷方式是C-c C-s。因此,C-u 4 C-c C-s运行LaTeX-section带有前缀参数 的命令4,并C-u 2 C-c C-s运行LaTeX-section带有前缀参数的命令2(即这里解释在 AUCTeX 文档中)。

笔记:您可能需要更改 first 的值,LaTeX-section-hook以便它不会提示您输入“名称”(这是无用的)。首先输入C-h v不是 C-h C-v),然后LaTeX-section-hook在提示符下输入变量名,该变量名应通过输入 来创建C-h v。这将打开一个窗口,允许您“自定义此变量的值”,执行此操作,然后取消选中 的复选框LaTeX-section-heading。现在C-c C-s不会出现要求输入“级别”的对话框,但实际上只要求输入“名称”(如果 AucTeX 命令和文档版本本身中的术语一致,那将会有所帮助,但事实并非如此)。这很好,因为如果该提示仍然存在,您可以输入并得到完全没用的C-c C-s notasection ... ...输出。\notasection{...} \label{...}

C-hv会导致常规帮助提示,因此在之后输入值C-h会导致帮助提示和有关 emacs 变量的信息,从而允许更改它们的值。

相关内容