使用 Docker 编译 LaTeX 文章

LaTeX 是一种常用的排版系统,它可以帮助用户创建漂亮、专业的文档。但是,安装和配置 LaTeX 比较麻烦,特别是对于初学者而言。

Docker 是一个开源平台,可以让用户通过容器化技术来构建、发布和运行应用程序。使用 Docker 容器可以避免依赖问题,从而使得在不同平台上的部署变得更加简单。

为了简化 LaTeX 安装和文件编译流程,可以使用下面的步骤,通过 Docker 运行 Latex 镜像来编译 LaTeX 文章。

注意:这里给出的方法需要提前安装好 docker,所以也不是完全适用于纯小白……只是把安装配置 LaTeX 的麻烦转变为了安装配置 Docker 的麻烦。但是胜在一劳永逸!

下面是如何使用 Docker 编译 LaTeX 文章的步骤。

步骤 0: 编写你的 LaTeX 文件

步骤 1:编写 .latexmk 文件

为了方简化编译命令,可以在编写 LaTeX 文件的目录下,额外添加一个名为 .latexmk 的文件,用于告诉 latexmk 脚本如何处理 LaTeX 文档。具体来说,它包含了一些变量和设置,如下所示:

$pdf_mode = 1;
$bibtex_use = 2;
$out_dir = 'build';
$clean_ext = 'aux bbl blg log nav out snm toc';
@default_files = ('main.tex');

其中,

  • $pdf_mode = 1 表示使用 pdflatex 工具生成 PDF 输出文件,如果文档存在中文字符的话,设为 3 表示使用 xelatex 工具编译;
  • $bibtex_use = 2 表示使用 biber 来管理 BibTeX 参考文献,用于处理参考文献的引用;
  • $out_dir = 'build' 表示生成的输出文件(中间过程文件、pdf 文件等)存储在当前目录的 build 文件夹中;
  • $clean_ext = 'aux bbl blg log nav out snm toc' 设置要清理的文件类型;
  • @default_files = ('main.tex') 表示默认编译 main.tex 文件,也就是说,你的要编译的 Latex 文件名为 main.tex ,如果不设置该选项,则默认编译所有 tex 文件。

步骤 2:运行 Docker 命令

接下来,我们需要运行一个 Docker 命令,用于编译 LaTeX 文章。具体来说,命令如下所示:

docker run --rm -t \
--user="$(id -u):$(id -g)" \
--net=none \
-v "$(pwd):/tmp" \
--workdir /tmp \
leplusorg/latex \
latexmk

这行命令使用了 Docker 镜像 leplusorg/latex,运行 latexmk 编译当前工作目录下的 LaTeX 文章。

命令会自动依据 .latexmk 文件中的设定,编译 tex 文件并输出生成的 PDF。如果需要重新编译,只需要修改 LaTeX 文件后再次运行上面的命令即可。

最后

使用到的 docker 镜像为 leplusorg/latex,更多信息参见链接:GitHub - leplusorg/docker-latex: A convenient way to run LaTeX on various platform using Docker (latexmk, pdflatex...). 上面的 docker 命令为 Linux 下的命令,Windows 下的命令在这里可以找到。

本质上是用了 latexml 编译工具对文件进行编译,所以更多选项参见这个工具的使用说明:Using Latexmk - homepage

一行命令使用 Docker 编译 Latex 文件,简单优雅的更多相关文章

  1. 用csc命令行手动编译cs文件

    一般初学c#时,用记事本写代码,然后用命令行执行csc命令行可以编译cs文件.方法有两种 1:配置环境,一劳永逸 一般来说在C:\Windows\Microsoft.NET\Framework\v4. ...

  2. c# 命令行下编译c#文件 // c# file类读写文件

    c# 命令行下编译c#文件 2010-03-01 15:02:14|  分类: c# 学习|字号 订阅     在 开始  ——>程序 ——>vstool中打开vs2008命令提示. 通过 ...

  3. php 命令行脚本运行php文件简单演示

    众说周知,php在web服务器领域有着很重要的角色,可是它不仅仅在web领域,只是在web领域表现更为优秀! 它基本有三种用途: web服务端脚本的编写 应用程序图形界面(类似windows自带的计算 ...

  4. 一行命令安装docker和docker-compose(CentOS7)

    想快速装好docker和docker-compose ?那就随本文用一次复制粘贴来完成安装: 环境信息 操作系统:CentOS Linux release 7.7.1908 (Core, 操作账号:r ...

  5. Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包

    一,实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path-.将依赖包添加到工程中后,eclipse不报错了.但是用Maven命令 mv ...

  6. [java] DOS编译 .java 文件得到 .class 文件 并执行 以及使用外部 .jar包 时的命令

    当写一个java文件后,在DOS中进行编译与执行时,如果没有引入外来的包,那情况很简单 例如: public class hello_world { public static void main(S ...

  7. Latex文件如何拆分进行独立编译?

    Latex文件如何拆分并进行独立编译? --latex源文件分批独立编译     最近使用Latex编写长文档,对于文件的组织有些困扰.   如果LaTeX文档比较大,可以考虑拆分为几个部分.比如编辑 ...

  8. 简单的反编译class文件并重新编译的方法

    在没有.java源码的情况下,如果想修改一个.class文件.可以通过以下步骤实现: 修改前的class文件: 一.反编译.class文件成.java文件. 1.可以使用Java Decompiler ...

  9. 一键编译go文件命令.bat

    一键编译go文件命令.bat    , 请新建 一键编译go文件命令.bat    文件,放到你的xxx.go文件目录下 ( 欢迎加入go语言群: 218160862 , 群内有实践) 点击加入 @e ...

  10. CocoaPods常用终端命令及Profile文件简单介绍

    Pod常用终端命令 pod init 创建pod文件 pod install 开始安装第三方框架,如果网上有更新,会安装最新的 pod install --verbose--no-repo-updat ...

随机推荐

  1. Linux中如何通过yum或者apt下载安装MySQL

    一.   yum mysql5.7以下 mysql5.7以上 Centos8 可以,但是需要重新配置文件 可以,但是需要重新配置文件 可以,但是需要重新配置文件 Centos7 可以直接yum,但是是 ...

  2. Redis - 数据类型映射底层结构

    简介 从数据类型上体现就是,同一个数据类型,在不同的情况下会使用不同的编码类型,底层所使用的的数据结构也不相同. 字符串对象 字符串对象的编码可以是 int.raw 和 embstr 三者之一. em ...

  3. 安装MongoDB、及基本使用

    1.MongoDB简介 MongoDB是一个介于关系数据库和非关系数据库之间的产品,基于分布式文件存储的数据库.是非关系数据库当中功能最丰富,最像关系数据库的.它支持的数据结构非常松散,是类似json ...

  4. vue2项目中调取登录接口登录以后获取个人信息以后,储存在哪里,怎么在不同的页面展示想要的信息?

    在Vue2项目中,可以将个人信息存储在Vuex状态管理中或者浏览器的本地存储中,具体取决于项目的需求和规模. 1. Vuex状态管理 在Vuex中定义一个user模块,用于存储用户信息,可以在登录成功 ...

  5. SSM之简单的CRUD

    文章目录 前言 项目介绍 项目代码介绍 数据库文件 源码介绍 代码展示 配置文件 业务逻辑代码 总结 前言 大家好呀,前面不是说最近在学习SSM么,可能学的不是那么深,不过刚刚开始,学完肯定需要先动手 ...

  6. 2023-03-16:给定一个由 0 和 1 组成的数组 arr ,将数组分成 3 个非空的部分, 使得所有这些部分表示相同的二进制值。 如果可以做到,请返回任何 [i, j],其中 i+1 < j

    2023-03-16:给定一个由 0 和 1 组成的数组 arr ,将数组分成 3 个非空的部分, 使得所有这些部分表示相同的二进制值. 如果可以做到,请返回任何 [i, j],其中 i+1 < ...

  7. 2020-10-21:go中channel的send流程是什么?

    福哥答案2020-10-21: ***[评论](https://user.qzone.qq.com/3182319461/blog/1603234689)

  8. 2022-07-09:总长度为n的数组中,所有长度为k的子序列里,有多少子序列的和为偶数?

    2022-07-09:总长度为n的数组中,所有长度为k的子序列里,有多少子序列的和为偶数? 答案2022-07-09: 方法一:递归,要i还是不要i. 方法二:动态规划.需要两张dp表. 代码用rus ...

  9. 2022-06-06:大妈一开始手上有x个鸡蛋,她想让手上的鸡蛋数量变成y, 操作1 : 从仓库里拿出1个鸡蛋到手上,x变成x+1个, 操作2 : 如果手上的鸡蛋数量是3的整数倍,大妈可以直接把三分之

    2022-06-06:大妈一开始手上有x个鸡蛋,她想让手上的鸡蛋数量变成y, 操作1 : 从仓库里拿出1个鸡蛋到手上,x变成x+1个, 操作2 : 如果手上的鸡蛋数量是3的整数倍,大妈可以直接把三分之 ...

  10. 2022-02-24:k8s安装rabbitmq,yaml如何写?

    2022-02-24:k8s安装rabbitmq,yaml如何写? 答案2022-02-24: yaml如下: apiVersion: apps/v1 kind: Deployment metadat ...