Использование кода Visual Studio с SumatraPDF для открытия исходных файлов LaTeX
Если дважды щелкнуть файл PDF, открытый с помощью SumatraPDF в ОС Windows, он вызовет команду (см. Синий прямоугольник на следующем рисунке).
Если файл PDF и его исходный файл LaTeX находятся в одной папке, то двойной щелчок по файлу PDF откроет исходный файл с помощью блокнота. Тем не менее, я не знаю, что ввести вместо notepad %f
так что исходный файл открывается в коде Visual Studio. Есть идеи?
2 ответа
Вам необходимо установить пакет мастерской LaTeX и настроить его так, чтобы обратный поиск работал правильно. Инструкции изложены в вики LaTeX Workshop .
Что тебе необходимо сделать
Во-первых, вам необходимо убедиться, что в VSCode установлено расширение LaTeX Workshop .
- Измените следующие строки в
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
- Как только вы это сделаете, перейдите в настройки 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