![如何在 'nix 系统上使用 texhash 安装 LaTeX .zip 包(来自 CTAN)?](https://linux22.com/image/241169/%E5%A6%82%E4%BD%95%E5%9C%A8%20'nix%20%E7%B3%BB%E7%BB%9F%E4%B8%8A%E4%BD%BF%E7%94%A8%20texhash%20%E5%AE%89%E8%A3%85%20LaTeX%20.zip%20%E5%8C%85%EF%BC%88%E6%9D%A5%E8%87%AA%20CTAN%EF%BC%89%EF%BC%9F.png)
是否有一个自动脚本可以将文件放在 ~/texmf/ 中的相关目录树中,并且这是安装包所需的全部内容(除了在 ~/texmf/ 上调用 texhash)?
答案1
CTAN 上只有部分软件包以所谓的 TDS ZIP 文件形式提供,这些文件已包含所需的目录结构,因此您只需将它们解压到树上$TEXMF
(例如~/texmf
)。如果软件包作者未上传 TDS ZIP 文件,则很可能不在 CTAN 上。
据我所知,没有可用的直接脚本可以将 CTAN 包转换为所需的 TDS 结构并直接安装。(TeXLive 开发人员应该有类似的东西来构建 TeXLive 包文件。)我最近在考虑编写这样的脚本。到目前为止,我编写了一个Makefile 适用于大多数 LaTeX 包,但目前它是ydoc
特定的,即仅适用于我的包裹。
但是,你可以将软件包的整个 CTAN 目录下载为一个平面 ZIP 文件,解压后使用ctanify
目录中的脚本。它旨在为 CTAN 创建一个上传 ZIP 文件,其中还包括一个 TDS ZIP 文件。然后您可以使用这个 TDS ZIP 文件并将其解压到您的 TEXMF 树上。
我只是用这个colortbl
作为随机示例进行了测试。步骤如下,可以轻松转换为脚本。只需将其添加#!/bin/sh
为第一行,然后替换colortbl
为$1
并使用 调用它yourscriptname <name of package>
。但是,大多数(但不是全部)LaTeX 包都位于 中/macro/latex/contrib
,因此对于其他包,您需要以某种方式提供下载链接。
cd /tmp
wget http://mirror.ctan.org/macros/latex/contrib/colortbl.zip
unzip colortbl.zip
cd colortbl/
tex colortbl.ins
ctanify *.ins *.dtx
tar -xzf colortbl.tar.gz
unzip -d ~/texmf colortbl.tds.zip
test -e ~/texmf/ls-R && texhash ~/texmf
请注意,如果文件已存在,则只需texhash
为每个用户的 TEXMF 目录运行。如果文件不存在,ls-R
现代 TeXLive 安装程序会在每次运行时自动搜索它。ls-R
答案2
简短的回答:不。
稍微长一点的答案:如果你的包裹在此列表,有点。这些tds.zip
文件已经内置了 TeX 目录结构,因此当您将其解压缩到树的根目录中时texmf
,所有文件都会放在正确的位置。因此,如果您下载那zip 文件,那么它就应该可以工作了。
答案3
根据@Martin Scharrer 的回答,我编写了脚本,首先尝试从 CTAN tds 存档安装,然后从 texlive 存档安装,如果一切都失败,它将尝试 ctanify。
执行示例:./script.sh makecell
#!/usr/bin/env bash
texmf_dir=~/texmf
if wget http://mirrors.ctan.org/install/macros/latex/contrib/$1.tds.zip ; then
unzip -d $texmf_dir $1.tds.zip
rm $1.tds.zip
echo installed via tds
elif wget ftp://sunsite.icm.edu.pl/pub/CTAN/systems/texlive/tlnet/archive/$1.tar.xz ; then
tar -xf $1.tar.xz -C $texmf_dir
rm $1.tar.xz
echo installed from texlive archive
else
wget http://mirror.ctan.org/macros/latex/contrib/$1.zip
unzip $1.zip
cd $1/
tex $1.ins
ctanify *.ins *.dtx
tar -xzf $1.tar.gz
unzip -d $texmf_dir $1.tds.zip
cd ..
rm -rf $1 $1.zip
echo "installed via *.ins *.dtx"
fi
test -e ~/texmf/ls-R && texhash $texmf_dir