pythontex
LaTeX에 결과를 삽입하기 전에 누군가 계산을 수행해야 하는 경우 매우 유용하다고 생각되는 패키지를 사용해야 합니다 . 예를 들면 다음과 같습니다.
\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-a
AUCTeX 명령에 바인딩된 키를 다음과 같이 사용합니다 .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를 다시 실행합니다. 어쨌든 일단 latexmk
Emacs에서 를 실행하십시오 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에서도 똑같이 잘 작동할 것으로 기대합니다.)