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
編譯目前文檔,直到出現錯誤或完成。如果編譯成功完成,最後執行檢視器。
我們可以看到python計算的結果已被替換為?? 。這是因為正如 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
。我們不難想像,這樣做七次是有點痛苦的。
問題:如何設定 AUCTeX,以便在呼叫TeX-command-run-all
腳本時pythontex.py
自動啟動腳本,從而不再需要使用終端並手動執行腳本?
答案1
我建議你不要修改 AUCTeX 的指令,而是定義自己的指令。您可以定義一系列要透過 執行的 shell 指令TeX-command-sequence
。
(TeX-命令序列命令和可選的重置檔案-FN)
執行 COMMAND 定義的一系列 TeX 命令。
COMMAND 參數可以是
nil
:在這種情況下不會執行任何命令帶有命令的字串
TeX-command-list
一個非零的字串列表,它們是來自
TeX-command-list
;的命令列表中的 car 作為第一次運行時執行的命令TeX-command-sequence
,列表中的 cdr 將在下次運行時傳遞給函數,等等。一個函數名,傳回一個來自命令的字串
TeX-command-list
;它將被 funcall'd(不帶參數!)並在下一次運行中再次使用TeX-command-sequence
。對於任何其他值,函數
TeX-command-default
用於確定要執行的命令,直到滿足停止條件。[...] 可選參數 RESET 的非零值意味著這是該函數的第一次運行,並且一些變數需要重置。
所以基本策略是:為PythonTeX
to添加一個條目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 檔案上運行,因此您需要配置latexmk
以檢查是否pythontex
需要運行 Python。 (我還添加了(setq TeX-command-default "latexmk")
一個適當的鉤子,以便每當我編輯文件時都會對其進行評估.tex
。)的作者latexmk
提供了一個範例設定檔與 一起使用pythontex
。您也可以在網路上搜尋“latexmk pythontex”。 (我不使用 pythontex,所以我不能保證這一點。我使用 sagetex,並且可以latexmk
很好地使用它,所以我希望它能夠與 pythontex 同樣良好地工作。)