Аргументы префикса Emacs/AUCTeX

В режиме LaTeX C-c C-c связан с:

(TeX-command-master &optional OVERRIDE-CONFIRM)

Обычно эта интерактивная функция запускает команду, возможно, компиляцию LaTeX, запрашивая подтверждение.

В tex-buf.el это читает:

Если задан префиксный аргумент OVERRIDE-CONFIRM, подтверждение будет зависеть от того, будет ли оно положительным, а не от записи в `TeX-command-list'.

Это немного загадочно для меня и чтения C-h v TeX-command-list не помогло

Как я могу передать аргумент префикса "TeX-command-master", чтобы избежать всех запросов на подтверждение?

6 ответов

Решение

Сборка и просмотр

Опять же, это решение, вместо изменения поведения TeX-command-masterпереписывает это. Переписанная версия команды, названная build-viewследует довольно простой логике.

  1. Если буфер файла LaTeX не изменен, он запускает средство просмотра по умолчанию;
  2. Если буфер загрязнен, он запускает компилятор LaTeX по умолчанию и после сборки открывает вывод в средстве просмотра по умолчанию.

Вот код:

(defun build-view ()
  (interactive)
  (if (buffer-modified-p)
      (progn  
    (let ((TeX-save-query nil)) 
    (TeX-save-document (TeX-master-file)))
    (setq build-proc (TeX-command "LaTeX" 'TeX-master-file -1))
    (set-process-sentinel  build-proc  'build-sentinel))
    (TeX-view)))

(defun build-sentinel (process event)    
  (if (string= event "finished\n") 
      (TeX-view)
    (message "Errors! Check with C-`")))

Теперь вы можете напечатать M-x build-view и запустите указанный процесс просмотра сборки или свяжите его с новой привязкой клавиш, такой как "F2":

(add-hook 'LaTeX-mode-hook '(lambda () (local-set-key (kbd "<f2>") 'build-view)))

Примечание: как подсказал Тайлер, TeX-save-query переменная изменяется локально, поэтому старый C-c C-c/ TeX-command-master не влияет и будет продолжать запрашивать подтверждения.

Отредактируйте этот код, чтобы сделать его лучше или проще для чтения!

Некоторое время я ломал голову над надписью OVERRIDE-CONFIRM и не мог понять, как это должно работать. Если вы хотите автоматически запустить Latex для вашего файла, не заботясь о том, чтобы сначала сохранить его или подтвердить, что вам нужен латекс (а не view, bibtex и т. Д.), Вы можете использовать такую ​​функцию:

(defun my-run-latex ()
  (interactive)
  (TeX-save-document (TeX-master-file))
  (TeX-command "LaTeX" 'TeX-master-file -1))

Свяжите это с чем-нибудь удобным, и у вас все еще будет C-c C-c когда вы хотите использовать команды обработки по умолчанию. Вы можете изменить TeX-command строка, если "Latex" не тот процессор, который вы хотите вызвать.

Посмотрите документацию Emacs, чтобы узнать о префиксных аргументах. В общем, вы можете передать команде префиксный аргумент с Cu, за которым следует число. Для однозначных чисел вы также можете просто ввести Meta, а затем цифру. Таким образом, чтобы передать положительный префиксный аргумент TeX-command-master Вы можете напечатать:

М-1 Копия Копия

Однако это фактически добавит еще одно подтверждение минибуфера, а именно о команде оболочки, которая будет использоваться для компиляции исходного кода LaTeX. Без префиксного аргумента для этого используется зависящее от команды значение по умолчанию.

Если вы хотите избежать вопроса об использовании команды, вы можете связать недокументированную переменную TeX-command-force в "LaTeX" через:

(setq TeX-command-force "LaTeX")

Однако это будет иметь обратную сторону: вы в основном привязываете Cc Cc к команде "latex", вы не можете использовать другие команды, такие как "bibtex" или "view".

Помимо этого, LaTeX-режим не допускает какой-либо настройки Cc Cc. Ваши лучшие варианты - либо посоветовать функцию TeX-command-query или связать Cc Cc с функцией-оберткой, чтобы установить TeX-command-force динамически. Последнее, вероятно, будет предпочтительным вариантом, если вы также хотите автоматически сохранить буфер.

Кажется, что тайна OVERRIDE-CONFIRM продолжается. Тем временем парень предполагает, что, если мы не сможем управлять TeX-command-masterМы можем просто переписать его.

В моей версии, исходя из его, если буфер не изменен, запускается внешний просмотрщик; если буфер изменен, запускается компилятор. Все без подтверждения сохранения или запуска данной команды.

(defun my-run-latex ()
  (interactive)
  (if (buffer-modified-p)
      (progn  
        (setq TeX-save-query nil) 
        (TeX-save-document (TeX-master-file))
        (TeX-command "LaTeX" 'TeX-master-file -1))
    (TeX-view)))

Конечно, можно связать my-run-latex к любому связыванию клавиш.

С точки зрения пользователя это решение моего собственного вопроса. Я нажимаю на закрывающий тег? Ну, с точки зрения любопытного парня, я все еще заинтересован в понимании таинственного TeX-command-master технические формальности.

Если кто-то должен знать...

PS Да, TeX-save-query переопределяет запрос файла сохранения, также TeX-command-master, то есть C-c C-c, Но вас все равно попросят подтвердить действие команды.

Я думаю, что суть этого вопроса заключается в том, "как быстро скомпилировать мой документ TeX из AUCTeX без всех нажатий клавиш и подтверждений?"

Мой ответ на этот вопрос - использовать команду latexmk, а не пытаться заставить AUCTeX сделать это.

latexmk -pdf -pvc myfile.tex

latexmk будет следить за данным файлом и восстанавливать его, как только вы сохраните его. Если вы используете хороший просмотрщик PDF, он заметит изменение в PDF и немедленно отобразит его снова. На OS X skim хорошо работает для этого.

Если вы просто хотите скомпилировать источник латекса без диалогового окна подтверждения, просто добавьте в ваш.emacs следующее:

(setq TeX-command-force "")

Затем вы можете скомпилировать исходный код с помощью Cc Cc, и он не будет запрашивать подтверждения. Единственная проблема, связанная с этим решением, заключается в том, что вы больше не можете изменять команду, но с большинством документов вы этого не захотите. Я мог бы предположить, что в то же время вы можете добавить это к вашему.emacs для еще большей гибкости, давая вам Cc Cc, эквивалентный предыдущему поведению:

(define-key LaTeX-mode-map "\C-c\C-a"   
   ;;; 'a' for ask, change to anything you want 
  (lambda (arg) (interactive "P") 
    (let ((TeX-command-force nil)) 
      (TeX-command-master arg)))) 

Затем вы можете просто поработать над своим документом, сделать Cx Cs, Cc Cc и затем Cc Cv, чтобы увидеть его. Как и другие предлагали, вы также можете сделать то же самое для команды save и сделать так, чтобы она автоматически компилировалась при сохранении, но некоторые из моих документов находятся в CVS, и поэтому я избегаю этого.

Благодарим Ивана за помощь в этом вопросе - не знаю, работает ли он в Stackru

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