使用 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. 列表、sort、reverse、元组、字典、

    1.列表是一种有序可变的容器.通过[]来标识 1)定义一个空列表list = [] 2.列表的添加 1)末尾添加append() list = ['张三',,'王五'] list.append('刘六 ...

  2. 【杂绪】#4 & 【Diary】CSP-S1 2021 游记(慎) & CSP-S 备赛发狂日记

    减少..减少掉 我没法同时做那么多事情了........ -------------------------------------------- 但是我\(\color{#EEEEEE}{真真切切地 ...

  3. [Java EE]SpringBoot/Tomcat之启动时报"Error: Could not find or load main class CLASS xxxx"、"no main manifest attribute"异常

    环境信息如下: OS: CENTOS 7 Tomcat : 9.0.46 SpringBoot: 2.3.12.RELASE Build JDK: 1.8.0_261 Runetime JDK : o ...

  4. JVM的内存分配及各种常量池的区别(静态常量池、运行时常量池、字符串常量池)

    JVM内存分配 先了解下JVM中的内存分配,此处以hotspot vm为例(官方jdk采用的vm) 程序计数器 栈 1. 虚拟机栈 2. 本地方法栈 Java堆 堆内存是各个线程共享的区域 方法区 它 ...

  5. Go Home

    Go Home (https://www.luogu.com.cn/problem/AT_arc070_a) 比较需要理解题意的一个题目 看看题目解析:在0秒的时候有一只袋鼠在左右无限长的数轴上的原点 ...

  6. elastic-job源码(1)- job自动装配

    版本:3.1.0-SNAPSHOT git地址:https://github.com/apache/shardingsphere-elasticjob   Maven 坐标 <dependenc ...

  7. Python-webdriver_manager的简单使用

    前言: 提前祝大家五一快乐(*^▽^*) 我们在使用Selenium做UI自动化时都需要手动去下载各个浏览器版本的webdriver,有时我们可能还会遇到跨操作系统去进行测试. 以及有时因浏览器自动升 ...

  8. DataX更换python3,File “datax.py“, line 114 print readerRef

    datax 报错 File "datax.py", line 114 print readerRef 报错: File "datax.py", line 114 ...

  9. P1008 [NOIP1998 普及组] 三连击,置顶题解的问题

    题目链接: https://www.luogu.com.cn/problem/P1008 置顶题解 暴力,加简化的判断,数学原理,2个集合内所有数相加相乘结果一样,2个集合的内容一样(没错我自己编得, ...

  10. Prism Sample 5 View Injection

    这里稍微复杂了点,定义视图A的过程是一样的: <UserControl x:Class="ViewInjection.Views.ViewA" xmlns="htt ...