Автоматизировать компиляцию LaTeX в Bash, получая измененные текстовые файлы из Git? - PullRequest
1 голос
/ 17 апреля 2020

Я хочу получить измененные текстовые файлы из переменной Git в Bash, чтобы можно было автоматизировать процесс компиляции измененных текстовых файлов.

Пример

$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   Article/main.tex

, где я хотел бы запустить скрипт с командой pdflatex Article/main.tex после получения пути от git.

Как я могу получить измененные Tex-файлы с Git на Bash переменная для того, чтобы скомпилировать их с pdflatex?

Предложения

  1. latexdiff здесь
  2. latexmk здесь
  3. комментирует deadObed
  4. git diff --name-only в комментарии Леа Гри

1 Ответ

1 голос
/ 17 апреля 2020

Есть множество вариантов для этого. Я благодарю Леа Гри за работу над решениями здесь.

Альтернативы

1. Для одного измененного Tex-файла это будет сделано

pdflatex `git diff --name-only | grep *.tex`

2. Для многих каталогов измененных Tex-файлов они должны иметь разные имена, в которых скомпилированные PDF-файлы появятся в текущем каталоге.

git diff --name-only '*.tex' | xargs -l1 pdflatex

3. По словам Ли, для одноименных измененных Tex-файлов (еще не получилось, пытаясь понять, я объяснил вариант здесь )

git diff --name-only '*.tex' | xargs -l1 -I{} sh -c 'cd "${1%/*}"; pdflatex "$1"' _ {}

Solid решения

4. Попробуйте Latexmk, специальную версию make, которая выполняет все перекомпиляции и перестройки только для LaTeX. Вместо bash я нахожу Python гораздо более удобным для использования в разных системах, таких как

import os  
Articles   =["A","B","C"]

for article in Articles:
    #Compiling
    os.system("latexmk -pdf -auxdir=tmp "+article)

, где мы используем latexmk для компиляции. Затем ниже показано, как вы можете использовать скрипт с Makefile.

Makefile

all:
     python runAboveScript.py

clean:
     os.system("rm *.snm")
     os.system("rm *.nav")
     #Add here everything you want to clean.  

Дополнительная информация

  1. Makefile для латексного проекта здесь

  2. Latexmk подробнее здесь

...