Использование кода Visual Studio с SumatraPDF для открытия исходных файлов LaTeX

Если дважды щелкнуть файл PDF, открытый с помощью SumatraPDF в ОС Windows, он вызовет команду (см. Синий прямоугольник на следующем рисунке).

Если файл PDF и его исходный файл LaTeX находятся в одной папке, то двойной щелчок по файлу PDF откроет исходный файл с помощью блокнота. Тем не менее, я не знаю, что ввести вместо notepad %f так что исходный файл открывается в коде Visual Studio. Есть идеи?

2 ответа

Вам необходимо установить пакет мастерской LaTeX и настроить его так, чтобы обратный поиск работал правильно. Инструкции изложены в вики LaTeX Workshop .


Что тебе необходимо сделать

Во-первых, вам необходимо убедиться, что в VSCode установлено расширение LaTeX Workshop .

  1. Измените следующие строки вSettings > Advanced Options..., замена<YOUR_USERNAME>и<OS_DRIVE>чтобы указать правильный исполняемый файл VSCode (и обязательно перезапишите значения, не добавляйте их просто в конец, иначе настройки не будут использоваться):
      InverseSearchCmdLine = "<OS_DRIVE>:\Users\<YOUR_USERNAME>\AppData\Local\Programs\Microsoft VS Code\Code.exe" -r -g "%f:%l"
EnableTeXEnhancements = true
  1. Как только вы это сделаете, перейдите в настройки VSCode JSON (CTRL + SHIFT + P> выбратьPreferences: Open User Settings (JSON)), затем добавьте следующие строки:
      "latex-workshop.view.pdf.viewer": "external",
  "latex-workshop.view.pdf.external.synctex.command": "<OS_DRIVE>:/Users/<YOUR_USERNAME>/AppData/Local/SumatraPDF/SumatraPDF.exe",
  "latex-workshop.view.pdf.external.synctex.args": [
    "-forward-search",
    "%TEX%",
    "%LINE%",
    "-reuse-instance",
    "-inverse-search",
    "\"<OS_DRIVE>:\\Users\\<YOUR_USERNAME>\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe\" -r -g \"%f:%l\"",
    "%PDF%"
  ],

вот и все...

Вы также можете добавить это в свойsettings.jsonесли вы хотите открыть предварительный просмотр и на Суматре:

      "latex-workshop.view.pdf.external.viewer.command": "<OS_DRIVE>:/Users/<YOUR_USERNAME>/AppData/Local/SumatraPDF/SumatraPDF.exe"

Эта настройка работает у меня на SumatraPDF.v3.4.6 (64-bit)и VSCode1.78.2в Windows.

Прямой/обратный поиск — это механизм PDFTeX для «синхронизации PDF» (очень похоже на временные гиперссылки в PDF).

      ForwardSearch [
    HighlightOffset = 0
    HighlightWidth = 15
    HighlightColor = #6581ff
    HighlightPermanent = false
]

нужно только:-

  • PDF-файл и сопутствующий файл PDFSync или SyncTeX, скомпилированные одновременно.
  • Программа чтения PDF-файлов, которая понимает эти взаимосвязи, и флажок, указывающий, в какой редактор следует отправить ответ.

Таким образом, подойдет любой известный редактор, и в Windows можно написать LaTeX в MS Notepad, поэтому двойной щелчок по строке может вызвать файл в «Блокноте MS по умолчанию», как показано.

ОДНАКО

MS Notepad не будет знать, какая строка требует внешней команды «goto», что для работы диалога требуется код VBS, см. сноску , поэтому обратная ссылка Notepad.exe — это просто проверка уверенности на уровне файла, что SyncTeX отлично работает в средстве просмотра, и тогда любые проблемы сводятся к настройке.

Существует много десятков редакторов LaTeX, поэтому лишь немногие из них будут автоматически настроены при обнаружении приложения SumatraPDF, когдаEnableTeXEnhancements = trueи VSCode.exe с расширителем LaTeX несколько раз меняли свои методы!

Технически LaTeX-Workshop не поддерживает вызов SumatraPDF! см. https://github.com/James-Yu/LaTeX-Workshop/wiki/View#using-synctex-with-an-external-viewer

Таким образом, большинство редакторов LaTeX, таких как NotePad++ (notepad++.exe "%f" -n%l) и т. д., могут отправлять свое местоположение во время компиляции, и это причина, по которой зрителю требуется повторная команда -inverse-search ТОЛЬКО ОДИН РАЗ. настроить для ЭТОГО редактора. Таким образом, НЕТ НЕОБХОДИМОСТИ после первого вызова «-inverse-search» и следующей строки exe в редакторе, если его отправлять повторно в течение дня, это может просто вызвать проблемы. так же-reuse-instanceдолжен быть установлен какReuseInstance = trueв настройках и не отправляется повторно. см. https://github.com/sumatrapdfreader/sumatrapdf/issues/1197 .

Обратный поиск может быть отправлен ОДИН РАЗ редактором TeX или очень легко для нескольких редакторов, с помощью любой внешней команды, такой как пакетный файл, ИЛИ вручную, затем он сохраняется в настройках программы просмотра PDF до тех пор, пока не будет изменен снова. Для VSCode.exe вы можете использовать

      -g or --goto    When used with file:line{:character}, opens a file at a specific line and optional character position. This argument is provided since some operating systems permit : in a file name.

также

      -r or --reuse-window    Forces opening a file or folder in the last active window.

таким образом, обычная команда обратного поиска обычно будет такой:

"c:\path...\.\.\...to\code.exe" -r -g "%f:%l"(то есть строчная буква L для строки)

используя короткие переключатели и опуская {:%c}, поскольку обычно это нефункционально

Для других, использующих электрон, это может быть необходимо в терминах json согласно Wiki https://github.com/James-Yu/LaTeX-Workshop/wiki/View#sumatrapdf .

"C:\Users\<Username>\AppData\Local\Programs\Microsoft VS Code\Code.exe" "C:\Users\<Username>\AppData\Local\Programs\Microsoft VS Code\resources\app\out\cli.js" --ms-enable-electron-run-as-node -r -g "%f:%l"

Однако SumatraPDF не поддерживает JS как таковой, поэтому здесь все может быть по-другому.

БУДЬТЕ ВНИМАТЕЛЬНЫ (YMMV)

В SumatraPDF 3.4.6 (установлена ​​64-разрядная версия) могут возникнуть проблемы с чтением некоторых форматов сжатия SyncTeX, поэтому используйте установленную 32-разрядную версию или переносимую 64-разрядную версию ИЛИ удалите флаг PDFTeX compress synctex.gz.

Большинство/все? такие проблемы должны были быть исправлены в предварительной версии 3.5.15388 и далее.

[сноска], чтобы увидеть, как SyncTeX работает без активного LaTeX, есть демонстрационный скрипт TeXtPaD для блокнота в zip-архиве внизу комментария https://github.com/sumatrapdfreader/sumatrapdf/discussions/3489#discussioncomment-6018474

Другие вопросы по тегам