emacs lisp:如何附加到列表"LaTeX-clean-intermediate-suffixes"?

Mar*_*ert 3 emacs latex elisp

我想在latex命令中添加一些正则表达式LaTeX-clean-intermediate-suffixes.我试过了

(setq LaTeX-clean-intermediate-suffixes
        (append LaTeX-clean-intermediate-suffixes (list "\\.foo" "\\.bar"))) 
Run Code Online (Sandbox Code Playgroud)

但我收到以下警告:

Warning (initialization): An error occurred while loading `/Users/myusername/.emacs':

Symbol's value as variable is void: LaTeX-clean-intermediate-suffixes

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file.  Start Emacs with
the `--debug-init' option to view a complete error backtrace.
Run Code Online (Sandbox Code Playgroud)

如何在此列表中附加一些字符串/后缀?

Jon*_* O. 8

看起来您正在尝试在加载定义它的包之前修改变量的值.C-h v显示该变量在"latex.el"文件中定义,因此请尝试执行以下操作:

(eval-after-load 'latex
  '(setq LaTeX-clean-intermediate-suffixes
     (append LaTeX-clean-intermediate-suffixes (list "\\.foo" "\\.bar"))))
Run Code Online (Sandbox Code Playgroud)

请注意,这eval-after-load是一个函数,并且需要引用您想要评估的代码 - 有点令人困惑,因为它与类似命名的eval-when-compile和朋友(宏)不同.

顺便说一句,您还可以使用add-to-list将项添加到列表中,使用第三个参数t使其附加而不是将它们放在前面.add-to-list也是一个函数,所以这里需要引用变量的名称.有时候,这是比组合更具可读性setqappend,但您只能一次添加一个项目:

(add-to-list 'LaTeX-clean-intermediate-suffixes "\\.foo" t)
Run Code Online (Sandbox Code Playgroud)

这样做的另一个好处是它会"\\.foo"在添加之前检查列表中是否已存在 - 对于加载路径等内容非常有用.