如果我使用 LaTeX、Python,然后使用 LaTeX,编译工作正常,并使用 Python 命令:
python "C:\Program Files (x86)\MiKTeX 2.9\scripts\pythontex\pythontex.py"
但我不能用它latexmk
来做同样的事情:
如果我尝试:
latexmk -r C:\latexmk\LatexMk.txt essai.tex
在文件中LatexMk.txt
:
add_cus_dep('pytxcode', 'tex', 0, 'pythontex');
sub pythontex { return system("pythontex \"$_[0]\""); }
$aux_dir = 'auxiliaire2';
$pdflatex = 'pdflatex-synctex=1 --shell-escape %O %S';
$latex = 'latex -synctex=1 --shell-escape %O %S';
然后 LaTeX 编译正常,但是当 PythonTeX 运行时,会出现错误:
Package PythonTeX Warning: Non-existent Pygments content on input line 11.
我得到的结果
??PythonTex??
我不明白为什么。我正在使用 Windows 10。
更准确地说,essai.tex 是:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{pythontex}
\begin{document}
Here's the code in the document
\begin{pyverbatim}
return '\\SI{' + str(var) + '}{' + unit + '}'
\end{pyverbatim}
\end{document}
控制台的输出是:
'Custom dependency list:
pytxcode tex 0 pythontex
Latexmk: This is Latexmk, John Collins, 17 Jan. 2018, version: 4.55.
Rule 'latex': File changes, etc:
Changed files, or newly in use since previous run(s):
'E:\professionnel\_BTS_SIO_1_U_22_algo\TD_6\essai.tex'
'essai.tex'
------------
Run number 1 of rule 'latex'
------------
------------
Running 'latex -synctex=1 --shell-escape -recorder -aux-
directory="auxiliaire2"
"E:\professionnel\_BTS_SIO_1_U_22_algo\TD_6\essai.tex"'
------------
Latexmk: applying rule 'latex'...
This is pdfTeX, Version 3.14159265-2.6-1.40.19 (MiKTeX 2.9.6630 64-bit)
entering extended mode
(E:/professionnel/_BTS_SIO_1_U_22_algo/TD_6/essai.tex
LaTeX2e <2017-04-15>
Babel <3.18> and hyphenation patterns for 75 language(s) loaded.
我的评论:我切断了 Miktex 工作的线路......
No file pythontex-files-essai/essai.pytxmcr.
Run PythonTeX to create it.
Package PythonTeX Warning: Non-existent Pygments content on input line 11.
[1] (E:\professionnel\_BTS_SIO_1_U_22_algo\TD_6\auxiliaire2\essai.aux) )
Output written on essai.dvi (1 page, 480 bytes).
SyncTeX written on essai.synctex.gz.
Transcript written on
E:\professionnel\_BTS_SIO_1_U_22_algo\TD_6\auxiliaire2\es
sai.log.
===========Latexmk: Missing input file: 'pythontex-files-
essai/essai.pytxmcr' 来自行 '没有文件 pythontex-files-essai/essai.pytxmcr.' Latexmk:缺少输入文件:'pythontex-files-essai/essai.pytxmcr' 来自行 '没有文件 pythontex-files-essai/essai.pytxmcr.' Latexmk:日志文件显示输出到 'essai.dvi' === TeX 引擎是 'pdfTeX' Latexmk:所有目标(essai.dvi)都是最新的'
答案1
这个问题在https://github.com/gpoore/pythontex/issues/132#issuecomment-492531792。
根据您的配置,在您第一次手动运行之后pythontex
,后续的运行latexmk
应该会自动进行。
话虽如此,如果您也想让它在第一次运行中发挥作用,上面链接的 GitHub 问题有一个解决方案——输入以下内容latexmkrc
:
# Support for pythontex in v. 0.16 or higher, with latexmk 4.62 or higher
#
# What these definitions provide/do:
# 1. Variable specifying command string for invoking pythontex
# 2. Addition to %extra_rule_spec of template for pythontex rule. This
# tells latexmkrc to create the rule when it is initializing for
# processing a TeX file.
# 3. A subroutine mypythontex that the pythontex rule is defined to
# call. This runs pythontex and then sets dependency information.
# 4. Settings for the files generated by the pythontex package and the
# pythontex program so that the files are deleted in a clean-up
# operation.
$clean_ext .= " pythontex-files-%R/* pythontex-files-%R";
push @generated_exts, 'pytxcode';
$pythontex = 'pythontex %O %S';
$extra_rule_spec{'pythontex'} = [ 'internal', '', 'mypythontex', "%Y%R.pytxcode", "%Ypythontex-files-%R/%R.pytxmcr", "%R", 1 ];
sub mypythontex {
my $result_dir = $aux_dir1."pythontex-files-$$Pbase";
my $ret = Run_subst( $pythontex, 2 );
rdb_add_generated( glob "$result_dir/*" );
open( my $fh, "<", $$Pdest );
if ($fh) {
while (<$fh>) {
if ( /^%PythonTeX dependency:\s+'([^']+)';/ ) {
print "Found pythontex dependency '$1'\n";
rdb_ensure_file( $rule, $aux_dir1.$1 );
}
}
undef $fh;
}
else {
warn "mypythontex: I could not read '$$Pdest'\n",
" to check dependencies\n";
}
return $ret;
}
据我所知,正常情况下add_cus_dep
不能用来“正确”处理这个问题,因为源文件的位置a.pytxcode
与目标文件的位置不同pythontex-files-a/a.pytxmcr
。
不幸的是我找不到%extra_rule_spec
。(latexmk 与 pythontex、lualatex 和长名称不起作用 可能有一些解释。)
另一种方法是使用 pythontex 手册中解释的另一种方法:
该方法最初是为非常态的情况而设计的--output-directory
,但这并不重要——它可以add_cus_dep
通过移动a.pytxmcr
到当前目录然而,正如前面提到的,缺点是其他辅助文件(a.pytxpyg
,
pythontex_data.pkl
)也移动到当前目录。