Хорошо, я немного поигрался и нашел решение, хотя и довольно хакерское.
Первая попытка - pdf_update_command + Okular
Это не работает полностью, так как он всегда будет переходить к началу файла после перезагрузки. Ради полноты я все равно добавлю это.
В Okular отключите автоматическую перезагрузку через «Настройки» -> «Настроить Okular» -> Выключите «Перезагрузить документ и изменить файл».
Измените файл .latexmkrc на:
$pdf_previewer = 'start okular --uniuqe %S';
$pdf_update_method = 4;
$pdf_update_command = 'okular --unique %S';
Это сообщает latexmk, что он должен выполнить команду pdf_update_command после того, как завершит обновление файла pdf. Что работает, документ в Okular постоянно виден во время компиляции и перезагружается по завершении. К сожалению, когда команда обновления выполнена, вы перейдете к началу документа. Это не то, что я хочу.
Вторая попытка - pdf_update_command + cp
Поскольку предыдущая попытка не сработала, сейчас я использую более хакерское решение. Для этого перезагрузка документа должна быть включена в Okular.
.Latexmkrc должен выглядеть так:
$pdf_previewer = 'start okular';
$pdf_update_method = 4;
$pdf_update_command = 'cp ~/path/to/doc.pdf ~/path/to/doc_preview.pdf';
Это копирует фактический файл документа в папку предварительного просмотра. Так что Okular нужно открыть для этого файла предварительного просмотра (а для другого файла вы должны закрыть его вручную). Это, конечно, не идеально, но делает то, что я хочу:
- Обновление PDF-файла в фоновом режиме
- Обновление только когда файл готов
- Работает по ssh
Обновление (спасибо Сэму Де Мейеру):
Если вы не хотите запускать программу предварительного просмотра, оставьте $ pdf_previewer пустым:
$pdf_previewer = ''
С другой стороны, если вам больше нравится закрывать окно, чем открывать его, можно указать «doc_preview.pdf» вместе с оригинальным pdf. Я не нашел способ открыть только второй файл PDF:
$pdf_previewer = 'start okular ~/path/to/doc_preview.pdf'
PS: Это работает с любым редактором, который автоматически перезагружает файлы, например, evince.