我处理过许多文档,希望它们始终保持相同的风格。在做出设计决定时,我希望将其统一应用于所有文档。我创建了一个包含开始和结束代码的文件。然后,我的所有其他文件都只有文本和一些最少的代码(定义章节和部分等内容)。例如:
\documentclass{article}
\title{The First Document}
%\title{The Second Document}
%\title{The Third Document}
\begin{document}
\input{document01}
%\input{document02}
%\input{document03}
\end{document}
要编译不同的文档,我只需将 移动%
到另一行并pdflatex
在该文件上运行。
- 有没有更好的系统来管理这些?
- 我可以放一些细节吗,比如
\title
每个文件开头的信息(document01.tex
,等等) - 有没有办法可以一次性将所有文档编译为单独的 PDF?
答案1
没有必要将该\title{<title>}
命令包含在主文档序言中。也就是说,您也可以将其作为文件2\title{<title>}
的一部分。因此,我有以下建议或步骤顺序:document?.tex
mystyle.sty
通过将所有内容插入样式文件(例如1 )来创建样式。这应该包括您需要的所有内容,例如要应用于单独文档的所有包和格式。使用通用文件名结构创建文档,例如
document??.tex
其中??
代表分隔文档的某些标识符。编写一个脚本,循环遍历
document??.tex
当前文件夹并执行pdflatex \documentclass{article}\usepackage{mystyle}\begin{document}\input{<doc>}\end{document}
当前正在处理的文件在哪里
<doc>
。每次处理的输出将存储在 中article.pdf
,然后您可以将其重命名/移动到<doc>.pdf
。由于我运行的是 Windows,因此这里有一个可以完成此操作的最小批处理文件:@echo off for /f %%a in ('dir /b document??.tex') do ( echo %%a pdflatex \documentclass{article}\usepackage{mystyle}\begin{document}\input{%%a}\end{document} move /y article.pdf %%~na.pdf )
正在处理的文件列表由 给出
dir /b document??.tex
,其中??
表示通配符(任何内容)。从页眉、页脚和所有其他与文件相关的内容中/b
删除命令,从而只留下文件名。 上述脚本从称为“当前处理的文件” 开始。 然后它打印出文件名( )并在以下通用文档结构上运行:dir
%%a
echo %%a
pdflatex
\documentclass{article} \usepackage{mystyle}% Your generic style file \begin{document} \input{document??} \end{document}
最后,
article.pdf
将输出移至document??.pdf
。其他操作系统也可以采用类似的方法。此过程将概括您一次创建多个文档的过程3。
1这在某种程度上解决了您的第一个请求。
2这回答了您的第二个请求。
3这回答了您的第三个请求。
答案2
有没有更好的系统来管理这些?
您正在寻找的是风格文件。
创建您自己的样式文件,将其放在您的 TeX 发行版可以找到的位置,并将其加载到每个文档的前言中。
我可以添加一些详细信息吗,例如开头的 \title 信息 […]
当然,因为它属于文档(而不是样式),所以您可以像往常一样将其包含在文档中。
有没有办法可以一次性将所有文档编译为单独的 PDF?
因为你正在谈论独立的文档只遵循通用格式,没有内置的一次性编译方法。为此目的编写一个 shell 脚本。
答案3
就像 Werner 已经写过的,你可以将\title{<title>}
文档文件本身放入文档中,而不是将序言放入文档中。如果你在标题中使用 babel 简写,这甚至是一个非常好的主意。否则,你必须在标题之前激活简写,在标题之后停用它。因此,建议将\title{<title>}
(和\author{<author>}
) 移到后面。\begin{document}
您甚至可以创建一个包装类,而不是创建包(又称样式)myclass.cls
。首先要这样做:
\ProvideClass{myclass}[2011/11/07 v0.1 my first class]
\LoadClassWithOptions{article}
这样,您的类就类似于 article,因为它只是使用提供给您的类的所有选项加载 article 类。我们称这样的类为包装类。
现在将文档前言中的所有内容复制到myclass.cls
。接下来,您应该\usepackage
在\RequirePackage
处替换myclass.cls
。并且您应该删除包的加载,inputenc
因为编码不是类的属性,而是文档的属性。因为inputenc
已从您的类中删除,所以您应该将其设置为 7 位清洁。这意味着您应该例如 替换。也许也应该ä
从您的类中删除。但如果该类仅支持您在那里作为选项给出的语言,则这不是必须的。\"a
\RequirePackage[<language>]{babel}
最后,你应该\endinput
在类文件的末尾添加。这不是必须的,但最好有。
此后,您的所有文件可能为:
\documentclass{myclass}
\usepackage{selinput}
\SelectInputMappings{
adieresis={ä},
germandbls={ß},
Euro={€},
}
\usepackage[english]{babel}% use every language you want
% You need nothing else, because everything else is at `myclass.cls`.
\begin{document}
\title{Title <nr>}
\maketitle
Text of document <nr>% or \input{document<nr>}
\end{document}
我使用selinput
而不是inputenc
,因为即使您不知道编辑器的编码,它也非常好用。
答案4
这是我对先前问题的回答的修改版本:我怎样才能将我的书分成不同的项目而不重复自己?
正如其他人提到的,将所有样式定义和包列表放在单独的文件中,
MyPackages.sty
并将它们包含在内\usepackage{MyPackages}
。这可确保只有一个特定位置需要更改这些设置,并且会影响所有文档并确保一致性。我
MyPackages.sty
还建议您包括包裹standalone
也可以。这样您就可以随时编译每个章节,然后直接在主书中使用该文件。除了包之外,该
MyPackages.sty
文件还应包含所有自定义宏,可能看起来像这样:\usepackage{standalone}% Need standalone package \usepackage{…}% other packages that you use \newcommand*{}{}% All your custom macros
此文件将成为您的主页。我还会包含几何学此处的边距信息、水印以及页脚、页眉等...
此处的自定义宏也应包含您的样式定义。例如,如果您希望将关键字加粗,则应
\textbf{someKeyWord}
在文档中定义\newcommand*{\keyword}[1]{\textbf{#1}
并使用,而不是使用。这有两个目的:阅读文档的人会知道您正在将其标识为关键字;其次,如果您决定更改关键字的格式,则只需在一个地方进行更改即可。\keyword{someKeyWord}
someKeyWord
为每个章节创建单独的文件(每个
documentXX
文件)。以下是的示例document01.tex
。请注意,这是一个完整的文件,可以自行编译:\documentclass{article} \usepackage{MyPackages}% your custom list of macros and packages % include any title information that is specific to this chapter \begin{document} \chapter{First Chapter Title} \section{First Section Title} ... contents of chapter 1 here... \end{document}
其他章节也类似。然后你的主文件将如下所示:
\documentclass{article} \usepackage{MyPackages}% your custom list of macros and packages \begin{document} \input{document01} \input{document02} ... \end{document}
假设你使用一个定义良好的命名结构,你可以使用以下方法进一步自动化 我可以根据文件系统自动加载章节和部分吗?。如果您只有几个文件,那么这可能不值得麻烦,但如果您计划继续添加新章节,则使用此方法就不需要您更新主文件。
要记住的一件重要事情是主文件必须包含
standalone
包以及各个章节文件所需的所有包,并且上述结构会自动为您完成此操作。正如其他人提到的,最好使用外部脚本来编译文档。