在 tikz 中嵌入 python

在 tikz 中嵌入 python

我刚刚发现这个python包,并尝试在 Tikz 代码中使用它。不幸的是,这不起作用:

\documentclass[oneside]{memoir}
\usepackage{pgfplots}
\usepackage{python}

\begin{document}
\begin{figure}[H]
\centering
\begin{tikzpicture}
    \draw (0, 0) -- (
\begin{python}
print(1)  # note that my default Python version is 3.2, so this works outside the tikzpicture environment. 
\end{python}
, 0);
\end{tikzpicture}
\caption{Blah.}
\end{figure}
\end{document}

我收到的第一个错误是:

失控参数?{pgf@tempcolor}{\def \@currenvir {python}\edef \@currenvline {\on@line \ETC. ! 段落在 \XC@definec@lor 完成之前结束。\par l.13 print(1)

我怀疑你忘记了一个“}”,导致我将这个控制序列应用于太多文本。我们该如何恢复?我的计划是忘记整件事,并希望一切顺利。

有可能让这样的事情发挥作用吗?也许使用不同的 Python 包?此外,有没有办法让 Python 定义在嵌入式环境之间保持不变?

答案1

你可能对我的感兴趣PythonTeX包。它仅在修改时执行 Python 代码,保存所有 Python 生成的结果,并提供环境/命令之间的持久性。

我认为您在示例中遇到的问题的一部分与 的内部工作有关\draw。我也无法获得与我的包一起使用的等效示例,并且收到类似的错误。但是,以下示例确实有效。请注意,环境pycode当前无法缩进,因此格式与您的示例略有不同。此外,当您不需要整个环境时, \py和可用于内联使用。执行代码,并返回给定内容的字符串表示形式。\pyc\pyc\py

\documentclass[oneside]{memoir}
\usepackage{pgfplots}
\usepackage{pythontex}

\begin{document}
\begin{figure}[H]
\centering
\begin{tikzpicture}
\begin{pycode}
a = 2
print(r'\draw (0, 0) -- ({0}, 0);'.format(a))
\end{pycode}
\pyc{b = 3}
\py{r'\draw (0, 0) -- ({0}, 1);'.format(b)}
\end{tikzpicture}
\caption{Blah.}
\end{figure}
\end{document}

2016 年 8 月更新

PythonTeX 现在具有用于变量替换/字符串插值的命令和环境。下面包含使用其中一个重写的示例版本。

环境中的所有内容pysub都会逐字传递给 Python。替换字段采用以下形式!{<expression>}。如果<expression>以文字花括号开头或结尾,则应添加空格以将花括号<expression>与分隔括号分开。如果<expression>包含不成对的花括号,则可以使用更多分隔符。例如,!{{{<expression>}}}将允许包含不成对的、、或(基本上是任何比分隔符更短的括号序列)<expression>的任意组合。有关更多详细信息,请参阅 PythonTeX 文档。{{{}}}

\documentclass[oneside]{memoir}
\usepackage{pgfplots}
\usepackage{pythontex}

\begin{document}
\begin{figure}[h]
\centering
\begin{pycode}
a = 2
b = 3
\end{pycode}
\begin{pysub}
\begin{tikzpicture}
\draw (0, 0) -- (!{a}, 0);
\draw (0, 0) -- (!{b}, 1);
\end{tikzpicture}
\end{pysub}
\caption{Blah.}
\end{figure}
\end{document}

答案2

相关内容