用TikZ在 Latex 中绘制多面体

有时在纸上画三维多面体是很有帮助的。TikZ是一个非常通用的绘制科学文献的工具,Sage可以轻松地处理三维多面体。最后,sagetex使Sage、TikZ和LaTeX之间的一切都能很好地协同工作。自从Sage的6.3版本以来,有一个多面体的(投影)函数可以输出多面体的TikZ图片。这个简短的教程展示了它是如何工作的。

指令

要使用TikZ和Sage在 Latex 中放置3d多面体的图像,只需按照说明操作:

  • 安装 SageTex (可选但推荐!)

  • \usepackage{{tikz}} 在你文章的序言中

  • 打开Sage并通过命令将目录更改为文章的目录 cd /path/to/article

  • 输入你的多面体,例如称为P的Sage

  • 使用命令可视化多面体P P.show(aspect_ratio=1)

  • 这将打开一个名为Jmol的交互式查看器,您可以在其中旋转多面体。找到所需的视角后,右键单击图像并选择 慰问

  • 单击对话框中的按钮

  • 向上滚动到以开头的行 移动到

  • 它读起来像 moveto 0.0 {{x y z angle}} scale

  • 回到Sage和打字 Img = P.projection().tikz([x,y,z],angle)

  • Img 现在包含类型为的Sage对象 LatexExpr 包含你的多面体的原始图片

然后,您可以通过键入将其复制粘贴到文章中 Img 在Sage或保存到一个文件,通过

f = open('Img_poly.tex','w')
f.write(Img)
f.close()

然后在pwd(sage的当前工作目录,您的文章之一)中,您将有一个名为 Img_poly.tex 里面有你多面体的照片。

定制

可以使用命令中的以下选项自定义多面体 P.tikz()

  • scale :正数缩放多面体,

  • edge_color :字符串(默认值: blue!95!black )代表tikz识别的颜色,

  • facet_color :字符串(默认值: blue!95!black )代表tikz识别的颜色,

  • vertex_color :字符串(默认值: green )代表tikz识别的颜色,

  • opacity :实数(默认值: 0.8 )介于0和1之间,表示前面板的不透明度,

  • axis :布尔值(默认值: False )是否在原点绘制轴。

实例

假设你想画下面的极性对偶(很好!)由以下顶点列表给出的多面体:

[[1,0,1],[1,0,0],[1,1,0],[0,0,-1],[0,1,0],[-1,0,0],[0,1,1],[0,0,1],[0,-1,0]]

在Sage中,您可以键入:

P = Polyhedron(vertices=[[1,0,1],[1,0,0],[1,1,0],[0,0,-1],[0,1,0],[-1,0,0],[0,1,1],[0,0,1],[0,-1,0]]).polar()

然后,通过输入来可视化多面体 P.show(aspect_ratio=1)

当您找到一个好的角度时,请按照上述步骤获取值 [674,108,-731] 例如,角度=112。

Img = P.projection().tikz([674,108,-731],112)

也可以使用命令进行自定义

Img = P.projection().tikz([674,108,-731],112,scale=2, edge_color='orange',facet_color='red',vertex_color='blue',opacity=0.4)

此外,您可能需要在tikzpicture中更深入地编辑polytope的样式。例如,tikzpicture中的第6-9行显示:

back/.style={loosely dotted, thin},
edge/.style={color=orange, thick},
facet/.style={fill=red,fill opacity=0.400000},
vertex/.style={inner sep=1pt,circle,draw=blue!25!black,fill=blue!75!black,thick,anchor=base}]

也可以用以下4行替换(并添加 \usetikzlibrary{{shapes}} 在序言中)

back/.style={loosely dashed,line width=2pt},
edge/.style={color=yellow, line width=2pt},
facet/.style={fill=cyan,fill opacity=0.400000},
vertex/.style={inner sep=4pt,star,star points=7,draw=blue!75!white,fill=blue!85!white,thick,anchor=base}]

最后,你可能想调整你的图片我添加标签,元素在顶点,边,面等。

使用SageTex实现自动化

为了这个你需要

\usepackage{sagetex}

在你文章的序言中

使用sagetex有不同的方法,您可以创建自己的方法。这里有一些可能性。

  1. 您可以在文章中直接键入sagestr:

\sagestr{(polytopes.permutahedron(4)).projection().tikz([4,5,6],45,scale=0.75, facet_color='red',vertex_color='yellow',opacity=0.3)}
  1. 您可以创建以下tex命令

\newcommand{\polytopeimg}[4]{\sagestr{(#1).projection().tikz(#2,#3,#4)}}
\newcommand{\polytopeimgopt}[9]{\sagestr{(#1).projection().tikz(#2,#3,#4,#5,#6,#7,#8,#9)}}

在你的序言中,并在你的文章中与一个Sage合用:

\begin{sagesilent}
Polytope = polytopes.great_rhombicuboctahedron()
\end{sagesilent}
\polytopeimg{Polytope}{[276,-607,-746]}{102}{1}
\polytopeimgopt{Polytope}{view=[-907,379,183]}{angle=129}{scale=2}{edge_color='red'}{facet_color='yellow'}{vertex_color='blue'}{opacity=0.6}{axis=False}

然后,运行pdflatex,对文件执行Sage article_name.sagetex.sage 再次运行pdflatex。

有关SageTeX的更多信息,请参阅教程教程http://sage.org/sage.org/。