这个问题不是关于如何手动安装软件包,而是如何通过脚本自动安装软件包。这个问题与 MikTeX 或某些 Linux 发行版(例如 Ubuntu)中有限的 tex 软件包管理无关。
这个问题是关于那些管理工具不可用的情况,或者当我们不想使用它们时,或者当它们不够用时。
问题:是否有一个脚本或工具可以通过下载并将其安装在本地树中来安装任意包?
我最接近的是以下脚本(但有很多缺点):
PACKAGE=$1
mkdir -p ~/texmf
cd ~/texmf
wget http://mirror.ctan.org/macros/latex/contrib/$PACKAGE.zip
unzip $PACKAGE.zip
mkdir -p tex/latex/$PACKAGE
cd $PACKAGE
for a in *.dtx; do if [ -a $a ]; then latex $a; fi; done
for a in *.ins; do if [ -a $a ]; then latex $a; fi; done
cd -
cp -vf $PACKAGE/*.{sty,def,cls,cfg} tex/latex/$PACKAGE
texhash
它非常通用,但缺点包括:不具备错误恢复能力,不跟踪依赖关系,不适用于所有软件包,如果脚本失败,有时会产生一堆文件,不适用于 之外的软件包contrib
。此外,它也不适用于复杂的软件包和捆绑包。
我们的想法是只需输入即可,例如:
$ install_package pdfcomment
非常感谢对此脚本或其他工具或脚本的改进。例如,如果它适用于集群中不可用的所有这些包(即没有 root 访问权限),我会非常高兴:
xkeyval oberdiek pgf pgfplots acrotex movie15 datetime filecontents
changepage paralist textcase placeins cool coollist coolstr coolstr
forloop bbm type1cm lastpage pdfmarginpar standalone tufte-latex ifpdf
编辑:感谢 Seamus 的回答,看来 TDS 预打包包的更强大的脚本如下:
$PACKAGE=$1
mkdir -p ~/texmf
cd ~/texmf
wget http://www.ctan.org/tex-archive/install/macros/latex/contrib/$PACKAGE.tds.zip
unzip $PACKAGE.tds.zip
texhash
(并非所有包都有 TDS 版本。)
答案1
很多时候,总溶解固体是一个不错的选择。下载后将package.tds.zip
其放入本地 texmf 树中并解压。它会将所有文件放在您想要的位置。
但这不跟踪依赖关系。
答案2
阿尔法在其他地方建议我的脚本可能是对他的问题的“一个很好的答案”,所以我会试一试。该脚本代替了您最喜欢的 latex 编译器;它既调用编译器,又检测缺少的软件包以在 TeX Live 中安装。简而言之,它允许 TeX Live 类似于 MiKTeX 的“即时安装”。
依赖项:TeX Live(及其包管理器 tlmgr)、python(2 或 3 都可以)。
脚本信息+链接:http://www.latex-community.org/forum/viewtopic.php?f=12&t=15194
从依赖关系中可以看出,该脚本本身并不是一个完整的解决方案,而是“自动化”TL 现有的包管理系统。从技术上讲,我相信它tlmgr install [packagename]
满足了原始问题的要求,但我认为这算是一种“改进”,因为它允许在编译时自动运行该命令(以及搜索命令)。
我不确定 tlmgr 的依赖解析是否已经完美,但即使不是,脚本也会捕获其余的依赖。这是因为它所做的就是反复运行编译器,直到没有更多缺少软件包的错误(或者直到故障安全,当然),并且在此过程中,它应该安装所有必需的软件包!请注意,虽然它捕获了相当数量的字体(感谢 Ulrike Fischer),字体算法可能不够完善。
更新:版本 1.00 现在允许您设置自定义 TeX Live bin 目录并默认为非 sudo,从而(我认为)回答了问题的其余部分。