我如何使用Inkscape为数学讲义绘制数字

在我之前的博客文章中,我解释了如何使用Vim和LaTeX进行讲义。在这篇文章中,我将讨论如何使用Inkscape和我的自定义快捷方式管理器为我的笔记绘制数字。

一些例子

首先,让我向您展示一些我所制作的数字的例子。它们是用于复杂分析,微分几何,电动力学和我的椭圆曲线学士论文。我在演讲期间画了他们 - 当然除了我的论文的那些 - 使用Inkscape,所以让我们从这开始。

例1例2例3例4例5

什么是Inkscape?

Inkscape是一个开源矢量图形编辑器,适用于所有主要平台。这是一个免费的 - 但可以说是功能较少 - 替代Adobe Illustrator。您可以使用它来设计传单和徽标,如下图所示,但它也是绘制数学数字的强大工具。

Inkscape中

为何选择Inkscape?

为LaTeX文档添加数字的最常见解决方案是Ti k Z,PSTricks和Asymptote。这些选项有一个共同点:它们是基于命令的,即您只需编写一些代码来指定绘制图形的方式。例如,以下Ti k Z代码

1
2
3
4
5
\begin{tikzpicture}
\coordinate (A) at (1, 3);
\draw[thick, ->] (0, 0) -- (A);
\node[above right] at (A) {$A = (1, 2)$};
\end{tikzpicture}

给出这个数字:

TikZ的例子

这些软件包的好处是绘制图形很像编程:您可以使用变量,进行计算,使用for循环等。此外,图形在文档中很好地融合,因为所有文本都由LaTeX本身排版。这意味着您可以毫不费力地排版数学,或者如果稍后您决定更改文档的字体,则所有数字都将自动更改以匹配新字体。

但是,这些资产会让您失去视觉反馈和速度。绘制复杂的图形本质上是一个图形任务,没有图形界面,它可能非常耗时。单击并拖动对象以移动它,徒手绘制曲线或拖动Bézier曲线的控制点是不可能的。这使得Ti k Z比Inkscape更难和更慢使用。虽然我偶尔使用Ti k Z进行复杂的数字,但我发现在大多数情况下,Inkscape的好处远远超过Ti k Z 的好处,特别是如果你在演讲期间受到时间压力的话。

有了这个,让我们开始吧。

在LaTeX文档中包含Inkscape数字

就像Ti k Z一样,Inkscape可以选择使用LaTeX渲染图形的文本。为此,它将数字导出为pdf和LaTeX文件。pdf文档包含剥离文本的图形,LaTeX文件包含将文本放在正确位置所需的代码。例如,假设您正在使用Inkscape中的下图:

黎曼定理

要在LaTeX文档中包含此图,您需要转到文件>另存为,选择’pdf’作为扩展名,然后按保存,弹出以下对话框:

另存为

选择“在pdf中省略文本并创建LaTeX文件”,将图形保存为pdf + LaTeX。要在LaTeX文档中包含这些Inkscape数字,您可以在序言中添加以下代码:

1
2
3
4
5
6
7
8
9
\usepackage{import}
\usepackage{xifthen}
\usepackage{pdfpages}
\usepackage{transparent}

\newcommand{\incfig}[1]{%
\def\svgwidth{\columnwidth}
\import{./figures/}{#1.pdf_tex}
}

假设该图位于figures/riemmans-theorem.svg,它可以简单地包含在以下代码中:

1
2
3
4
5
6
\begin{figure}[ht]
\centering
\incfig{riemmans-theorem}
\caption{Riemmans theorem}
\label{fig:riemmans-theorem}
\end{figure}

编译您的文档,您将获得以下内容。

渲染图

正如您所看到的,文本由LaTeX渲染,使图形完美融合。当您稍后决定更改字体时,它会相应地更新:

用不同的字体渲染图

此设置允许您在Inkscape中绘制图形,同时仍具有LaTeX的排版功能。

快速创建和包含数字

当我在讲座中做笔记时,我需要能够在不中断流程的情况下添加图形,而不是花时间打开Inkscape,搜索正确的目录,键入LaTeX代码以手动包含图形等等。为了避免这种情况,我为Vim添加了一些快捷方式来管理我的数字。例如,当我键入要创建的图形的标题并按下时Ctrl+F,会发生以下情况:

  1. 该脚本根据LaTeX根文件的位置查找数字目录。
  2. 然后它检查是否存在具有相同名称的图形。如果是这样,脚本什么都不做。
  3. 如果没有,我的图形模板将被复制到数字目录。
  4. 包含图标题的当前行将替换为LaTeX代码以包含该图。
  5. 新图在Inkscape中打开。
  6. 设置文件观察器,以便每当通过按下将图形保存为svg文件时Ctrl + S,它也将保存为pdf + LaTeX。这意味着我们之前讨论过的烦人的pdf保存对话框不再弹出。

看到它的实际效果:

添加一个数字

当我想编辑一个图形时,我可以按Ctrl+F正常模式打开一个选择对话框,允许我搜索当前文档中的图形。选择一个后,它会显示Inkscape中的数字。保存图形时,包含它的代码将复制到剪贴板。这样,如果删除原始代码,我可以重新包含它。

编辑一个图

这些快捷方式使得添加和打开数字变得轻而易举。我不必记得将数字保存为pdf + LaTeX,选择正确的目录或编写包含该图所需的代码。添加新数字的障碍远远低于我必须手动执行这些操作的障碍。你可以找到我在Github上管理数字的脚本。

现在,我已经解释我如何管理我的数据,我想谈谈实际上绘制在Inkscape中的数字。

绘图数字

虽然在大多数情况下,在Inkscape中绘制图形比使用Ti k Z 要快得多,但它仍然比手工绘制它们要慢。使用Inkscape的内置快捷方式可以加快进程,但仍然没有达到标准。

因此,我决定用Python编写一个自定义快捷管理器,它允许我在到达Inkscape之前拦截所有键盘事件。通过这种方式,我可以完全控制每次按键的解释方式,从而为我提供了很大的灵活性。

绘图形状

让我们从Inkscape的内置键盘快捷键开始。例如,r激活矩形绘制工具,e绘制省略号等。实现方式,这意味着快捷方式管理器将“重放”这些键盘事件,即它只是将它们传递给Inkscape。

但是,我使用and 而不是p铅笔和bBézier工具的默认快捷方式,因为在用右手使用鼠标时,它们更容易触及。本着左手制作快捷方式的精神,我还映射到撤消,删除和切换捕捉,这通常是难以到达的关键。wfzShift+zx%

应用常用样式的关键和弦

样式对象是我在Inkscape中做的第二个最常见的事情。我用于绘制图形的样式非常简单:

  • 形状例如矩形或圆形大多是黑色,浅灰色,白色或透明,并且可选地具有笔划。
  • 线条(包括笔划)大多是实线,点线或虚线。它们可以(非常)厚或具有正常宽度,并且可选地在任一侧上具有箭头。

这些选项组合在一起给出了下面常用的样式表:

常见的风格表

由于应用这些样式是我经常做的事情,我希望它很快,但使用Inkscape中的默认快捷方式需要太长时间。例如,假设您想要更改某些对象的样式,如下所示:

改变风格

您将按下Ctrl+Shift+F以打开样式面板,并通过单击更新每个对象的样式,因为您无法使用Inkscape中的键盘快捷键执行此操作。这很烦人。理想情况下,它应该只需要几分之一秒。

使用Inkscape的默认快捷方式

这是关键和弦发挥作用的地方。键和弦是键盘快捷键,由两个或多个同时击键组成。例如,当我按下s和f同时,我的快捷方式管理器将应用了坚实的中风和灰色填充到当前选择。当我想让笔画变粗时,我会同时按s+ f+ g,g代表厚(因为t键很难到达)。

这样,每个样式属性对应一个键: s代表正常笔划,f灰色填充,g厚,a箭头,d点线,e虚线等。这是可能选项的完整表格:

添加了键盘快捷键的常见样式表

此表中的某些样式仅对应一个键,例如左上角的样式:填充灰色而没有笔触。这可能会带来一个问题,因为只有按下才能f获得Bézier工具。解决方案是按Space+ f,Space就像占位符一样。

使用这些键和弦,可以通过几次击键解决上一个问题:

  • f+ s使矩形变为灰色并赋予其实心边框。
  • f+ h+ e代表’填充且非常厚实的虚线’。
  • a+ g+ d添加一个箭头,使线条粗点。

使用自定义快捷方式快速设置样式

添加文字

制作数字的另一个重要部分是添加文字。由于数字通常包含数学公式,我希望能够 Vim中使用我的代码段。为了确保这一点,我可以按下t打开一个小的Vim窗口,我可以在其中键入LaTeX。当我退出时,在Inkscape中插入一个文本节点:

LaTeX作为文本

正如我之前介绍的那样,当我在文档中插入图形时,LaTeX将呈现此文本。但是,有时我想立即渲染一些LaTeX,我可以这样做Shift+T:

作为svg的LaTeX

这两种选择都有其优点和缺点。我主要使用第一种方法,因为文本是由LaTeX文档呈现的。这意味着字体将始终匹配,您可以使用文档前言中定义的宏。然而,缺点是文本的定位有时有点困难。由于您没有在Inkscape中看到最终结果,因此有时需要从Inkscape跳转到我的pdf查看器并返回以微调结果。

保存和使用不太常用的样式

虽然关键和弦风格足够90%的时间,但有时我想使用自定义风格。例如,要绘制光学图表,有一个玻璃和光线样式是有用的。为此,我首先要使用默认快捷方式在Inkscape中创建样式:

使用默认快捷方式创建样式

要保存这些样式,请选择其中一个对象并按Shift + s。然后我输入新样式的名称,在本例中为“glass”,然后按Enter确认。现在这个样式已保存,我可以在以后使用它。

现在,当我选择一个对象时,按下s并键入“glass”,相应的样式将应用于该对象。但是,没有必要输入全名,因为当到目前为止匹配类型字符的唯一样式时,样式会立即应用。例如,如果我只有一个以’g’开头的样式,输入’g’就足以应用该样式。如果你有多种款式,那么’gl’或甚至’gla’都是必要的。

令人烦恼的是,每当你键入太多字符时 - 即假设键入’gl’会应用样式,但你输入’gla’ - 剩下的键,在这种情况下a将被解释为另一个命令,这将给出意想不到的结果。因此,快捷方式管理器在返回默认模式之前等待500毫秒。这足以让人们看到已经应用了样式并停止输入。

应用自定义样式

添加和保存对象

我的设置的最后一个元素是添加和保存对象。我可以添加它们a并保存它们Shift+a。例如,按下a并键入“ec”会添加一条椭圆曲线:

椭圆曲线

另一个例子,按下a并键入“dg”会添加一个“钥匙孔”(’dg’是键盘上’kh’的镜像)。我可以用Ctrl+-它从给定的形状中减去它:

锁孔

其他一些例子是blob和2D,3D轴,我在复杂分析和微分几何中经常使用它们。

斑点和2D,3D轴

如果你想尝试了这一点为自己,你可以找到我的两个执行Vim管理数字脚本和我Inkscape的快捷经理 Github上。这两个脚本仅适用于基于Linux的系统。第一个脚本应该开箱即用,第二个脚本可能不会。

结论

使用Inkscape,绘制文章,书籍和演示文稿的数字是轻而易举的。它们看起来很专业,可以很好地融入您的文档中。虽然它比手工绘制慢,但在大多数情况下它比Ti k Z 快。我的自定义快捷方式和我在Vim中管理数字的脚本使它更快,允许我在讲座期间绘制数字。

来了,老弟
-------------    本文结束  感谢您的阅读    -------------
0%