我想在轴环境中用先前定义的坐标绘制 3d 面片图。
这是一个虚拟示例来说明我想要做的事情:
\begin{figure}
\begin{tikzpicture}
\begin{axis}
\coordinate (a) at (0, 0, 0);
\coordinate (b) at (1, 0, 0);
\coordinate (c) at (0, 1, 0);
\addplot3 [patch,table/row sep=\\,patch table={
0 1 2\\
}] table {
0 0 0\\ % I would like to extract (a) coordinates here instead
1 0 0\\ % (b) here
0 1 0\\ % (c) here
};
\end{axis}
\end{tikzpicture}
\end{figure}
我想要这样做的原因是我打算在 3d 面片图中使用的坐标是在一些复杂的宏中以编程方式定义的。
答案1
由于无法正常完成,您可能需要考虑查看sagetex
软件包和文档这里可以处理。该软件包为您提供了一个名为 Sage 的计算机代数系统,并可以访问 Python 编程语言。编译分为 3 步。第一次运行 LaTeX 时必须没有问题。下次运行 Sage。最后一步是将 Sage 的结果/计算放入文档中。由于您的代码依赖于 Sage 必须使用的坐标,因此输出将放入字符串中。第一遍将是一个空文档。第二遍使用 Sage 获取您想要的坐标。它创建一个字符串,即您想要的图片代码。处理的最后一步是将字符串放入文档中,从而得到图片。在下面的代码中,%d
是整数的占位符;%f
是浮点数,%s
是字符串。代码的这部分%(c1[0],c1[1],c1[2])
告诉 Sage 在%d
它之前的 3 个参数中是什么。是原始字符串,它让我们可以毫无问题地r""
使用有问题的文本,例如。\
\documentclass[11pt,border=1mm]{article}
\usepackage{sagetex,tikz,pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{sagesilent}
def MyPatch(c1,c2,c3):
output = r""
output += r"\begin{figure}"
output += r"\begin{tikzpicture}"
output += r"\begin{axis}"
output += r"\coordinate (a) at (%d, %d, %d);"%(c1[0],c1[1],c1[2])
output += r"\coordinate (b) at (%d, %d, %d);"%(c2[0],c2[1],c2[2])
output += r"\coordinate (c) at (%d, %d, %d);"%(c3[0],c3[1],c3[2])
output += r"\addplot3 [patch,table/row sep=\\,patch table={"
output += r"0 1 2\\"
output += r"}] table {"
output += r"%d %d %d\\"%(c1[0],c1[1],c1[2])
output += r"%d %d %d\\"%(c2[0],c2[1],c2[2])
output += r"%d %d %d\\"%(c3[0],c3[1],c3[2])
output += r"};"
output += r"\end{axis}"
output += r"\end{tikzpicture}"
output += r"\end{figure}"
return output
a1=[0,0,0]
a2=[1,0,0]
a3=[0,1,0]
pic = MyPatch(a1,a2,a3)
\end{sagesilent}
\sagestr{pic}
\end{document}
代码设置定义了一个函数来处理您的问题。您可以将a1
、a2
、更改a3
为其他坐标(每个分量一个整数)重新编译并获取更新的图片。
智者不属于 LaTeX 发行版。最简单的入门方法是通过免费的可钙帐户。通过将 Sage 下载到您的计算机并使其与您的 LaTeX 发行版配合使用,可以避免这种情况。这可能很容易,但在某些情况下也可能很困难。使用 Cocalc,您可以在 5 分钟内启动并运行。