Использование чеканителя (исходный код пакета LaTeX) с emacs/auctex

Как объясняется в здесь, я считаю, что отчеканенный пакет довольно крут для списка исходного кода.

Мой вопрос в том, как использовать отчеканенный пакет с AucTeX/emacs? Для командной строки я могу использовать pdflatex -shell-escape SOURCE, но

  • Q1: Как я могу изменить AucTeX, чтобы вставить -shell-escape? Я имею в виду, как изменить действие для C - C + C - C?
  • Q2: Мне нужен специальный ключ, отличный от C - C + C - C для параметра -shell-escape? Или, это просто нормально использовать его без каких-либо проблем?
  • Q3: для чего нужен -shell-escape?

Ответ 1

Q1: вам нужно отредактировать способ, которым LaTeX вызывается AucTeX. Один из способов сделать это - добавить в файл .emacs следующее:

(eval-after-load "tex" 
  '(setcdr (assoc "LaTeX" TeX-command-list)
          '("%`%l%(mode) -shell-escape%' %t"
          TeX-run-TeX nil (latex-mode doctex-mode) :help "Run LaTeX")
    )
  )

Q2: После внесения изменений все вызовы LaTeX с C-c C-c будут использовать параметр -shell-escape.

Q3: См. ответ Konrad. Обратите внимание, что этот метод позволит -shell-escape для всех файлов, отредактированных в AucTeX, поэтому может представлять потенциальную угрозу безопасности при использовании пакетов или файлов других людей.

Ответ 2

Я могу ответить только на вопрос 3:

Что такое '-shell-escape' для?

minted использует стороннее приложение pygmentize для обработки исходного кода. LaTeX обычно не позволяет вызывать другие приложения по соображениям безопасности (в противном случае пакет изгоев может быть вызван aribtrary кодом). Чтобы явно разрешить вызовы внешних приложений, вам необходимо включить этот так называемый escape-код в оболочку, который на большинстве установок LaTeX выполняется с помощью переключателя -shell-escape.

Ответ 3

В последних версиях auctex, похоже, более надежно установить TeX-command-extra-options, который предназначен именно для этой цели, и не заставляет вас переопределять различные формы TeX-command. Насколько я понимаю (возможно, неправильно), это невозможно установить глобально, но должно быть установлено для каждого файла. Вы можете сделать это с помощью крючка. Например, в .emacs вы можете добавить следующее:

(add-hook 'TeX-mode-hook
  (lambda ()
    (setq TeX-command-extra-options "-shell-escape")
  )
)

И поскольку вы не полностью перезаписываете командный вызов латекса, другие функции все равно будут работать - например, включить поддержку synctex с помощью (setq TeX-source-correlate-mode t) [что может произойти за пределами hook].