我最近一直在尝试使用 breqn 包自动分解我的方程式。但是,我将 emacs(和/或 Aquamacs,取决于我使用的机器)与 Auctex 一起使用,它无法将这些环境识别为数学环境,这有点令人头疼。
是否有一个列表或一个 lisp 命令可以放入 .emacs 文件中,告诉 auctex 将 breqn 引入的数学环境识别为数学环境?
答案1
您可以使用 告诉 auctex 有关其他数学环境的信息LaTeX-add-environments
。例如,我有时使用名为thm
、prop
、lem
、cor
、defn
、not
、rem
、和 的数学环境,并使用 .xemacs/init.el 文件中的以下几行告诉 auctex 有关它们的信息ex
:notation
equation*
(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 建议的代码,用于在dmath
auctex 下的环境中进行适当的语法突出显示,以及其他一些改进:
(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-mode
(C-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-path
、TeX-style-local
和相关变量。
温馨提醒,您绝对不能做以下事情。如果没有 ,AUCTeX 的大多数功能都将无法用于此类文档\documentclass{...}
。
\input{my-custom-preamble}
\begin{document}
<The content of your document>
\end{document}