在与一些同事合作时,我们使用的是不同版本的 TeXLive。因此,由于缺少软件包,他们中的一些人无法编译我的文档。
我想到了一个问题:如果可以检测到用于特定文档的所有包和版本,看看该包/版本是否已安装在系统中,如果没有,则下载并安装在特定文件夹中,那会怎样?
对于编译,我总是使用自己制作的 Makefile,如果该文档需要,我会在其中添加sty
和文件。但我手动执行此操作。因此我有这个变量:bst
TEXVAR = TEXINPUTS=./sty//:${TEXINPUTS:-:} &&\ BSTINPUTS=./bst//:${BSTINPUTS:-:} &&\ export TEXINPUTS BSTINPUTS
我从这个问题知道检查我是否安装了 LaTeX 软件包和生成所有已安装的 (La)TeX 文件的列表可以确定已安装软件包的完整列表。
\RequirePackage{snapshot}
此外,我知道通过和的结合bundledoc
可以生成用于编译的所有包的列表并将它们复制到我的sty
文件夹中。
这包含在主文件中\documentclass
:
% List the files used in compilation
% It generates a 'job.dep' file that can be post-processed by 'bundledoc'
% Required for package-gen.sh
\RequirePackage{snapshot}
还有 bash 脚本package-gen.sh
:
#!/bin/sh
# package-gen.sh -- Generates the list of packages required for compilation
# Dependency file
MAIN=job
# Styles folder
STYDIR=sty
# List of files to copy (sty, def, cls)
#LIST=`bundledoc --listdeps=only $MAIN.dep | egrep -iw 'sty|def|cls'`
LIST=`bundledoc --listdeps=only $MAIN.dep | egrep -iw 'texlive/2015'`
# Create styles folder if it doesn't exist
if [ ! -d "$STYDIR" ]; then
mkdir $STYDIR
fi
# Copy files to temporary folder
for file in $LIST; do
cp -rf $file $STYDIR
done
所以问题是:有人知道我该如何自动执行此操作...从CTAN
系统中下载未安装的软件包并将其复制到sty
文件夹中?最好是在编译开始后立即进行此操作。