有没有能用代码/命令行画图的工具?

举个例子, 我想画一个圆, 圆的圆心, 一条直线过圆. 一个圆可以用圆心坐标和半径描述. 直线可以用两点描述. 能有命令行工具可以通过给命令/代码来画出这幅图么? 因为这个图很简单很规则, 感觉用 illustrator 这样的工具(我也不咋会) 不必要.

个人感觉超好用,配合 GIMP 可以说是非常顺手的工具。

MetaPost, Asymptote 都可以。

1 个赞

Inkscape,画好之后可以导出需要的代码

试试 TikZ?

1 个赞
\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默认设置,效果如图所示,更复杂的效果可自己去设。

3 个赞

推荐sagemath:

4 个赞

这样与排版没法结合。只能当作图片对象引用,图片放大、缩小导致线条粗细、字体大小无法全文一致。

前面的MetaPost、Asymptote,包括Inkscape再导出,以及PSTricks、PGF/TikZ都是可以的。

1 个赞

sagemath在美观程度上确实差一些,毕竟是基于python的matplotlib, 但是你可以看到代码非常简约,输入几乎就是题主说的半径,圆心以及直线上两点, 代码可读性也很高;另外sagemath结合python功能真心很强大。

1 个赞

有道理 :smile:,Py作图是很方便的。就是融入不到排版软件(不是MS Word那种字处理软件)中去,只能单独出图。

你的图中若定义了坐标变量、字体大小,就不必在字处理软件中进行缩放了。还有,不知道标注尺寸、标注label等是否方便?

在图上面加文字都是没问题的,还支持latex格式

你误解了,支持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>

1 个赞

平面几何可以用Eukleides这个绘图软件。但这个软件只有命令行模式。

墨干编辑器内置了Eukleides这个软件,下载墨干编辑器,就可以用Eukleides插件在墨干编辑器中绘图:

3 个赞

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;

circ-3

虽然吧 Eukleides 是不错,不过 MetaPost 应用范围更广点,还能用来做字体

心型线

beginfig(2);
  u = 5cm;
  draw for i=0 step 1 until 360: (sind(0.5i)*u*dir i).. endfor cycle;
endfig;
end;

heart-2

1 个赞

若使用LaTeX,首推的还应当是PGF/TikZ。

起初有MetaPost,后来有Asymptote、PSTricks,但都趋于淘汰了,现在的LaTeX中很少或不作介绍了。Eukleides做稍微复杂点的图似乎已无能为力。Python作图,主要还在于和计算有关的图表。这些办法有的只能做图片,然后再作为对象插入文档;有的虽能直接放在.tex文档中,但适合的编译引擎有限制(如PSTricks)。

以下摘自我做的Beamer presentation。可以看到无论插入图片再做修改,还是做复杂的矢量图如示意图,或是画曲线图,TikZ都行,而且字体大小、风格等各方面,都能做到完全统一,达到出版要求。Beamer和TikZ是同一个作者,TikZ有详细的manual,3.1.9版的长达1321页(当然不必去读,只需查找即可)。

4 个赞

PGF 的基本命令和 MetaPost 是没啥差别的,能做的事是一样的。用 Mpost 好处是相比 PGF 不会严重拖慢编译速度,(有人做过比较,简单的图形 PGF 花时间是 Mpost 三倍,复杂些的可以到五倍)而且对比较新的 LuaTeX/ConTeXt 引擎 Mpost 是直接内建在引擎里还加了 lua 扩展支持,没有趋于淘汰的说法。

1 个赞