TinyTeX + VSCode

LaTeX 是科研人員經常用到的一門排版語言,用來編寫專業的數學公式非常方便,然而 LaTeX 環境的安裝卻十分麻煩,如果要裝 LaTeX 環境應該很多人都會選擇裝 TeX Live,可是 TeX Live 的體積龐大,內含多個包的技術文件,動輒好幾 G;為了解決這個問題,TinyTeX 誕生了,把對用戶毫無用處的原始碼與文件去除,進而降低佔用空間,根據需求自動安裝缺失的包,對喜愛 KISS 哲學的 Arch User 是一大福音。

TinyTeX 剛出幾年而已,網路上資料並不多,今天安裝這個研究了好久總算搞定,寫篇教學記錄一下。

安裝 R 語言

TinyTeX 是用 R 語言編寫的,執行時需要依賴 R 語言環境。

1
pacman -S r

安裝完成後輸入 R 確認是否安裝成功。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
$ R
R version 4.0.4 (2021-02-15) -- "Lost Library Book"
Copyright (C) 2021 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R 是免費軟體,不提供任何擔保。
在某些條件下您可以將其自由散布。
用 'license()''licence()' 來獲得散布的詳細條件。

R 是個合作計劃,有許多人為之做出了貢獻。
用 'contributors()' 來看詳細的情況並且
用 'citation()' 會告訴您如何在出版品中正確地參照 R 或 R 套件。

用 'demo()' 來看一些示範程式,用 'help()' 來檢視線上輔助檔案,或
用 'help.start()' 透過 HTML 瀏覽器來看輔助檔案。
用 'q()' 離開 R。

>

安裝 TinyTeX

雖然 Arch Wiki 說 AUR 裡面有 R 語言的套件,可以用 Pacman 管理,但我安裝 AUR 裡的 TinyTeX 卻出現一堆問題,折騰了一番還是沒成功編譯 TeX,最後還是直接用 R 去安裝 TinyTeX。

安裝 TinyTeX 前先確保系統中沒有其他 LaTeX 套件,如:TeX Live、MiKTeX、MacTeX 等,一個系統裡最好不要有兩個 LaTeX 套件存在,否則可能會發生衝突。

在 R 語言交互界面輸入下面指令安裝 TinyTeX,會自動從 TinyTeX 官網下載。

使用 install.packages() 函數時可能會報錯 無法載入共享物件 '/usr/lib/R/library/tcltk/libs/tcltk.so',這是因為 install.packages() 需要用 tk 叫出 GUI 來選擇鏡像,安裝 tk 包就可以解決。

1
2
> install.packages('tinytex')
> tinytex::install_tinytex()

如果你使用非 root 用戶安裝,可能會出現以下提示,問你是否儲存到家目錄下,直接 Yes 就好。

1
2
3
4
5
6
7
> install.packages('tinytex')
Warning in install.packages("tinytex") :
  'lib = "/usr/lib/R/library"' is not writable
Would you like to use a personal library instead? (yes/No/cancel) y
Would you like to create a personal library~/R/x86_64-pc-linux-gnu-library/4.0to install packages into? (yes/No/cancel) y

如果安裝 TinyTeX 過程過慢,可以到 GitHub Release 用瀏覽器下載,再把檔案路徑傳給安裝函數。

選擇預編譯好的安裝檔

1
> tinytex:::install_prebuilt("~/TinyTeX-1-v2021.03.tar.gz")

安裝完成後退出 R 交互界面(Ctrl+D),編輯 ~/.bash_profile,在環境變數裡加入 ~/bin

1
export PATH=~/bin:$PATH

套用環境變數。

1
source ~/.bash_profile

更換 CTAN 鏡像

如果你在中國大陸使用 TinyTeX 的話建議你換鏡像來加速下載,雖然預設的鏡像是南方科技大學的,但不知道速度為什麼這麼慢,我換成上海交大鏡像站就快多了。

1
> tinytex::tlmgr_repo("https://mirrors.sjtug.sjtu.edu.cn/ctan/")

測試編譯

先編寫一個 TeX 檔案進行編譯測試,並儲存為 hello.tex

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
\documentclass{article}
\usepackage{xeCJK}
\usepackage{amsmath}
\setCJKmainfont{Noto Serif CJK TC}
\begin{document}
TinyTeX 測試。

數學公式測試:
\begin{align*}
    \lim\limits_{\Delta x \rightarrow 0} \frac{\cos \Delta x-1}{\Delta x} = 1
\end{align*}
\end{document}

開啟 R,並輸入下面指令。

1
2
> setwd("/home/chunyu/Sites/TeX")  # 設置 R 工作目錄
> tinytex::xelatex("hello.tex") # 用 xelatex 編譯

這時 TinyTeX 會自動從 CTAN 中下載需要的包,初次跑這個指令可能會慢一點。

xelatex 編譯 hello.tex

編譯成功的話會產生 hello.pdf,打開可以看見編譯效果。

hello.tex 編譯效果

配合 VSCode LaTeX Workshop

安裝 LaTeX Workshop 擴充功能

直接 Ctrl+P 輸入下面指令安裝或是在側邊欄 Extensions 頁面搜尋 LaTeX Workshop。

1
ext install James-Yu.latex-workshop

配置

平常我都是在 VSCode 搭配 TeX Workshop 擴充功能來寫 LaTeX 並自動編譯,但 TinyTeX 是用 R 語言安裝的,編譯程式不能直接在環境變數中找到,要通過 R 去呼叫腳本。

File > Settings 搜尋 latex-workshop.latex.tools,點編輯 settings.json

編輯 latex-workshop.latex.tools 設定

加入下面內容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
"latex-workshop.latex.tools": [
    {
        "name": "tinytex_xelatex",
        "command": "Rscript",
        "args": [
            "-e",
            "tinytex::xelatex(commandArgs(trailingOnly=TRUE)[1],clean=FALSE,engine_args=\"-synctex=1\")",
            "%DOC_EXT%"
        ]
    }
]

再來添加 Recipe,一樣搜尋 latex-workshop.latex.recipes 編輯 settings.json 加入下面內容:

1
2
3
4
5
6
7
8
"latex-workshop.latex.recipes": [
    {
        "name": "xelatex (tinytex)",
        "tools": [
            "tinytex_xelatex"
        ]
    }
]

重啟 VSCode,點選側邊欄的 LaTeX Workshop 界面就會出現剛才新增的 Recipe,點擊編譯一次成功後,以後儲存 TeX 檔就會自動產生 PDF 了。

TeX Workshop 裡新增的 Recipe

在折騰的時候偶然看見 LaTeX Workshop 的官方文件中是這麼形容 TinyTeX 的,意思是喜歡冒險的可以裝 TinyTeX?今天安裝 TinyTeX 確實挺折騰的,官方文件寫得很簡單,但實際上遇到不少問題,當然有一部分是我擅作主張安裝 AUR 裡的包造成的,官方也沒寫如何在 VSCode 配置,研究了一會才搞定,反正大家按我的教學走應該不會出什麼大問題。

LaTeX Workshop README

References