这是来自使用 emacs 进行 TeX 工作流程的简单指南。
主要答案指出可以将 emacs 与一起使用standalone
:问题是如何?
主要问题是,当您尝试使用 编译独立文件时C-c C-c
,命令会在TeX-master
您真正想要定义为主文件的文件上运行,以保留 emacs、AUCTeX 和 RefTex 的所有优点。
答案1
有两种方法可以实现它。第一种方法使用standalone
,第二种方法仅使用 emacs。请参阅此答案的结尾,以对这两种方法进行简短(且有偏见的)比较。在这两个示例中,我将使用此主文件:
主文件
% File main_standalone.tex
\documentclass{article}
\usepackage{standalone}
\newcommand{\blahblah}{Blahblah!}
\begin{document}
\input{input_standalone}
\end{document}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End:
独立解决方案
% File input_standalone.tex
\documentclass{standalone}
\newcommand{\blahblah}{Blahblah!}
\begin{document}
Some text, \blahblah
\end{document}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "main_standalone"
%%% End:
如果你尝试用 编译它C-c C-c
,它将会运行(或多或少)
%(latex) %t
扩展为(类似于)
pdflatex main_standalone.tex
显然这不是我们想要的。可能有一种方法可以恢复真实的文件名,但我找不到。我能提出的最佳后备解决方案是选择Other
而不是LaTeX
并输入pdflatex input_standalone.tex
,但每次编译时你都必须输入它。
现在,如果我们能找到一种方法来告诉 emacs 如何找到真实的文件名,我们就可以解决这个问题。但是,第二个解决方案表明不需要这么复杂的东西,所以我真的不想进一步搜索。
使用 emacs 机制的解决方案
% File input_standalone.tex
Some text, \blahblah
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "main_standalone"
%%% End:
这次,我们将文件作为常规输入文件提供:没有序言,没有文档类。我们也不需要使用包standalone
。
这是 emacs 的魔力:C-c C-c
我们不使用 进行编译,而是使用C-c C-b
。从AUCTeX 手册:
命令: TeX 命令缓冲区
(
C-c C-b
) 向用户询问命令,并将其应用于当前缓冲区的内容。从主文件中提取文件头和文件尾后,将缓冲区内容写入区域文件。然后,该命令实际上在区域文件上运行。有关详细信息,请参见上文。
所以我们的文件被编译了,我们可以在中找到结果_region_.pdf
。
比较
在我看来,使用“emacs”选项有几个优点standalone
:
- 它开箱即用:不需要修复我们之前尝试使用文档类进行编译时遇到的问题
standalone
; - 它很容易适应:假设您有一个编译命令
LaTeX
,一个编译命令XeLaTeX
,一个编译命令,一个Make
与 makefile 关联的命令,以及两个自定义查看器。系统将提示您输入带有的命令C-c C-b
,就像您正在使用一样C-c C-c
。另一方面,假设我们可以修复前面的问题,如果我们想在独立文件上使用它们,我们需要为每个命令创建一个独立的等效命令; - 不需要
standalone
:这不是一个真正的论点,因为就我而言,这是一个相当稳定的包。但是,我觉得我的编辑器比排版引擎包更适合这项工作; - 从 texing 的角度来看,工作量也更少:基本上,使用 时
standalone
,您必须为每个独立文件维护一个前导码。使用“emacs”方法,只需维护一个前导码。
对应的是您错过了的预编译功能standalone
,但还有其他可用的解决方案,例如使用tikz
external
库。