如何在 emacs 中使用独立软件包

如何在 emacs 中使用独立软件包

这是来自使用 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库。

相关内容