同时将许多内容源文件编译成一个样式文件

同时将许多内容源文件编译成一个样式文件

我正在写五篇左右的课文,作为课程笔记。我有一个主文件,Style.tex里面包含了这些课程笔记的各个正文。我这样做的原因是,这样更容易确保我在多个文档中使用相同的样式和符号。但是,我必须进行编辑Style.tex以指定要包含哪些正文。如果我可以同时编译所有笔记并使用一个命令为每组笔记生成 pdf,那就太好了。

有人对如何做到这一点有什么建议吗?

答案1

我认为你现在的做法与必须做的事情相反。如果你不想麻烦地编写自己的类(如 David Carlisle 所建议的)甚至包(这有点棘手),那么你可以使用标准溶液如下 :

首先,您将所有必须共享的手动设置(且仅限此)放入一个mystyle.sty文件(不带\documentclass[]{}或不带)。\begin{document}.....\end{document}\usepackage{}

其次,将课程文件重新组织为常规 tex 文件(每个课程一个),如下所示:

 \documentclass[<options>]{report} % or another class you prefer
 \input{mystyle.sty}
 % here put settings or info specfc to to this course, as \title{} aso>
 \begin{document}
   <body text>
 \end{document}

然后,您可以在共享 的所有内容时编译它们mystyle.sty,而无需多次编辑。此外,如果您在此更改了某些内容mystyle.sty,您将能够通过简单地重新编译所有课程文件来转移更改,而无需编辑它们(如果您有许多课程,脚本对于这最后一步可能很有用...)

编辑对于 DOS/Windows 来说一个非常简单的批处理文件是:

@echo off
FOR %%C IN ("*.tex") do (
echo "compiling"  %%~C
pdflatex -interaction=nonstopmode -shell-escape %%~dpnC > all.log
FOR %%A IN ("aux","out","nav","log","toc","thm") do IF EXIST %%~dpnC.%%A (del %%~dpnC.%%A) 
)
pause

当然 :

  • "*.tex"可以改进为"course*.tex"
  • pdflatex行可以根据您的目的进行定制,或者最好用另一个构建所有内容(包括 BiBTeX 书目、索引等)的脚本替换。
  • 删除列表可以以直接的方式进行扩展。

答案2

我刚刚自己为此编写了一个批处理脚本(适用于 Windows)。

@ECHO off
FOR /L %%X IN (1,1,5) DO (
IF EXIST %%X.tex (
TYPE start.tex > temp.tex
TYPE %%X.tex >> temp.tex
TYPE stop.tex >>temp.tex
pdflatex -synctex=0 -interaction=nonstopmode -shell-escape -jobname=%%X temp
)
)
FOR /L %%X IN (1,1,5) DO ( DEL %%X.aux & DEL %%X.log & DEL %%X.out)
PAUSE

1.tex将、2.tex、 ... 、5.tex(文件的名称)放置在包含此脚本(名为whatever.bat)的目录中。创建一个start.tex文件(在同一目录中),如下所示

\documentclass{someclass}
some preamble
\begin{document}

以及一个 stop.tex 文件(位于同一目录中),其中包含

\end{document}

脚本的作用是检查文件是否1.tex存在,如果存在,则写入start.tex,在中temp.tex包含文本,写入并使用名称进行编译。然后转到,依此类推。1.textemp.texstop.textemp.textemp.tex1.pdf2.tex

该命令前的行PAUSE删除辅助文件。您可能想要删除此行。

您可能还想更改pdflatex选项。

如果您获得更多文档,请将(或两者)for循环更改为(start,step,stop),即(1,1,10)针对 10 个文档。

请注意,这是我的第一个批处理脚本,我强烈建议您在使用之前先备份一下您编写的内容。如果您使用的是 Linux,也许有人可以编写一个bash脚本(我现在无法访问 Linux)。

编辑:请使用 jhor 的。正如指出的那样,我的是初学者的。对我来说,编号很重要(教科书中的解决方案文件,以 pdf 形式附加到特定问题,然后可以随意抛出),因此简单的 for 循环就可以完成工作。

答案3

另一个选择是在命令行上定义要编译的内容文件。

因此,如果将下面的文件保存为Style.tex,则要编译的主体,DocumentA您将使用:

pdflatex "\def\MyFile{DocumentA}\input{Style.tex}"

这样就消除了更改Style.tex文件的任何需要。

笔记:

代码:

\documentclass{article}

%% Your custom style settings, either included from a .sty
%% or defined here.

\begin{document}
\ifdefined\MyFile
    \input{\MyFile}
\else
    \PackageError{Style.tex}{"MyFile" was not defined.}{}
\fi
\end{document}

相关内容