我如何告诉 AUCTeX breqn 是一个数学环境?

我如何告诉 AUCTeX breqn 是一个数学环境?

我最近一直在尝试使用 breqn 包自动分解我的方程式。但是,我将 emacs(和/或 Aquamacs,取决于我使用的机器)与 Auctex 一起使用,它无法将这些环境识别为数学环境,这有点令人头疼。

是否有一个列表或一个 lisp 命令可以放入 .emacs 文件中,告诉 auctex 将 breqn 引入的数学环境识别为数学环境?

答案1

您可以使用 告诉 auctex 有关其他数学环境的信息LaTeX-add-environments。例如,我有时使用名为thmproplemcordefnnotrem、和 的数学环境,并使用 .xemacs/init.el 文件中的以下几行告诉 auctex 有关它们的信息exnotationequation*

(add-hook 'LaTeX-mode-hook 'add-my-latex-environments)
(defun add-my-latex-environments ()
  (LaTeX-add-environments
   '("thm" LaTeX-env-label)
   '("prop" LaTeX-env-label)
   '("lem" LaTeX-env-label)
   '("cor" LaTeX-env-label)
   '("defn" LaTeX-env-label)
   '("not" LaTeX-env-label)
   '("rem" LaTeX-env-label)
   '("ex" LaTeX-env-label)
   '("notation" LaTeX-env-label)
   '("equation*" LaTeX-env-label)))

编辑:此外,这里有一些由 thequark 建议的代码,用于在dmathauctex 下的环境中进行适当的语法突出显示,以及其他一些改进:

(add-hook 'LaTeX-mode-hook 'add-my-latex-environments) 
(defun add-my-latex-environments () 
  (LaTeX-add-environments 
     '("dmath" LaTeX-env-label))) 

;; Code I added to make syntax highlighting work in Auctex 

(custom-set-variables 
 '(font-latex-math-environments (quote  
     ("display" "displaymath" "equation" "eqnarray" "gather" "multline"  
      "align" "alignat" "xalignat" "dmath"))) 
  '(TeX-insert-braces nil)) ;;Stops putting {} on argumentless commands to "save" whitespace 

;; Additionally, reftex code to recognize this environment as an equation 
(setq reftex-label-alist 
  '(("dmath" ?e nil nil t))) 

答案2

如果您希望环境被识别texmathp(例如由 company-auctex 使用),您可以按照以下方式进行。

(add-to-list 'texmathp-tex-commands '("breqn" env-on))
(texmathp-compile)

答案3

理论上,您无需执行任何操作即可使其工作。您应该包含一个最小示例,提供有关文档结构的信息。假设您的文档结构如下。

\documentclass[a4paper]{article}

\usepackage{breqn}

\begin{document}
\begin{dmath}
  f(x)=\frac{1}{x} \condition{for \(x\neq 0\)}
\end{dmath}
\end{document}

然后你需要做的就是执行TeX-normal-modeC-c C-n)来力量自动生成当地的风格汽车/相对于当前目录的目录。如果不需要将其他包添加到您的序言中,则只需生成一次自动本地样式。以下是生成的文件。

(TeX-add-style-hook
 "tmp"
 (lambda ()
   (TeX-add-to-alist 'LaTeX-provided-class-options
                     '(("article" "a4paper")))
   (TeX-run-style-hooks
    "latex2e"
    "article"
    "art10"
    "breqn"))
 :latex)

您可以很好地猜测上述代码的含义。如果您的文档采用以下方式构建,则可能需要做更多工作才能使其正常工作。

\documentclass[a4paper]{article}

\input{my-custom-preamble}

\begin{document}
\begin{dmath}
  f(x)=\frac{1}{x} \condition{for \(x\neq 0\)}
\end{dmath}
\end{document}

认为我的自定义序言.tex当前目录中有一个你自己维护的、跨多个文件使用的序言文件,并且包breqn是通过这个文件而不是你正在编辑的文档加载的。那么自动生成的本地样式将如下所示。

(TeX-add-style-hook
 "tmp"
 (lambda ()
   (TeX-add-to-alist 'LaTeX-provided-class-options
                     '(("article" "a4paper")))
   (TeX-run-style-hooks
    "latex2e"
    "my-custom-preamble"
    "article"
    "art10"))
 :latex)

它会尝试加载我的自定义序言.el样式文件,但 AUCTeX 不知道这一点。在这种情况下,创建一个我的自定义序言.el内容如下, 风格/目录(TeX-style-local)相对于当前目录或〜/ .emacs.d/auctex/style/目录 (TeX-style-private)。

(TeX-add-style-hook
 "my-custom-preamble"
 (lambda ()
   (TeX-run-style-hooks
    "breqn"))
 :latex)

你明白了它背后的想法。这是对大多数常见包执行此操作的方法,因为它们的样式在~/.emacs.d/elpa/auctex-/风格/目录(TeX-style-global)。如果您使用一些软件包,而这些软件包在该目录中没有预定义的对应样式文件,则有两种方法。您可以跑步 M-x TeX-auto-generate-global为您计算机上安装的 TeX 发行版中的所有包生成自动全局样式。这很耗时,并且会使用目录中总计约 100 MiB 的字节编译文件生成样式文件TeX-auto-global。或者,您可以使用TeX-auto-generate 命令

最后,您的设置可能与我的不同,导致使用不同的目录。请检查您的TeX-style-pathTeX-style-local和相关变量。

温馨提醒,您绝对不能做以下事情。如果没有 ,AUCTeX 的大多数功能都将无法用于此类文档\documentclass{...}

\input{my-custom-preamble}

\begin{document}
<The content of your document>
\end{document}

相关内容