我为我的方程式定义了一个自定义宏,以简化和减少我编写的代码量
\newcommand{\eqn}[1]{
\begin{equation}
#1
\end{equation}
}
\eqn{\alpha + \beta = \gamma}
但是我没有 AUCTeX 提供的数学宏和子/上标样式的语法高亮,因为它没有意识到它是一个数学环境。
我应该怎么做才能启用这些功能\eqn{}
?
答案1
请注意,如果制作宏(例如所示的宏),则很容易引入虚假空格,该宏会在方程式上方生成一条虚假的“白色”线,仅由缩进框和\rightskip
粘连线组成。它添加的垂直空间小于,\baselineskip
因为它导致\bovedisplayshortskip
使用而不是,\abovedisplayskip
因为方程式上方的线(非常)短。
\documentclass{article}
\begin{document}
\newcommand{\eqn}[1]{
\begin{equation}
#1
\end{equation}
}
\showoutput
\noindent
\begin{minipage}[t]{.5\textwidth}
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.
\eqn{x}
bbb
\hrule
\end{minipage}%
\begin{minipage}[t]{.5\textwidth}
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.
\begin{equation}
x
\end{equation}
bbb
\hrule
\end{minipage}
\end{document}
至于你原来的问题,请参阅
texmathp-tex-commands is a variable defined in `texmathp.el'.
Its value is nil
This variable is potentially risky when used as a file local variable.
Documentation:
List of environments and macros influencing (La)TeX math mode.
This user-defined list is used in addition to LaTeX and AMSLaTeX defaults.
The structure of each entry is (NAME TYPE)
- The first item in each entry is the name of an environment or macro.
If it's a macro, include the backslash.
- The second item is a symbol indicating how the command works:
`env-on' Environment: turns math mode for its body on
`env-off' Environment: turns math mode for its body off
`arg-on' Command: turns math mode for its arguments on
`arg-off' Command: turns math mode for its arguments off
`sw-on' Switch: turns math-mode of following text on
`sw-off' Switch: turns math-mode of following text off
`sw-toggle' Switch: toggles math mode of following text
You can customize this variable.
[back]
答案2
根据 @Johannes_B 的说法和 @DavidCarlisle 的回复,你最好在 emacs 中创建一个缩写。输入如下内容
/eqn
emacs 会将其视为缩写并将其扩展为您想要的内容。
设置缩写的方式有很多种。以下是我使用的方法:
创建新的缩写表
(defvar my-abbrev-table (make-abbrev-table))
定义函数
(defun my-insert-equation ()
(insert "\\begin{equation}\n\n")
(insert "\\end{equation}\n")
(forward-line -2))
然后将此功能添加到您的缩写表中
(define-abbrev my-abbrev-table "/eqn" "" 'my-insert-equation t)
将此设为您的本地缩写表
(setq local-abbrev-table my-abbrev-table)
以上内容均可放入其自己的.el
文件中。
然后添加tex-mode-hook
一个调用来加载该.el
文件。从那里开始你应该就可以了。
如果您确保您的函数返回t
,那么您可以控制扩展控制字符是否也将用作输入文本。
比较以下两个:
(defun my-insert-equation ()
(insert "\\begin{equation}\n\n")
(insert "\\end{equation}\n")
(forward-line -2)
t)
(defun my-insert-junk ()
(insert "this is just junk")
t)
现在添加另一行
(put 'my-insert-equation 'no-self-insert t)
创建以下两个键:
(define-abbrev my-abbrev-table "/eqn" "" 'my-insert-equation t)
(define-abbrev my-abbrev-table "/junk" "" 'my-insert-junk t)
然后输入
/ e q n .
emacs 将扩展它为
\begin{equation}
[]
\end{equation}
其中[]
表示光标的位置。请注意,句点.
并未显示出来。
但是通过输入
/ j u n k .
emacs 将扩展它为
this is just junk.[]
请注意用于触发扩展的标点符号是如何包含在扩展中的。
很重要的一点
关于上述缩写,我忘记了我已经修改了我的语法表。
缩写仅适用于单词字符。要使上述操作生效,您必须按如下方式修改语法表
(modify-syntax-entry ?/ "w" tex-mode-syntax-table)
但如果您使用通常的单词字符定义缩写,则实际上没有必要这样做。通过创建/
单词字符,我在向前或向后移动文件路径时会造成一点不便,但这只是这种修改唯一一次造成麻烦(而且麻烦不大)。通过采用这种语法,我相信我的缩写不会是我真正想在没有扩展的情况下输入的东西。
尽管如此,
(define-abbrev my-abbrev-table "eqn" "" 'my-insert-equation t)
(define-abbrev my-abbrev-table "junk" "" 'my-insert-junk t)
是完美的缩写。如果你真的只是想要junk
输入为 justjunk
而不是被下一个非单词字符扩展,那么你可以输入
j u n k \c-q <non-word character>
emacs 不会扩展 word。但是,当我一时兴起创建文档时,我太笨了,无法识别出其中的区别。
顺便说一句,如果您的缩写只是要扩展为另一个字符串(例如 的情况/junk
),则无需创建与此缩写相对应的函数。相反,您可以将其定义为
(define-abbrev my-abbrev-table "/junk" "This is just junk. Plain and simple" nil t)