假设我有一个 .tex 文件,想发送给另一个能够编译它的人。在我的工作机器上,编译需要安装到我的 TeX Live 树和一些字体中的许多自定义包(未包含在 CTAN 中)。
有没有办法创建某种沙盒环境,以便我可以像安装全新 TeX Live 一样编译文件,以检查“缺少软件包”和“缺少字体”警告?这样,我可以准备一个目录,将编译我的 .tex 文件所需的所有内容发送给其他人。
请假设我没有其他机器可以用于测试目的。
答案1
环境变量TEXMFHOME
用于告诉您的 TeX 系统“个人”树在哪里。对于 TeX Live,此变量通常不设置,并且来自texmf.cnf
,这将导致它%USERPROFILE%\texmf
在 Windows、~/texmf
Linux 和~/Library/texmf
Mac 上指向。(对于 MiKTeX,没有“开箱即用”设置,因此必须手动创建。)但是,一旦TEXMFHOME
设置为某个非空值,它就会确定在哪里检查。因此设置
TEXMFHOME=.
根据您的操作系统适当地设置将停止搜索个人树。在运行 TeX 之前(例如在命令行或脚本中)执行此操作,您将切断任何本地添加。
更“明确”的是设置TEXINPUTS=.
,它将所有搜索限制在当前目录中。如果您有一个“真正”独立的设置,则可以使用它,尽管对于大多数人来说可能有点过头了。(我们使用它来测试 LaTeX 内核,其中所有 TeX 文件都必须来自当前位置。)有关TEXINPUTs
参阅TEXINPUTS 变量的定义.另请参阅http://tug.org/texlive/doc/texlive-en/texlive-en.html了解有关搜索工作原理的完整文档。
答案2
在 Linux 上我会使用Docker创建一个隔离环境并尝试在其中编译项目。它确实有一些学习曲线(例如,您需要使用体积以使您的 tex 文件在容器内可见),但如果使用合适的 shell 脚本包装,则使用起来是“透明的”。
我发现一个很好的例子github.com/blang/latex-docker。
如果您需要更“奇特”的环境来编译项目,您可以扩展 Dockerfile,检查项目是否在容器内运行,然后将相关脚本发送给接收者。他们可以在相同的容器中运行编译,而不会用额外的软件包污染自己的操作系统。
答案3
您提到您的 LaTeX 环境和开发仅限于一台机器。从长远来看,如果可移植性对您来说是一个问题,那么虚拟机将是使用另一个环境进行测试的解决方案。(也许,如果您没有时间从头开始安装,那么预先构建的 VM 可能是您的一个选择 - 该链接只是预构建 VM 的一个示例 - 没有对其他 VM 进行研究 - 我将 Oracle VM 用于其他目的。) 与此同时,也许您可以尝试在线服务。您尝试过在线编译器吗?参见另一条帖子。
我曾经检查过托管在不同(真实)机器上的不同 LaTeX 环境之间的可移植性 - Windows Server 2008、Gentoo 和 Mac OS。由于 MikTeX 特定命令无法在我的 Gentoo 机器上解释,因此 MikTeX 出现了问题。当主要使用基于 Linux 的操作系统并与其他 Linux 用户共享您的 LaTeX 代码时,您不会遇到(太多)问题 - 除非您安装了某些 CTAN 不太了解的东西 - 正如您自己提到的。
如果您不确定所应用的自定义包,那么虚拟机将是您的最佳选择。