Pythontex 和 latexmk

Pythontex 和 latexmk

如果我使用 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 手册中解释的另一种方法:

pythontex 手册

该方法最初是为非常态的情况而设计的--output-directory,但这并不重要——它可以add_cus_dep通过移动a.pytxmcr当前目录然而,正如前面提到的,缺点是其他辅助文件(a.pytxpygpythontex_data.pkl)也移动到当前目录

相关内容