在 ShareLaTeX 中,当我编写包含序言的单个文档时,无论哪个是主文档,我只需按“编译”即可生成输出。
另一方面,当我将序言放在单独的文件中并使用该\input
命令时,我必须将该文档设置为主要文档才能成功编译它。
我不明白为什么这是必要的。有没有办法避免每次都更改主文档,即使我使用的是单独的前言文件?
答案1
如果你要将前言与文档的“正文”分开,你可能会认为这是一个好主意:创建一个前言(例如,preamble.tex
)及其主文件(例如,main.tex
)。例如,
% preamble.tex
\documentclass{article}
\usepackage{enumitem}
\newcommand\myname{XXXX YYYYY}
然后在以下位置使用它:
% main.tex
\input{preamble}
\begin{document}
My name is \myname.
\end{document}
我的建议是:不要这样做。我理解将两个“部分”分开的诱惑,特别是如果它是一个很长的文档等。但是,如果您想分离这两个部分,有更好的方法可以做到:
% main.tex
\documentclass{article}
\usepackage{enumitem}
\newcommand*{\myname}{XXXX YYYY}
% ... other preamble stuff
\begin{document}
\input{content}
% or \include{content}, though there are differences between the two;
% see: https://tex.stackexchange.com/q/246/8528
\end{document}
然后你就可以“写作”了content.tex
% content.tex
My name is \myname.
请注意,您可能必须将其“标记”为子文件并将其指向“主文件”。每个编辑器可能都以不同的方式执行此操作。在 Emacs 中这很容易。在文件底部,您输入:
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "main"
%%% End:
(实际上,只有%%% TeX-master: "main"
在这里做相关工作。)
虽然我无法谈论我从未使用过的 ShareLaTeX,但如果它看不到该行,它很可能\documentclass
会认为它实际上不是 LaTeX 可以处理的文件。(这也是避免使用我上面描述的第一种方法的另一个原因,我强烈建议大家避免使用这种方法。)据推测,该网站允许您以 Emacs 的方式(例如)标记“主”和“子”文件,但我不知道它是如何做到的……
此方法还允许您依赖通用前导码。如果您要这样做,那么最好使用扩展名命名它.sty
并通过 加载它\usepackage
。有关如何执行此操作的更多信息,请参阅: