Компілювання документів LaTeX на texlive.net
Я щойно усвідомив, що не готовий встановити багато-гігабайтний дистрибутив TexLive у 32 ГБ файлову систему мого ноутбука, переробленого з хромбука. А мені потрібно іноді поновлювати резюме. На щастя, є веб-служба саме для цього: texlive.net. Вона виявилася спроможною відобразити моє резюме з допомогою XeLaTeX через тестову сторінку, але так відразу не вийшло, коли я спробував навпростець використати їхній API. Ось як мені це зрештою вдалося.
Відповідно до їхньої
документації,
параметри потрібно надсилати запитом HTTP POST multipart/form-data. Для цього
зручно застосувати curl. І це спрацювало на простих тестових
документах. Але коли я спробував із справжнім резюме, компіляція щоразу була
неуспішною, поки вживався пакунок hyperref
. Порівняння мережевого перехоплення
Firefox із curl --trace-ascii
, виявило, що з веб-сторінки надсилається більший
Content-Length
для практично такої самого набору параметрів. Ага! Напевно,
служба чутлива до формату розділення рядків. Чомусь очікується \r\n
, а мій файл
було створено із звичним для Unix \n
.
Тож ось мій скрипт для нотатки:
#!/bin/bash -e
# Скомпілювати документ xelatex з допомогою API https://texlive.net
name="$1"
texlive="https://texlive.net"
# Компіляція зазнає невдачі, якщо документ не використовує CRLF для розділення рядків
headers=$(curl -s -i \
-F "filecontents[]=@${name}" \
-F "filename[]=document.tex" \
-F "engine=xelatex" \
-F "return=pdf" \
${texlive}/cgi-bin/latexcgi)
location=$(echo "$headers" | grep -Po '(?<=Location: )(/latexcgi/.*?)(?=\r)')
if [[ "$location" == *.pdf ]]; then
curl -s -Lo ${name/.tex/.pdf} ${texlive}${location}
else
curl -s -L ${texlive}${location} >&2
exit 1
fi