在 Mac 上以 VS Code 編輯 LaTeX
本文基於以下幾篇文章完成,由於我只需要 Paper 和 Book 兩種版型所以省略了很多步驟,如果需要完整版教學的請看原文:
以及 Windows 系統的用法,由於 Docker 模擬 Linux 環境,所以應該是比較不容易出問題的方案
- LaTeX Workshop – 在VSCode中編輯及編譯LaTeX
- 使用VSCode上撰寫中文LaTeX文件
- Building LaTeX projects on Windows easily with Docker
應該本地編輯還是使用 Overleaf?
寫這篇文章前我思考了一下是否該在本地編輯 LaTeX,或者使說免費的線上服務 Overleaf,我認為有這三個重點考量。
編譯時間
以我的情境來說,我使用包含 tikz 套件,並且文章內包含其他 PDF 的文件,長度約 70 頁 A4,以此場景作為測試基準:
- 在 M1 Mac 上編譯耗時約 7.5 秒,Overleaf 上編譯時間為 10 秒
- 在 Overleaf 上會不斷被警告編譯超時,但 98% 機會都可以成功編譯
因此如果電腦比 M1 爛可以考慮直接在 Overleaf 上編輯,但是當頁數更多或者套件內容更複雜時就可以考慮本地安裝。
容量問題
在容量寸土寸金的 Mac 上 MacTeX 需要 6GB 的儲存空間,Windows 就無此困擾。
錯誤處理
Overleaf 幫你處理了常見問題,如 build command, 字體等等,這些問題在本地需要自行解決。
安裝教學
想要在本地編譯 LaTeX,以本教學來說需要安裝以下這些東西:
- brew 套件管理 器
- MacTeX,LaTeX 本身
- VS Code,文字編輯器,因為 MacTeX 編輯器醜到不行
- VS Code 的 LaTeX 插件 LaTeX Workshop
- 安裝標楷體
安裝 Brew
先安裝套件管理器,後續所有安裝都使用此管理器。
# 安裝
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 刷新 shell
exec zsh
# 檢查
brew --version
# 如果沒有找到 brew,需要把 brew 加入系統路徑
echo 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.zshrc
# 再次刷新 shell
exec zsh
網路教學會把加入系統路徑的指令改為 echo 'eval $(/opt/homebrew/bin/brew shellenv)' >> ~/.zprofile
,兩者差別為前者只會加入系統路徑,後者除了系統路徑還會加上補全系統,這會導致終端機啟動速度變慢,依照個人需求選擇。
安裝 LaTeX
MacTeX 容量 6GB,他的伺服器網速又很慢,安裝時可以先去滑手機。
# 安裝 MacTeX
brew install --cask MacTeX-no-gui
# 安裝完成後重新開啟終端機
# 更新 LaTeX packages
sudo tlmgr update --self
sudo tlmgr update --all
安裝 VS Code
只需要一行就可完成。
brew install --cask visual-studio-code
安裝 VS Code LaTeX 插件
點擊此連結安裝 LaTeX Workshop。
安裝標楷體
Windows 和 Mac 的標楷體雖然名稱一樣但是顯示效果不一樣,這大家應該都知道,如果沒有和 Windows 系統一樣的標楷體,換到 Windows 開就一定會跑版,解決方法是請找到符合著作權法的 ttf 檔案替換,該怎麼找請自行上網解決。
設定
安裝完成後還要設定才能使用,這些設定包含 Mac 一定會遇到的字體問題。
設定 LaTeX 編譯
- 複製以下文本
Preferences: Open User Settings (JSON)
- 打開 VS Code,按下
command + shift + p
,貼上剛才複製的文本,enter 進入。 - 貼上以下設定檔
{
"LaTeX-workshop.LaTeX.tools": [
{
"name": "xeLaTeX",
"command": "/Library/TeX/TeXbin/xeLaTeX",
"args": [
"-syncTeX=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOC%"
]
},
{
"name": "bibTeX",
"command": "/Library/TeX/TeXbin/bibTeX",
"args": [
"%DOCFILE%"
]
},
{
"name": "LaTeXmk-xeLaTeX",
"command": "/Library/TeX/TeXbin/LaTeXmk",
"args": [
"-xeLaTeX",
"-syncTeX=1",
"-interaction=nonstopmode",
"-file-line-error",
"-outdir=%OUTDIR%",
"%DOC%"
]
}
],
"LaTeX-workshop.LaTeX.recipes": [
{
"name": "XeLaTeX ➞ bibTeX ➞ XeLaTeX×2",
"tools": [
"xeLaTeX",
"bibTeX",
"xeLaTeX",
"xeLaTeX"
]
},
{
"name": "LaTeXmk 🔃",
"tools": [
"LaTeXmk-xeLaTeX"
]
}
],
"LaTeX-workshop.view.pdf.viewer": "tab",
"LaTeX-workshop.LaTeX.autoBuild.run": "onSave",
"LaTeX-workshop.LaTeX.autoClean.run": "onFailed",
"LaTeX-workshop.LaTeX.clean.fileTypes": [
"*.aux",
"*.bbl",
"*.blg",
"*.idx",
"*.ind",
"*.lof",
"*.lot",
"*.out",
"*.toc",
"*.acn",
"*.acr",
"*.alg",
"*.glg",
"*.glo",
"*.gls",
"*.fls",
"*.log",
"*.fdb_LaTeXmk",
"*.snm",
"*.syncTeX(busy)",
"*.syncTeX.gz(busy)",
"*.nav"
],
"LaTeX-workshop.LaTeX.recipe.default": "lastUsed",
"LaTeX-workshop.view.pdf.internal.syncTeX.keybinding": "double-click",
"editor.unicodeHighlight.allowedLocales": {
"zh-hans": true,
"zh-hant": true
},
"[LaTeX]": {
"editor.defaultFormatter": "James-Yu.LaTeX-workshop"
}
}
其中 LaTeX-workshop.LaTeX.recipes
是目錄,平常使用就是選擇以哪個 recipe 進行編譯,而 LaTeX-workshop.LaTeX.tools
代表的是該 recipe 執行的具體方式。
完整版本請見 科研必会——在Mac上配置LaTeX写作环境,我用不到那麼多所以只留下必要的,兩個分別代表
- XeLaTeX ➞ bibTeX ➞ XeLaTeX×2: 傳統編譯方式,需要先編譯 XeLaTeX,再回來編 bibTeX,最後又要整合,耗時約 20 秒,比 Overleaf 更慢。
- LaTeXmk: 整合上述步驟,執行時間只需要 7.5 秒。
設定字體
以我的 LaTeX 文件來說,這是我原始在 Overleaf 的設定,需要直接把 BiauKai.ttf 丟上去
\setCJKmainfont[AutoFakeBold=6,AutoFakeSlant=.4]{[BiauKai.ttf]}
\defaultCJKfontfeatures{AutoFakeBold=6,AutoFakeSlant=.4}
\newCJKfontfamily\Kai{[BiauKai.ttf]} %定義指令\Kai則切換成標楷體
現在改為本地編譯,直接使用系統 ttf 檔案,改為以下
\setCJKmainfont[AutoFakeBold=6,AutoFakeSlant=.4]{DFKai-SB}
\defaultCJKfontfeatures{AutoFakeBold=6,AutoFakeSlant=.4}
\newCJKfontfamily\Kai{DFKai-SB}
其中 DFKai-SB
這個字串是 ttf 檔案裡面設定的字體名稱,使用以下指令檢查你的名稱是否也是 DFKai-SB
:
# 安裝字體套件
brew install fontconfig
# 檢查字體檔案
fc-list | grep "/Library/Fonts/kaiu.ttf"
# 輸出
>>> /Library/Fonts/kaiu.ttf: DFKai\-SB,標楷體:style=Regular
此輸出代表 DFKai-SB
和 標楷體
都是字體名稱。
設定 VS Code 換行
由於 LaTeX 通常一行很長,所以要設定自動換行 (wrap),如果目錄中沒有 .vscode/settings.json
,直接在終端機貼上
mkdir -p .vscode
cat > .vscode/settings.json <<EOF
{
"editor.wordWrap": "on"
}
EOF
或者手動開啟文件加入
"editor.wordWrap": "on"