进度报告
四个月后,我觉得在这里“汇报”是个好主意,于是我写了一些东西。然后,我有了更好的想法,并把它变成了一篇博客文章。
你可以读在 TeX.sx 博客上。
受最近聊天室对话的启发,我考虑重新访问emacs作为我的源代码编辑器。为了给它一个好机会(过去十年左右,我尝试了四五次都失败了),我想请教一些有用的提示,或者指向更大作品的指针,以便尽可能顺利地从 TeXWorks 过渡。
我的主要特点作案手法是:
- 大量使用
memoir
、beamer
和tikz
- 结构化文档,
\input
以及standalone
- lualatex(偶尔需要使用 xelatex 或 pdflatex),由 latexmk 驱动
biblatex
(使用 bibtex 而不是 biber,但仅通过惯性)- unicode,无一例外
- Windows 7的
- TeXWorks 之外的通用 PDF 查看器:PDF XChange
我希望得到解决的问题和不确定性包括(我承认其中一些可能与主题不直接相关——在这种情况下链接可能更合适)如下:
- emacs 的初始设置,包括 (...)TeX-workflow 特定的附加组件
- 直接从 emacs 环境进行编译和预览
- 源文件和预览文件的同步
- 自动完成
- 拼写(英语-英国、葡萄牙语-巴西、西班牙语和法语)
- 任何其他暗示、陷阱等
- 一个很好的教程
答案1
我从未在 Windows 中使用过 Emacs,但我八九个月前才开始学习和使用 Emacs,现在我的大部分工作都使用它。
学习
首先,您需要熟悉 Emacs 的基础知识,这很可能是您最沮丧的地方。对于新用户来说,基本用法的命令可能很难学习,因为它们与其他编辑器不同。让学习过程花点时间,最终您将变得非常高效。要知道,一旦您克服了文化冲击并学习了基础知识,您就会喜欢 Emacs。
开始学习 Emacs 基础知识的一个好方法是通过其内置教程,您可以通过 访问C-h t。花点时间从头到尾学习教程。确保您学会了如何在缓冲区中导航、编辑缓冲区、打开新缓冲区以及在缓冲区之间切换。您不需要一次性学会所有内容。您可以随时返回教程。
掌握了基础知识后,您应该尝试在 Emacs 中完成一些工作。开始时,请同时使用旧编辑器。在将大部分时间花在 Emacs 上的前一两个月,您可能会来回切换。重要的是,您要花时间习惯 Emacs,并时不时地尝试学习新东西。即使是长期用户也会偶尔学习新东西。这是一个永无止境的学习过程。
你的习惯和做事方式可能与 Emacs 的方式相冲突。有时最好让 Emacs 适应你习惯的工作方式,有时 Emacs 有更好的方式,然后你最好适应。例如,当我开始使用 Emacs 时,我认为它打开文件和在缓冲区之间切换的方式很复杂和笨拙,所以我倾向于使用菜单和工具栏来完成这些任务。但当我理解并习惯了处理缓冲区的命令(例如在C-x b缓冲区之间切换)后,我对它的效率印象深刻。为了进一步提高在文件之间切换的效率,您可能想要学习的是书签功能。
要了解有关 Emacs 的更多信息,其内部帮助非常有用。您可以通过执行查看帮助选项C-h ?。像往常一样,网络也提供了很好的帮助。一个特定的网站是EmacsWiki. 在 Stack Exchange 网络上本网站适用于 TeX 相关的 Emacs 问题,但是有时你会过得更好询问堆栈溢出那里有更多 Emacs 专家聚集。对于有关 Emacs 的一般和非编程问题,你可以尝试超级用户。 最后,聊天可能是发泄与 Emacs 相关的挫败感(或兴奋感)的好地方。
模式和工具
你想要使用的 LaTeX 是 Emacs 模式奥科特克斯为此http://emacswiki.org/emacs/AUCTeX是一个很好的资源,另请参阅emacs+AUCTeX 的有用快捷键、键绑定或预定义命令开始学习 AUCTeX 的最佳方式可能是阅读快速启动。我在下面的设置中包含了一些在使用 AUCTeX 时可以开始使用的配置。AUCTeX 可以处理\input
和standalone
。
我从未使用过memoir
,所以我不知道是否有一些特定的 Emacs 小工具可以帮助解决这个问题。一般来说YASnippet是让插入您经常插入的结构和制作模板变得更容易的好方法,因此它memoir
也应该对有帮助。 同样适用于beamer
。 创建 beamer 幻灯片的另一种方法是通过另一个 Emacs 模式,称为Org 模式这是一种记笔记、维护待办事项列表、进行项目规划和创作的模式。你要做的是编写一个 org 文件并将其导出到 beamer. 最后,对于 TikZ 结帐TikZ 的 AucTeX 扩展。
你可以设置 Emacs 以与 latexmk 配合使用(我喜欢的方式是https://stackoverflow.com/a/8026921/789593)。然后,由于您使用 latexmk,因此您可以通过 latexmk 自己的配置使用 bibtex 设置 biblatex 并使用 lualatex、xelatex 和 pdflatex 进行编译。
要插入biblatex
引文宏和交叉引用,您可以使用参考TeX它随 AUCTeX 一起提供。查看使用 biblatex 引用命令设置 RefTeX用于配置。在下面的配置中,我已经包含了这样的行。
Emacs 有完全支持 unicode并且它对大多数命令都有自动完成功能。AUCTeX 还提供了TeX 命令的自动完成。
Emacs 有很好的拼写工具。我用的是飞咒当我需要检查拼写时,我会在写作时关闭它以避免分心。使用 AUCTeX,它可以知道代码和文本之间的区别。使用 Flyspell 可以对M-x flyspell-buffer整个缓冲区进行拼写检查,也M-x flyspell-region可以对标记区域进行拼写检查。如果您想将拼写检查与 LaTeX 语言包集成,以下问题可能会让您感兴趣:
- 如何让 AUCTeX 对 babel 和 csquotes 宏指定的语言进行拼写检查?
- 我怎样才能让 AUCTeX 使用与 babel 加载的相同语言的拼写词典?
- 我怎样才能让 AUCTeX 使用与 polyglossia 所加载的相同语言的拼写词典?
工作流
我已经在每天使用 LaTeX 和工作流程?它包括 LaTeX 工作流程的一般描述(但没有考虑特定的编辑器),以及如何通过 Org-mode 和 AUCTeX 实现它的简短描述。我认为在 Org-mode 中最好进行概述和起草。AUCTeX 最适合在流程的后期使用。由于您的问题是关于 Emacs 和 LaTeX 的,因此我不会过多谈论 Org-mode,而是专注于 AUCTeX。
最佳工作流程可能因任务和人员而异。以下只是关于如何在 Emacs 中处理 LaTeX 文件的一些一般说明。当您在 Emacs 中编辑 LaTeX 文件时,您可能会花费大部分时间使用 AUCTeX,但由于您使用 biblatex,因此您还将编辑 .bib 文件。粗略地说,使用 LaTeX 文件可以分为编写或编译。
在写作时,你应该使用 Emacs 中的所有基本命令来浏览文本和编辑文本。这些你通过练习来学习。AUCTeX 提供了一些你应该学习的 LaTeX 特定命令,确保检查用于创建宏、C-c Enter和环境的命令C-c C-e、LaTeX 数学模式以及用于插入引文和交叉引用的 RefTeX 命令,请参阅上面的 AUCTeX 资源了解详情。为了加快并简化 LaTeX 文件的创建,您可以通过 YASnippet 使用模板,如中所述使用模板。另外,.bib 文件还有一种特殊模式,可以方便编辑此类文件。
在编译时,你可以使用上面描述的 latexmk,但你也可以使用 AUCTeX 内置的编译方法,这种方法相当不错(C-c C-c)。要查看当前缓冲区的输出,只需执行C-c C-v。如果编译失败,AUCTeX 可以带你到发生错误的行。
工作流程的另一个方面是跟踪变更。这可以通过修订控制来实现,请参阅在 LaTeX 文档中使用版本控制(git 等)有什么好处和VCS 与 LaTeX 文档的良好工作实践是什么?了解详情。Emacs 内置支持许多修订控制系统。如果你使用 git玛吉特优于内置的 git 支持。
设置
你的 Emacs 配置基于你的.emacs 文件这是一个由 Lisp 代码组成的文本文件。您不必了解 Lisp 即可配置 Emacs(尽管了解一些 Lisp 会对您有好处)。通常,您会在网上找到一些代码片段,然后将其粘贴到 .emacs 中。
配置 Emacs 是一个永无止境的过程。这没有什么错。您可以根据自己的需要进行调整。但是,最好有一个开始。下面是一个 .emacs 文件。我删除了大部分内容,只留下一些次要的显示配置、一些常规的 AUCTeX 和 RefTeX 配置以及一些用于正确语法突出显示流行软件包(如 、enumitem
和biblatex
macros )中的宏的配置csquotes
。我对其进行了大量注释,以便更容易理解它的作用。如果有一些配置您不喜欢,您可以删除相关行或注释它们以停用它们。请务必保留 .emacs 的备份,以免丢失配置。
;;; Brent.Longborough's .emacs
(global-visual-line-mode 1); Proper line wrapping
(global-hl-line-mode 1); Highlight current row
(show-paren-mode 1); Matches parentheses and such in every mode
(set-fringe-mode '(0 . 0)); Disable fringe because I use visual-line-mode
(set-face-background hl-line-face "#f2f1f0"); Same color as greyness in gtk
(setq inhibit-splash-screen t); Disable splash screen
(setq visible-bell t); Flashes on error
(setq calendar-week-start-day 1); Calender should start on Monday
(add-to-list 'default-frame-alist '(height . 59)); Default frame height.
;;; AUCTeX
;; Customary Customization, p. 1 and 16 in the manual, and http://www.emacswiki.org/emacs/AUCTeX#toc2
(setq TeX-parse-self t); Enable parse on load.
(setq TeX-auto-save t); Enable parse on save.
(setq-default TeX-master nil)
(setq TeX-PDF-mode t); PDF mode (rather than DVI-mode)
(add-hook 'TeX-mode-hook 'flyspell-mode); Enable Flyspell mode for TeX modes such as AUCTeX. Highlights all misspelled words.
(add-hook 'emacs-lisp-mode-hook 'flyspell-prog-mode); Enable Flyspell program mode for emacs lisp mode, which highlights all misspelled words in comments and strings.
(setq ispell-dictionary "english"); Default dictionary. To change do M-x ispell-change-dictionary RET.
(add-hook 'TeX-mode-hook
(lambda () (TeX-fold-mode 1))); Automatically activate TeX-fold-mode.
(setq LaTeX-babel-hyphen nil); Disable language-specific hyphen insertion.
;; " expands into csquotes macros (for this to work babel must be loaded after csquotes).
(setq LaTeX-csquotes-close-quote "}"
LaTeX-csquotes-open-quote "\\enquote{")
;; LaTeX-math-mode http://www.gnu.org/s/auctex/manual/auctex/Mathematics.html
(add-hook 'TeX-mode-hook 'LaTeX-math-mode)
;;; RefTeX
;; Turn on RefTeX for AUCTeX http://www.gnu.org/s/auctex/manual/reftex/reftex_5.html
(add-hook 'TeX-mode-hook 'turn-on-reftex)
(eval-after-load 'reftex-vars; Is this construct really needed?
'(progn
(setq reftex-cite-prompt-optional-args t); Prompt for empty optional arguments in cite macros.
;; Make RefTeX interact with AUCTeX, http://www.gnu.org/s/auctex/manual/reftex/AUCTeX_002dRefTeX-Interface.html
(setq reftex-plug-into-AUCTeX t)
;; So that RefTeX also recognizes \addbibresource. Note that you
;; can't use $HOME in path for \addbibresource but that "~"
;; works.
(setq reftex-bibliography-commands '("bibliography" "nobibliography" "addbibresource"))
; (setq reftex-default-bibliography '("UNCOMMENT LINE AND INSERT PATH TO YOUR BIBLIOGRAPHY HERE")); So that RefTeX in Org-mode knows bibliography
(setcdr (assoc 'caption reftex-default-context-regexps) "\\\\\\(rot\\|sub\\)?caption\\*?[[{]"); Recognize \subcaptions, e.g. reftex-citation
(setq reftex-cite-format; Get ReTeX with biblatex, see https://tex.stackexchange.com/questions/31966/setting-up-reftex-with-biblatex-citation-commands/31992#31992
'((?t . "\\textcite[]{%l}")
(?a . "\\autocite[]{%l}")
(?c . "\\cite[]{%l}")
(?s . "\\smartcite[]{%l}")
(?f . "\\footcite[]{%l}")
(?n . "\\nocite{%l}")
(?b . "\\blockcquote[]{%l}{}")))))
;; Fontification (remove unnecessary entries as you notice them) http://lists.gnu.org/archive/html/emacs-orgmode/2009-05/msg00236.html http://www.gnu.org/software/auctex/manual/auctex/Fontification-of-macros.html
(setq font-latex-match-reference-keywords
'(
;; biblatex
("printbibliography" "[{")
("addbibresource" "[{")
;; Standard commands
;; ("cite" "[{")
("Cite" "[{")
("parencite" "[{")
("Parencite" "[{")
("footcite" "[{")
("footcitetext" "[{")
;; ;; Style-specific commands
("textcite" "[{")
("Textcite" "[{")
("smartcite" "[{")
("Smartcite" "[{")
("cite*" "[{")
("parencite*" "[{")
("supercite" "[{")
; Qualified citation lists
("cites" "[{")
("Cites" "[{")
("parencites" "[{")
("Parencites" "[{")
("footcites" "[{")
("footcitetexts" "[{")
("smartcites" "[{")
("Smartcites" "[{")
("textcites" "[{")
("Textcites" "[{")
("supercites" "[{")
;; Style-independent commands
("autocite" "[{")
("Autocite" "[{")
("autocite*" "[{")
("Autocite*" "[{")
("autocites" "[{")
("Autocites" "[{")
;; Text commands
("citeauthor" "[{")
("Citeauthor" "[{")
("citetitle" "[{")
("citetitle*" "[{")
("citeyear" "[{")
("citedate" "[{")
("citeurl" "[{")
;; Special commands
("fullcite" "[{")))
(setq font-latex-match-textual-keywords
'(
;; biblatex brackets
("parentext" "{")
("brackettext" "{")
("hybridblockquote" "[{")
;; Auxiliary Commands
("textelp" "{")
("textelp*" "{")
("textins" "{")
("textins*" "{")
;; supcaption
("subcaption" "[{")))
(setq font-latex-match-variable-keywords
'(
;; amsmath
("numberwithin" "{")
;; enumitem
("setlist" "[{")
("setlist*" "[{")
("newlist" "{")
("renewlist" "{")
("setlistdepth" "{")
("restartlist" "{")))
答案2
Kieran Healy 的“选择您的工作流应用程序”是一个很好的起点。在文章中,Healy 写了关于 EMACS、LaTeX、R 的内容。
答案3
对于编译和预览,我在 Windows 机器上使用内置预览功能并没有取得很大成功。我没有完全在 Emacs 中工作,而是使用苏门答腊 PDF使用 TeX-source-correlate-mode 的查看器。这样我就可以生成带有参考链接的 PDF,然后从 Emacs 正向搜索 PDF,再从 PDF 反向搜索 Emacs 中的源文件。Sumatra 还会在连续编译时更新查看器中的 PDF,因此您不必像使用 Acrobat 那样关闭 PDF 查看器。
我的 .emacs 文件的相关部分是:
(add-hook 'LaTeX-mode-hook 'TeX-source-correlate-mode)
(server-start)
(require 'sumatra-forward)
第一行打开正向和反向链接的关联模式。第二行是当我从 PDF 进行反向搜索时,Emacs 将跳转到当前代码缓冲区中的行,而不是每次反向搜索时都尝试打开新的 Emacs 实例。最后一行加载一个包来处理用于正向搜索的苏门答腊特定 lisp。
关于如何用 Emacs 设置 Sumatra 以及 sumatra-forward.el 的更多信息,可以在这里找到这里。
我的其他技巧和窍门大部分都已在NN 的精彩回答。我只想重申 YASnippet 非常适合模板文本,并且非常易于配置。我经常用它来做类似的事情\frac{}{}
,这样当我展开片段时,我可以从分子切换到分母,然后切换到退出分数。
我发现另一个有用的软件包是突出显示括号模式,它可以为{[()]}
光标周围的颜色着色。它曾多次帮助我编辑长方程式。
我还要补充一点,Org-mode 是一款很棒的工具,除了 LaTeX 集成之外,它还有很多功能。这就是我开始使用 Emacs 并继续使用它的原因。所以,如果你正在寻找一些额外的动力来重新使用 Emacs,我建议你看看 Org-mode 能做什么。
答案4
这里已经有很多很棒的答案了。我一直面临的一个问题是在幻灯片上插入图形对象。我为此使用了 tikz(带覆盖),但第一次尝试就获得正确的坐标总是一个问题,我最终浪费了太多时间进行编写-编译-检查迭代。
我编写了一个名为 的新包,cart.el
它使这个过程更加简化,允许用户单击框架以插入适当的坐标。我将其托管在github 这里- 一定要检查一下!
下面是在 emacs 上使用此包在几分钟内完整创建的幻灯片,例如:
我在这里发布这个是因为这已经成为我在 emacs 上准备演示文稿的工作流程的主要部分。