在奇异容器中安装TinyTeX

时间:2019-08-02 13:50:38

标签: ubuntu-18.04 singularity-container tinytex

我正在用RMarkdown撰写论文,为了获得更好的再现性,我想将所有必需的软件包装在singularity容器中。不幸的是,当我尝试安装TinyTeX(Rmarkdown建议使用该方法,并且我希望TeXLive不会对容器进行过多的充气)时,它会失败并显示以下错误消息(完整的构建日志已粘贴here) :

Can't locate TeXLive/TLConfig.pm in @INC (you may need to install the TeXLive::TLConfig module) (@INC contains: /~/.TinyTeX/texmf-dist/scripts/texlive /~/.TinyTeX/tlpkg /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.26.1 /usr/local/share/perl/5.26.1 /usr/lib/x86_64-linux-gnu/perl5/5.26 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.26 /usr/share/perl/5.26 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at ~/.TinyTeX/bin/x86_64-linux/tlmgr line 100.
BEGIN failed--compilation aborted at ~/.TinyTeX/bin/x86_64-linux/tlmgr line 100.

这是内部版本定义文件,基本上,它使用非常瘦的ubuntu 18.04,然后执行%post部分以安装软件

BootStrap: library
From: ubuntu:18.04

%post
  # Add universe repository
  echo "deb http://us.archive.ubuntu.com/ubuntu bionic universe" >> /etc/apt/sources.list
  apt -y update
  # Install utilites
  apt install -y wget
  # Install R
  apt install -y r-base-core
  ## Install RMarkdown and TinyTeX
  R --slave -e 'install.packages(c("rmarkdown","tinytex")); tinytex::install_tinytex()'

  # Clean
  apt-get clean

%environment
  export LC_ALL="en_US.UTF-8"

%labels
  Author DP

我也尝试过tinytex::install_tinytex(dir="/opt/tinytex"),但这似乎并没有改变任何东西。有人知道出什么事了吗?

2 个答案:

答案 0 :(得分:1)

该错误消息抱怨您的映像(或更可能是您的路径)缺少TeXLive :: TLConfig perl模块。

我的猜测是,安装后未随安装的模块重新映射路径内容。最简单的解决方案是将其分为两个命令:

R --slave -e 'install.packages(c("rmarkdown","tinytex"))'
R --slave -e 'tinytex::install_tinytex()'

在本地尝试安装成功。

答案 1 :(得分:0)

如果该图像仅用于生成文档,则可能有用的替代方法是将具有rmarkdown和tex(例如https://hub.docker.com/r/rocker/verse)的docker图像转换为奇数。

使用 echo "<pre>"; echo htmlspecialchars(file_get_contents($file)); echo "</pre>"; ,您可以针对最新版本执行此操作,也可以使用singularity pull docker://rocker/verse对特定版本执行此操作。