举个例子, 我想画一个圆, 圆的圆心, 一条直线过圆. 一个圆可以用圆心坐标和半径描述. 直线可以用两点描述. 能有命令行工具可以通过给命令/代码来画出这幅图么? 因为这个图很简单很规则, 感觉用 illustrator 这样的工具(我也不咋会) 不必要.
MetaPost, Asymptote 都可以。
Inkscape,画好之后可以导出需要的代码
试试 TikZ?
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\footnotesize
\begin{tikzpicture}
\def\a{.5}
\draw [help lines,step={\a}] ({-5.75*\a},{-5.75*\a}) grid ({5.75*\a},{5.75*\a});
\draw [thick,<->] ({-6*\a},0) -- ({6*\a},0) node [right] {x};
\draw [thick,<->] (0,{-6*\a}) -- (0,{6*\a}) node [above] {y};
\draw (0,0) circle ({4.5*\a});
\draw ({-5*\a},{-5*\a}) -- ({5*\a},{5*\a});
\foreach \x in {-5,-4,-3,-2,-1,1,2,3,4,5} {
\node at ({\x*\a},0) [below] {\x};
\node at (0,{\x*\a}) [left] {\x};}
\node at (0,0) [below right] {0};
\end{tikzpicture}
\end{document}
全部用TikZ默认设置,效果如图所示,更复杂的效果可自己去设。
这样与排版没法结合。只能当作图片对象引用,图片放大、缩小导致线条粗细、字体大小无法全文一致。
前面的MetaPost、Asymptote,包括Inkscape再导出,以及PSTricks、PGF/TikZ都是可以的。
sagemath在美观程度上确实差一些,毕竟是基于python的matplotlib, 但是你可以看到代码非常简约,输入几乎就是题主说的半径,圆心以及直线上两点, 代码可读性也很高;另外sagemath结合python功能真心很强大。
有道理 ,Py作图是很方便的。就是融入不到排版软件(不是MS Word那种字处理软件)中去,只能单独出图。
你的图中若定义了坐标变量、字体大小,就不必在字处理软件中进行缩放了。还有,不知道标注尺寸、标注label等是否方便?
你误解了,支持LaTeX是没有问题的。我的意思是给指定点的某个任意方向(如东北10度方向)写字,更复杂一些沿着任意曲线写一串字。
其实这我相信稍费点劲Py都能做,只有一点,就是代码是in Python,不是in document(见\begin{document}\end{document}环境)。
旋转角度可以,但是沿着曲线这个应该比较困难,我也是刚接触
# rotation参数是旋转角度
p += text("$y=x$", (2.1, 2.2),rotation=45.0, fontsize=16, color='red')
SVG 格式图片可以读写:
<svg version="1.1"
width="400" height="400"
xmlns="http://www.w3.org/2000/svg">
<rect width="100%" height="100%" fill="#fff" stroke="#000"/>
<circle cx="50%" cy="50%" r="100" fill="#fff" stroke="#f00"/>
<line x1="0" y1="0" x2="100%" y2="100%" stroke="#000"/>
<line x1="100%" y1="0" x2="0" y2="100%" stroke="#000"/>
</svg>
asymptote 了解一下
Asymptote插件也可以在 GNU TeXmacs或者墨干编辑器中使用,我有一个比较
我认为Eukleides这门绘图语言要比Asymptote更好。
beginfig(3);
path a;
z = (12,30);
a = fullcircle scaled 2cm shifted z;
pickup pencircle scaled 1pt;
draw a;
draw (34,64)--(0,0);
pickup pencircle scaled 2pt;
drawdot z;
endfig;
end;
虽然吧 Eukleides 是不错,不过 MetaPost 应用范围更广点,还能用来做字体
心型线
beginfig(2);
u = 5cm;
draw for i=0 step 1 until 360: (sind(0.5i)*u*dir i).. endfor cycle;
endfig;
end;
若使用LaTeX,首推的还应当是PGF/TikZ。
起初有MetaPost,后来有Asymptote、PSTricks,但都趋于淘汰了,现在的LaTeX中很少或不作介绍了。Eukleides做稍微复杂点的图似乎已无能为力。Python作图,主要还在于和计算有关的图表。这些办法有的只能做图片,然后再作为对象插入文档;有的虽能直接放在.tex文档中,但适合的编译引擎有限制(如PSTricks)。
以下摘自我做的Beamer presentation。可以看到无论插入图片再做修改,还是做复杂的矢量图如示意图,或是画曲线图,TikZ都行,而且字体大小、风格等各方面,都能做到完全统一,达到出版要求。Beamer和TikZ是同一个作者,TikZ有详细的manual,3.1.9版的长达1321页(当然不必去读,只需查找即可)。
PGF 的基本命令和 MetaPost 是没啥差别的,能做的事是一样的。用 Mpost 好处是相比 PGF 不会严重拖慢编译速度,(有人做过比较,简单的图形 PGF 花时间是 Mpost 三倍,复杂些的可以到五倍)而且对比较新的 LuaTeX/ConTeXt 引擎 Mpost 是直接内建在引擎里还加了 lua 扩展支持,没有趋于淘汰的说法。