LaTeX 模式下烦人的 emacs 自动格式化

LaTeX 模式下烦人的 emacs 自动格式化

例如,输入

a^3

emacs 会自动将源 (!) 更改为

这会导致间距、双上标等各种问题。

我怎样才能关闭这种所见即所得的行为?

这是一个 LaTeX 示例(从 emacs 复制粘贴)

\begin{equation}
  E(M) =  \pm 2\sqrt{\epsilon_0² + 16 t²-8t\epsilon_0}
\end{equation}

如果我查看更多文件,我会得到相同的公式

\begin{equation}
  E(M) =  \pm 2\sqrt{\epsilon_0<B2> + 16 t<B2>-8t\epsilon_0}
\end{equation}

答案1

Emacs 永远不会自动更改源。您的问题要么是字体化,在这种情况下您应该看到上标插入符号“^”以及上标“3”,要么您启用了预览模式,它会在您的缓冲区中显示数学环境的 LaTeX 输出。

在第一种情况下,假设您正在使用 Auctex(推荐的 LaTeX 编辑环境),您可以在定制系统中关闭脚本的字体化:

M-x customize-variable font-latex-fontify-script <RET>

然后将值设置为 off 或 nil,字体化将不再适用于上标。

如果您没有看到小插入符号,则说明您一定打开了预览模式。您应该能够使用菜单栏上的预览菜单或通过调用 来从缓冲区中删除所有预览。M-x preview-clearout-document如果您确实打开了预览模式,请查看您的 .emacs 并删除正在加载它的行。

答案2

由于实际文件发生了变化,而不仅仅是显示的缓冲区,这很可能是由于 X 服务器处理键盘输入的方式造成的。即使采用本地化布局,键盘上通常也没有足够的空间容纳许多语言所需的所有特殊字符,尤其是重音字符。人们想出的解决方案是使用作品:首先,您按下一个键来插入重音符^,然后输入字母e,然后得到。(请注意,在编码和ê的时代,这实际上很有用,因为您可以在源中直接输入重音字符。)utf8pdflatex

缺点是它导致 死键这些字符不会产生它们所代表的字符;例如,标准德语键盘布局就是这种情况。当然,如果你输入的数学符号比法语多,这很烦人。你有两个选择:

  1. 将键盘布局更改为没有死键(通常称为死键)的变体no dead keyseliminate由于您使用的是 Ubuntu,因此一个问题这可能会有帮助。

  2. 保留布局,然后按^两次(或^接着按spacebar)以输入插入符号。(这适用于任何死键。)

答案3

我对 elisp 了解不多,所以我无法解释代码,但它可能会对你有所帮助。将以下内容放入你的 .emacs 文件(或其他已加载的首选项文件):

;; Only change sectioning colour
(setq font-latex-fontify-sectioning 'color)
;; super-/sub-script on baseline
(setq font-latex-script-display (quote (nil)))
;; Do not change super-/sub-script font
(custom-set-faces
 '(font-latex-subscript-face ((t nil)))
 '(font-latex-superscript-face ((t nil)))
 )
;; Exclude bold/italic from keywords
(setq font-latex-deactivated-keyword-classes
      '("italic-command" "bold-command" "italic-declaration" "bold-declaration"))

更新:我刚刚想起来,我从哪里得到的代码:https://stackoverflow.com/questions/9534239/emacs-auctex-latex-syntax-prevents-monospaced-font

答案4

我敢打赌你不小心打开了 TeX 输入法。我也曾不小心做过类似的事情。你可以输入 进行测试M-x set-input-method RET TeX RET。你将看到你所描述的行为。你可以用 将其关闭M-x toggle-input-method

如果您想知道自己做了什么,可以输入C-h l“lossage”,这是最近 300 次击键(以及鼠标/菜单事件)的一个非常有趣的名称。您可以仔细查看它以查找可疑的东西。当然,只有您相对较快地注意到它才会有所帮助。

相关内容