Можно ли сделать так, чтобы окуляр не мигал при перезагрузке файла?

11

Когда я пишу документ TeX, я использую настройку для автоматической перекомпиляции моих файлов * .tex в pdf, как только изменяется исходный файл (с использованием latexmk). Поэтому я поместил терминал с nvim на одной стороне экрана и окуляр с выводом pdf на другой стороне экрана.

Раздражает то, что окуляр мигает / мигает каждый раз, когда обновляется pdf. Это особенно заметно, когда у меня есть глоссарии + ссылки + указатель. Затем Okular будет мигать от 3 до 5 раз в зависимости от того, что изменилось в источнике * .tex, и я нахожу это действительно отвлекающим. Есть ли способ отключить это поведение перепрошивки?

Сэм Де Мейер
источник
3
Настройки -> Настроить Okular -> Общие -> Возможности программы -> снять галочку «Перезагрузить документ при изменении файла». Затем нажмите F5, чтобы перезагрузить PDF только при желании.
皞 皞
Ну, это решает проблему перепрошивки, но вводит новую проблему, теперь мне приходится нажимать клавишу F5 каждый раз, когда я хочу увидеть обновление. Я надеялся, что есть какой-то способ автоматически перезагрузить файл без отвлекающей флэш-памяти, но, возможно, это невозможно с помощью Okular. Во всяком случае, спасибо за временное решение.
Сэм Де Мейер
1
Файл обновляется несколько раз в процессе сборки. Каждый раз, когда файл обновляется, Okular обновляет его. Okular, похоже, не имеет опции «если он обновляется, подождите N секунд, чтобы увидеть, если он обновится снова, прежде чем обновлять».
Энди Далтон
Даже это было задано некоторое время назад, я хотел отметить, что ведет себя, может быть, больше похоже на то, что вы хотите. Если вы нашли другое хорошее решение, сообщите нам. У меня точно такая же проблема ... (и я не могу использовать evince, так как у него есть проблемы с x-forwarding)
Exocom

Ответы:

2

Хорошо, я немного поигрался и нашел решение, хотя и довольно хакерское.

Первая попытка - 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 нужно открыть для этого файла предварительного просмотра (а для другого файла вы должны закрыть его вручную). Это, конечно, не идеально, но делает то, что я хочу:

  1. Обновление PDF-файла в фоновом режиме
  2. Обновление только когда файл готов
  3. Работает по ssh

Обновление (спасибо Сэму Де Мейеру):

Если вы не хотите запускать программу предварительного просмотра, оставьте $ pdf_previewer пустым:

$pdf_previewer = ''

С другой стороны, если вам больше нравится закрывать окно, чем открывать его, можно указать «doc_preview.pdf» вместе с оригинальным pdf. Я не нашел способ открыть только второй файл PDF:

$pdf_previewer = 'start okular ~/path/to/doc_preview.pdf'

PS: Это работает с любым редактором, который автоматически перезагружает файлы, например, evince.

Exocom
источник
1
Привет, трюк cp может сработать. Вам действительно нужно сделать «начать окулярно» в «просмотрщике PDF». Может быть, вы можете просто оставить его пустым или указать команду, которая ничего не делает? Тогда все, что вам нужно сделать, это открыть okular на копии при первой компиляции. Разве это не решит проблему?
Сэм Де Мейер
Да, оставляя это пустым, уловка не начинается окулярно. Благодарю. Обновит ответ (также с дополнением, которое запускает превью для обоих файлов). Все то, что обновление файла появляется только после завершения компиляции, очень помогает. Я просто пишу более крупный тезис, где это действительно пригодится.
Exocom