AUCTeX가 자동으로 pythontex.py 스크립트를 시작하도록 하는 방법

AUCTeX가 자동으로 pythontex.py 스크립트를 시작하도록 하는 방법

pythontexLaTeX에 결과를 삽입하기 전에 누군가 계산을 수행해야 하는 경우 매우 유용하다고 생각되는 패키지를 사용해야 합니다 . 예를 들면 다음과 같습니다.

\documentclass{article}
  \usepackage{pythontex}
  \begin{document}
    If we add five to eight we get \py{5+8}.
   \end{document}

나는 AUCTeX를 사용하여 Emacs에서 LaTeX 문서를 조판하는 데 익숙합니다. 문서를 컴파일하기 위해 일반적으로 AUCTeX 매뉴얼에 설명된 C-c C-aAUCTeX 명령에 바인딩된 키를 다음과 같이 사용합니다 .TeX-command-run-all

오류가 발생하거나 완료될 때까지 현재 문서를 컴파일합니다. 컴파일이 성공적으로 완료되면 마지막에 뷰어를 실행합니다.

그러나 위에 제공된 예를 사용하면 다음과 같은 결과를 얻을 수 있습니다. 여기에 이미지 설명을 입력하세요

보시다시피 파이썬 계산 결과는 ??로 대체되었습니다. . 이는 pythontex 패키지 매뉴얼에 설명된 대로 때문입니다.

pythontex를 사용하여 문서를 컴파일하는 데는 세 단계가 포함됩니다: 1) LaTeX 호환 tex 엔진 실행; 2) pythontex.py 스크립트 실행; 3) 마지막으로 TeX 엔진을 다시 실행합니다.

두 번째 단계는 TeX-command-run-all명령에 의해 자동으로 수행되지 않으므로 잠시 Emacs를 종료하고 터미널을 열고(GNU/Linux를 사용 중입니다) 를 입력한 다음 pythontex <myfile.tex>Emacs로 돌아와서 다시 실행해야 합니다 TeX-command-run-all. 우리가 쉽게 상상할 수 있듯이 이것을 일곱 번 하는 것은 다소 고통스럽습니다.

질문TeX-command-run-all: 호출할 때 스크립트 pythontex.py가 자동으로 시작되어 더 이상 터미널을 사용하고 스크립트를 수동으로 실행할 필요가 없도록 AUCTeX를 구성하는 방법은 무엇입니까 ?

답변1

AUCTeX의 명령을 해킹하지 말고 자신만의 명령을 정의하는 것이 좋습니다. 를 통해 실행할 일련의 셸 명령을 정의할 수 있습니다 TeX-command-sequence.

(TeX 명령 시퀀스 COMMAND 및 선택적 RESET FILE-FN)

COMMAND로 정의된 일련의 TeX 명령을 실행합니다.

COMMAND 인수는 다음과 같습니다.

  • nil: 이 경우 명령이 실행되지 않습니다.

  • 다음 명령이 포함된 문자열TeX-command-list

  • 의 명령인 문자열의 0이 아닌 목록 TeX-command-list; 목록의 자동차는 의 첫 번째 실행에서 실행될 명령으로 사용되며 TeX-command-sequence, 목록의 cdr은 다음 실행 등의 함수에 전달됩니다.

  • 에서 명령인 문자열을 반환하는 함수 이름 TeX-command-list; funcall'd(인수 없이!)되고 다음 실행에서 다시 사용됩니다 TeX-command-sequence.

  • 다른 값을 사용하면 TeX-command-default중지 조건이 충족될 때까지 실행할 명령을 결정하는 데 함수가 사용됩니다.

[...] 선택적 인수 RESET의 nil이 아닌 값은 이것이 함수의 첫 번째 실행이고 일부 변수를 재설정해야 함을 의미합니다.

따라서 기본 전략은 다음과 같습니다. 에 대한 항목을 추가하고 PythonTeX, TeX-command-list문서를 저장하고 TeX-command-sequence적절하게 실행하는 비공개 함수를 정의하고, 이 비공개 함수를 LaTeX 모드의 키에 바인딩한 다음 실행합니다.

(with-eval-after-load "tex"
  (add-to-list 'TeX-command-list
               '("PythonTeX" "pythontex %s" TeX-run-command nil (latex-mode)
                 :help "Run PythonTeX script")
               t))

(defun my/TeX-run-TeX-pythontex ()
  "Save current master file, run LaTeX, PythonTeX and start the viewer."
  (interactive)
  (unless (featurep 'tex-buf)
    (require 'tex-buf))
  (TeX-save-document (TeX-master-file))
  (TeX-command-sequence '("LaTeX" "PythonTeX" "LaTeX" "View") 
                        t))

(add-hook 'LaTeX-mode-hook
          (lambda ()
            (local-set-key (kbd "C-c p") #'my/TeX-run-TeX-pythontex)))

답변2

내 생각에는라텍스이런 상황을 위해 설계되었습니다. 일부 TeX 배포판에 포함되어 있으므로 이미 갖고 있을 수도 있습니다. 올바르게 구성되면 한 번만 실행하면 되며 Python을 실행해야 하는지 자동으로 감지하여 실행한 다음 필요한 경우 LaTeX를 다시 실행합니다. 어쨌든 일단 latexmkEmacs에서 를 실행하십시오 M-x customize-group AUCTeX. 그런 다음 을 선택 TeX Command하고 해당 메뉴 내에서 사용자 정의하십시오 TeX-command-list. 라인을 추가하십시오.

("latexmk" "latexmk %t" TeX-run-command nil t)

latexmk이제 LaTeX 파일에서 실행할 수 있는 옵션이 있으므로 Python 실행이 필요한지 latexmk확인하도록 구성해야 합니다. pythontex(적절한 후크도 추가하여 파일을 편집할 때마다 평가 (setq TeX-command-default "latexmk")됩니다 .tex.)latexmk샘플 구성 파일와 함께 사용합니다 pythontex. 인터넷에서 "latexmk pythontex"를 검색할 수도 있습니다. (나는 pythontex를 사용하지 않기 때문에 이에 대해 보증할 수 없습니다. 나는 sagetex를 사용하고 latexmk그것과 훌륭하게 작동하므로 pythontex에서도 똑같이 잘 작동할 것으로 기대합니다.)

관련 정보