Руководство по автоматическому обновлению PDF с помощью latexmk и VSCode

Table of Contents
Introduction
1. Installing LaTeX
2. Creating PDF from a terminal using latexmk
3. Installing LaTeX Workshop Extension to VS Code
4. Create your own snippets
5. Testing the snippet
6. LaTeX Workshop error
7. Automatically update PDF when you save
Conclusion

Вступление

Я иногда пользуюсь LaTeX. Я использую Typora для написания статей, отчетов, заметок и прочего. Но у меня нет полного контроля над макетом с уценкой. Поэтому я перезапустил LaTeX. Я хочу поделиться тем, что узнал. В этой статье показано, как настроить LaTeX с VS Code, чтобы он автоматически обновлял PDF-файл при сохранении tex-файла.

Установка LaTeX

На этот раз я установил mactex-no-gui.

Mac:

# macOS MacTex Install
$ brew install --cask mactex-no-gui
# Updating the packages
$ sudo tlmgr update --self && sudo tlmgr update --all

Установка прошла достаточно быстро, но обновление заняло много времени.
Возможно, вам придется перезапустить терминал и проверить, работает ли он:

$ latex --version
$ latexmk --version
$ platex --version

Если это не сработает, вам нужно добавить PATH к вашему ~/.zshrc или ~/.bash_profile:

export PATH="/Library/TeX/texbin/:$PATH"

Проверьте это еще раз:

$ latex --version
pdfTeX 3.14159265-2.6-1.40.21 (TeX Live 2020)
kpathsea version 6.3.2
...
$ latexmk --version
Latexmk, John Collins, 29 September 2020. Version 4.70b
...
$ platex --version
e-pTeX 3.14159265-p3.8.3-191112-2.6 (utf8.euc) (TeX Live 2020)
kpathsea version 6.3.2
...

Установка Linux:

# Arch Linux Family
sudo pacman -S texlive-most
# For Ubuntu, you might need a ppa:
sudo add-apt-repository ppa:jonathonf/texlive
sudo apt update && sudo apt install texlive-full
# Fedora
sudo dnf install texlive-scheme-full

Для Windows и других ОС Linux см. Эту страницу.



Создание PDF из терминала с использованием latexmk

Часто приходится запускать LaTeX более одного раза. latexmk поможет вам избежать этой неприятности.
Latexmk - это скрипт Perl, который вам просто нужно запустить один раз, а все остальное он сделает за вас.

Вот как использовать latexmk:

$ latexmk -silent text.tex

Он автоматически обновит файл PDF при сохранении файла tex. Мы можем улучшить его, изменив файл .latexmkrc в вашем домашнем каталоге.

$ touch ~/.latexmkrc

И добавим следующее.

#!/usr/bin/env perl
# LaTeX
$latex = 'latex -synctex=1 -halt-on-error -file-line-error %O %S';
$max_repeat = 5;
# BibTeX
$bibtex = 'pbibtex %O %S';
$biber = 'biber --bblencoding=utf8 -u -U --output_safechars %O %S';
# index
$makeindex = 'mendex %O -o %D %S';
# DVI / PDF
$dvipdf = 'dvipdfmx %O -o %D %S';
$pdf_mode = 3;
# preview
$pvc_view_file_via_temporary = 0;
if ($^O eq 'linux') {
    $dvi_previewer = "xdg-open %S";
    $pdf_previewer = "xdg-open %S";
} elsif ($^O eq 'darwin') {
    $dvi_previewer = "open %S";
    $pdf_previewer = "open %S";
} else {
    $dvi_previewer = "start %S";
    $pdf_previewer = "start %S";
}
# clean up
$clean_full_ext = "%R.synctex.gz"
  • Мы используем platex и dvipdfmx для преобразования текстового файла в PDF.
  • latexmk -pv text.tex после сборки отобразит PDF-файл.
  • latexmk -pvc text.tex обновит файл PDF при сохранении файла tex. (Вам нужно щелкнуть файл PDF, чтобы увидеть обновление.)
  • Вы можете прекратить просмотр обновленных файлов до ctrl+C.

Установка расширения LaTeX Workshop в VS Code

Теперь перейдем к VS Code. Мы можем использовать VS Code для редактора LaTeX.

После установки LaTeX Workshop вы увидите значок TEX в конце левой боковой панели.

Расширение LaTeX Workshop создает PDF-файл при сохранении, и вы можете просматривать PDF-файл в VS Code или в браузере. Он имеет функции форматирования, дополнения intellisense, выделения синтаксиса, фрагментов и ярлыков и многое другое.

Вы можете предварительно просмотреть PDF-файл, нажав «Просмотр LaTeX PDF».

Откройте файл settings.json с помощью CMD / CTRL + SHIFT + P.

В settings.json добавьте следующее:

{
// your other settings
// ...
// ...
// ---------- Language ----------
    "[tex]": {
        // Enable intellisence/quick suggestions
        "editor.suggest.snippetsPreventQuickSuggestions": false,
        // Indentation size
        "editor.tabSize": 2
    },
    "[latex]": {
        // Enable intellisence/quick suggestions
        "editor.suggest.snippetsPreventQuickSuggestions": false,
        // Indentation size
        "editor.tabSize": 2
    },
    "[bibtex]": {
        // Indentation size
        "editor.tabSize": 2
    },
    // ---------- LaTeX Workshop ----------
    //  Enable command and environment completion for used package
    "latex-workshop.intellisense.package.enabled": true,
    // target file when deleting generated file
    // Add "* .synctex.gz" to default value
    "latex-workshop.latex.clean.fileTypes": [
        "*.aux",
        "*.bbl",
        "*.blg",
        "*.idx",
        "*.ind",
        "*.lof",
        "*.lot",
        "*.out",
        "*.toc",
        "*.acn",
        "*.acr",
        "*.alg",
        "*.glg",
        "*.glo",
        "*.gls",
        "*.ist",
        "*.fls",
        "*.log",
        "*.fdb_latexmk",
        "*.snm",
        "*.nav",
        "*.dvi",
        "*.synctex.gz"
    ],
    // dump generated files to "out" directory
    "latex-workshop.latex.outDir": "out",
    // Build recipe
    "latex-workshop.latex.recipes": [
        {
            "name": "latexmk",
            "tools": [
                "latexmk"
            ]
        },
    ],
    // Parts used in the build recipe
    "latex-workshop.latex.tools": [
        {
            "name": "latexmk",
            "command": "latexmk",
            "args": [
                "-silent",
                "-outdir=%OUTDIR%",
                "%DOC%"
            ],
        },
    ],
}

По умолчанию интеллектуальные / быстрые предложения не запускаются внутри сниппета. Для их включения установите:

"editor.suggest.snippetsPreventQuickSuggestions": false,

Создавайте свои собственные сниппеты

LaTeX Workshop предоставляет множество сниппетов и ярлыков. Вы также можете добавить свои собственные сниппеты. Щелкните шестеренку слева внизу на панели инструментов VS Code и выберите User Snippets.

И выберите в меню latex.json (LaTeX).

Давайте создадим базовый шаблон. Это пример фрагмента, который вы можете добавить:

{
 "report": {
  "prefix": "report",
  "body": [
   "\\documentclass[${1:a4paper,11pt}]{${2:jsarticle}}",
   "",
   "",
   "% Math",
   "\\usepackage{amsmath,amsfonts}",
   "\\usepackage{bm}",
   "% image",
   "\\usepackage[dvipdfmx]{graphicx}",
   "\\usepackage[english]{babel}",
   "$3",
   "",
   "\\begin{document}",
   "",
   "\\title{$4}",
   "\\author{$5}",
   "\\date{${6:\\today}}",
   "\\maketitle",
   "",
   "",
   "$0",
   "",
   "",
   "\\end{document}"
  ],
  "description": "LaTeX Sample Template"
 }
}

Вы можете добавить более одного фрагмента:

{
 "report": {
  "prefix": "report",
  "body": [
  ...
  "description": "LaTeX Sample Template"
 },
 "note": {
  "prefix": "note",
  "body": [
  ...
  "description": "Note format"
 },
  "exam": {
  "prefix": "exam",
  "body": [
  ...
  "description": "Exam format"
 }
}

Тестирование сниппета

Я обнаружил, что остановка табуляции VScode не работает с Vim / vscodevim, поэтому, если вы ее используете, вам необходимо отключить ее.

Ошибка мастерской LaTeX

Когда вы сохраняете текстовый документ и получаете следующую ошибку, вам необходимо установить несколько пакетов Perl.

Сначала установите последнюю версию Perl:

# For Mac
$ perl -v
This is perl 5, version 18, subversion 2 (v5.18.2) built for darwin-thread-multi-2level
(with 2 registered patches, see perl -V for more detail)
Copyright 1987-2013, Larry Wall
...
$ brew install perl

Откройте новую вкладку или перезапустите терминал и проверьте установленную версию:

$ perl -v
This is perl 5, version 32, subversion 0 (v5.32.0) built for darwin-thread-multi-2level
Copyright 1987-2020, Larry Wall

Вам необходимо установить следующие пакеты Perl:

$ cpan
cpan[1]>install Log::Log4perl
Running install for module 'Log::Log4perl'
...
cpan[2]>install Log::Dispatch::File
Running install for module 'Log::Dispatch::File'
...
cpan[3]>install YAML::Tiny
Running install for module 'YAML::Tiny'
...
cpan[4]>install File::HomeDir
Running install for module 'File::HomeDir'
...
cpan[5]>install Unicode::GCString
Running install for module 'Unicode::GCString'
...

Автоматически обновлять PDF при сохранении

Вы можете просмотреть свой PDF-файл, щелкнув Просмотр на вкладке VSCode или Просмотр в веб-браузере в меню LaTeX Workshop.

Когда вы обновляете и сохраняете файл tex, он автоматически обновляет файл PDF.

Заключение

MacTeX - это огромный файл, но использование mactex-no-gui и VS Code позволяет нам обновлять текст при сохранении файла.

Теперь вы знаете, как создать PDF-файл на своем терминале с помощью latexmk. Если вы предпочитаете графический интерфейс для преобразования LaTeX в PDF, LaTeX Workshop - отличный инструмент. Вы можете создать свой собственный фрагмент LaTeX в VSCode.

Я надеюсь, что вы нашли это полезным, и надеюсь, что это поможет вашей продуктивности при написании документов LaTeX.

использованная литература

Новостная рассылка

Получите полный доступ ко всем статьям на Medium, став участником.