Есть ли способ создать горячую клавишу, с помощью которой я смогу скомпилировать файл .tex
?
Для компиляции LaTeX я использую сочетание клавиш ^C ^C
. Он показывает мне «latex» по умолчанию или иногда «view». Если установлено «latex», я просто нажимаю Enter, но устанавливаю «view», тогда мне нужно ввести «latex» для компиляции. Затем я использую ^C ^V
для просмотра, pdf
если необходимо.
Это наиболее часто используемая мной операция, но довольно раздражает явно вводить «latex» после ^C ^C
. Я новичок в Emacs и Aquamacs (пользуюсь им всего неделю).
решение1
Просто нажмите кнопку LaTeX на панели инструментов. :)
Либо нажмите Command-O, чтобы открыть файл и перейти к
<HOME>/Library/Preferences/Aquamacs Emacs
и открыть Preferences.el
(что предпочтительнее в Aquamacs к .emacs
файлу). Добавить внизу
(add-hook
'LaTeX-mode-hook
(lambda ()
(local-set-key
(kbd "C-c c")
(lambda nil
(interactive)
(progn
(TeX-save-document
(TeX-master-file)
)
(TeX-command "LaTeX" (quote TeX-master-file) -1))))))
который привяжет ту же функцию, которая выполняется при нажатии на значок, к C-c c
. Вы можете захотеть добавить похожее действие, привязанное к C-c v
для просмотра
(add-hook
'LaTeX-mode-hook
(lambda ()
(local-set-key
(kbd "C-c v")
(lambda nil (interactive)
(TeX-command "View" (quote TeX-master-file) -1)))))
решение2
Я использую Aquamacs и у меня был тот же вопрос. Пост от Шона Оллреда помог мне найти ответ, который я искал. Единственное, что я хотел бы добавить, это то, что если вы используете только Aquamacs, лучше отредактировать файл
Предпочтение.elнаходится в
~/Библиотека/Настройки/Aquamacs\Emacs/После добавления приведенного ниже кода в файл последовательность команд
Кк Казапустит компилятор по умолчанию, а затем отправит вывод на предварительный просмотр. Этот фрагмент кода был скопирован изhttp://www.emacswiki.org/emacs/TN#toc8в разделе TEX-texify.
(требуется 'tex-buf) (defun TeX-команда-по умолчанию (имя) «Следующая команда TeX для использования. Большая часть кода украдена из `TeX-command-query'». (cond ((if (string-equal name TeX-region) (TeX-check-files (имя конкатенации "." (TeX-output-extension)) (название списка) Расширения файлов TeX) (TeX-сохранить-документ (TeX-мастер-файл))) TeX-команда-по умолчанию) ((и (memq основной-режим '(doctex-режим latex-режим)) (TeX-check-files (объединенное имя ".bbl") (картакар 'машина (LaTeX-библиография-список)) Расширения-файлов-BibTeX)) ;; Здесь нам также следует проверить наличие bst-файлов. TeX-команда-BibTeX) ((TeX-процесс-получить-имя переменной 'TeX-команда-следующая TeX-команда-Показать)) (TeX-команда-Показать))) (defcustom TeX-texify-Show t "Начать команду просмотра в конце TeX-texify?" :type 'boolean :group 'TeX-command) (defcustom TeX-texify-max-runs-same-command 5 "Максимальное количество запусков одной и той же команды" :type 'integer :group 'TeX-command) (defun TeX-texify-sentinel (&необязательно proc sentinel) «Неинтерактивно! Вызовите стандартный сигнализатор текущего процесса LaTeX. Если что-то еще осталось, начинайте следующую латексную команду». (set-buffer (process-buffer proc)) (funcall TeX-texify-sentinel proc sentinel) (пусть ((регистр-свертка-поиск ноль)) (когда (строка-соответствие "\\(завершено\\|вышло\\)" сигнальный) (set-buffer TeX-команда-буфер) (если только (plist-get TeX-error-report-switches (intern (TeX-master-file))) (TeX-texify))))) (defun TeX-texify()) «Сделай все». (интерактивный) (let ((nextCmd (TeX-команда-по-умолчанию (TeX-главный-файл))) процесс) (если (и (null TeX-texify-Show) (эквивалентно nextCmd TeX-команда-Показать)) (когда (вызванный-интерактивно-p 'любой) (сообщение "TeX-texify: Ничего не поделаешь.")) (TeX-команда nextCmd 'TeX-главный-файл) (когда (или (вызванный-интерактивно-p 'любой) (null (boundp 'TeX-texify-count-same-command)) (null (boundp 'TeX-texify-last-command)) (null (равно nextCmd TeX-texify-last-command))) (mapc 'make-local-variable '(TeX-texify-sentinel TeX-texify-count-same-command TeX-texify-last-command)) (setq TeX-texify-count-same-команда 1)) (если (>= TeX-texify-count-та же-команда TeX-texify-max-runs-та же-команда) (сообщение "TeX-texify: %S уже %d раз. Больше не хочу этого делать." TeX-texify-last-command TeX-texify-count-same-command) (setq TeX-texify-count-same-command (1+ TeX-texify-count-same-command)) (setq TeX-texify-last-command nextCmd) (и (null (равно nextCmd TeX-команда-Показать)) (setq proc (get-buffer-process (current-buffer))) (setq TeX-texify-sentinel (process-sentinel proc)) (set-process-sentinel proc 'TeX-texify-sentinel)))))) (add-hook 'LaTeX-mode-hook '(lambda () (local-set-key (kbd "Cc Ca") 'TeX-texify)))
решение3
За исключением какой-либо конкретной последовательности клавиш (я знаю, что она есть, но я просто не могунаходитьэто), это будет работать:
(add-hook
'LaTeX-mode-hook
(lambda ()
(local-set-key
(kbd "C-c c")
(lambda (&optional arg)
"Run the current document through LaTeX."
(interactive "p")
(kmacro-exec-ring-item
(quote ([3 3 76 97 84 101 88 return] 0 "%d"))
arg)))
Это привяжет последовательность клавиш C-c cк макросу клавиатуры, который запускается C-c C-c LaTeX RET.
Если вам интересно, нет, я не делал важную часть этого сам. Я запускал C-x (макрос клавиатуры, затем набирал C-c C-c LaTeX RET, а затем C-c )завершал макрос. Затем я давал C-x C-k nмакросу имя, а затем запускал его M-x insert-kbd-macro, находясь внутри моего .emacs
(обычно его можно найти по C-x C-f ~/.emacs).
Я привязываю макрос к последовательности клавиш с помощью local-set-key
, а затем добавляю его в LaTeX-mode
хук, чтобы он выполнялся каждый раз при вводе LaTeX-mode
.
решение4
В качестве альтернативы вы можете поместить следующее в свой файл, .emacs
и все будет выполнено автоматически по порядку, как в функции Quick Build в TeXMaker.
(require 'tex-buf)
(defun TeX-command-default (name)
"Next TeX command to use. Most of the code is stolen from `TeX-command-query'."
(cond ((if (string-equal name TeX-region)
(TeX-check-files (concat name "." (TeX-output-extension))
(list name)
TeX-file-extensions)
(TeX-save-document (TeX-master-file)))
TeX-command-default)
((and (memq major-mode '(doctex-mode latex-mode))
(TeX-check-files (concat name ".bbl")
(mapcar 'car
(LaTeX-bibliography-list))
BibTeX-file-extensions))
;; We should check for bst files here as well.
TeX-command-BibTeX)
((TeX-process-get-variable name
'TeX-command-next
TeX-command-Show))
(TeX-command-Show)))
(defcustom TeX-texify-Show t "Start view-command at end of TeX-texify?" :type 'boolean :group 'TeX-command)
(defcustom TeX-texify-max-runs-same-command 5 "Maximal run number of the same command" :type 'integer :group 'TeX-command)
(defun TeX-texify-sentinel (&optional proc sentinel)
"Non-interactive! Call the standard-sentinel of the current LaTeX-process.
If there is still something left do do start the next latex-command."
(set-buffer (process-buffer proc))
(funcall TeX-texify-sentinel proc sentinel)
(let ((case-fold-search nil))
(when (string-match "\\(finished\\|exited\\)" sentinel)
(set-buffer TeX-command-buffer)
(unless (plist-get TeX-error-report-switches (intern (TeX-master-file)))
(TeX-texify)))))
(defun TeX-texify ()
"Get everything done."
(interactive)
(let ((nextCmd (TeX-command-default (TeX-master-file)))
proc)
(if (and (null TeX-texify-Show)
(equal nextCmd TeX-command-Show))
(when (called-interactively-p 'any)
(message "TeX-texify: Nothing to be done."))
(TeX-command nextCmd 'TeX-master-file)
(when (or (called-interactively-p 'any)
(null (boundp 'TeX-texify-count-same-command))
(null (boundp 'TeX-texify-last-command))
(null (equal nextCmd TeX-texify-last-command)))
(mapc 'make-local-variable '(TeX-texify-sentinel TeX-texify-count-same-command TeX-texify-last-command))
(setq TeX-texify-count-same-command 1))
(if (>= TeX-texify-count-same-command TeX-texify-max-runs-same-command)
(message "TeX-texify: Did %S already %d times. Don't want to do it anymore." TeX-texify-last-command TeX-texify-count-same-command)
(setq TeX-texify-count-same-command (1+ TeX-texify-count-same-command))
(setq TeX-texify-last-command nextCmd)
(and (null (equal nextCmd TeX-command-Show))
(setq proc (get-buffer-process (current-buffer)))
(setq TeX-texify-sentinel (process-sentinel proc))
(set-process-sentinel proc 'TeX-texify-sentinel))))))
(add-hook 'LaTeX-mode-hook '(lambda () (local-set-key (kbd "C-c C-a") 'TeX-texify)))
Это связывает последовательность клавиш C-c C-aс TeX-texify
, которая проходит все этапы компиляции, необходимые для создания текущего документа. Бесстыдно украдено изEmacs Wiki.