我尝试使用 \input 命令在 LaTeX 中执行 Python 脚本,但是出现了一个奇怪的错误,我无法理解。我按照从这里获取的工作示例进行操作回答但它根本不起作用。
示例 1:\input{|python3 -c 'print(1+2)'}
给出错误 ! LaTeX 错误:未找到文件 `|python3 -c 'print(1+2)'.tex'。请注意,在 | 之前有一个波浪符号
示例 2:\input{|python3 test.py}
出现错误!LaTeX 错误:未找到文件 `|python3 test.py'。
请再次注意,在 | 之前有一个波浪符号
我目前正在使用带有 --shell-escape 标志的 PDFLaTeX,但我无法真正使其工作。
我做错了什么?以下是完整代码:
\documentclass[10pt, export]{standalone}
\usepackage{tikz}
\usepackage{animate}
\usepackage{amsmath}
\usepackage[left=0cm, top=0cm, bottom=-2cm, right=0cm, paperwidth=12in, paperheight=6.75in]{geometry}
\usepackage{circuitikz}
\begin{document}
\input{|python3 -c 'print(1+2)'}
\input{|python3 test.py}
\end{document}
谨致以最诚挚的问候和感谢
更新:
尝试戴维的答案会产生以下输出:
! LaTeX Error: File `|python3 -c 'print(1+2)'.tex' not found.
Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: tex)
Enter file name:
! Emergency stop.
<read *>
l.10 1+2 = \input{|python3 -c 'print(1+2)'}
^^M
! ==> Fatal error occurred, no output PDF file produced!
这些是我在 Kile 下使用 PDFLatex 的标志:
--shell-escape -synctex=1 -interaction=nonstopmode %source
从终端编译时输出也是一样,如下所示:
pdflatex --shell-escape -interaction=nonstopmode test.tex
答案1
如果您使用 TeX 的原语\input
,它就会起作用,它在 LaTeX 中保存为\@@input
:
这是script.py
:
print("Number four: %d." % 4)
这有效:
\documentclass{article}
\makeatletter % to use \@@input
\def\runshell#1{%
\@@input"|#1"\relax
}
\makeatother
\begin{document}
a\runshell{python3 -c 'print(1+2)'}b
a\runshell{python3 script.py}b
\end{document}
答案2
您需要--shell-escape
删除强制文本离开页面的几何设置;
\documentclass[10pt, export]{standalone}
\usepackage{tikz}
\usepackage{animate}
\usepackage{amsmath}
%\usepackage[left=0cm, top=0cm, bottom=-2cm, right=0cm, paperwidth=12in, paperheight=6.75in]{geometry}
\usepackage{circuitikz}
\begin{document}
1+2 = \input{|python3 -c 'print(1+2)'}
\end{document}