我如何在Inkscape中为数学摘要绘制插图

上一篇文章中,我谈到了如何在Vim中的LaTeX上编写数学笔记。 在本文中,我将向您展示如何使用Inkscape为这些摘要创建图形,并讨论您的自制热键管理器。

一些例子


首先,让我向您展示一些数字示例。 它们是为复杂分析,微分几何,电动力学和椭圆曲线上我的学士学位而制成的。 我在授课中画了它们-当然,除了我的论文之外-我使用Inkscape,所以让我们开始吧。






什么是Inkscape?


Inkscape是可用于所有主要平台的开源矢量图形编辑器。 这是Adobe Illustrator的免费替代品,但功能可能较少。 如下图所示,它可用于设计传单和徽标,但它也是绘制几何形状的强大工具。



为什么要墨迹?


将图形添加到LaTeX文档的最常见解决方案是TikZ,PSTricks和Asymptote。 它们有一个共同点:它们都在团队中工作,也就是说,您只需编写确定如何绘制图形的代码。 例如,TikZ代码:

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

显示以下图片:



这些软件包的优点是绘图与编程非常相似:您可以使用变量,执行计算, for循环等。此外,绘图非常适合文档,因为所有文本都直接输入到LaTeX中。 这意味着键入公式很容易,如果以后您决定更改文档的字体,则所有图片都会根据新字体自动更改。

但是,由于这些优点,您必须为缺少视觉反馈和低速而付出代价。 绘制复杂形状本质上是图形任务,而没有图形界面会非常耗时。 不能单击并拖动对象,用手绘制曲线或拖动Bezier曲线的控制点。 因此,TikZ比Inkscape复杂得多,速度也慢得多。 尽管有时我会在复杂的工程图中使用TikZ,但在大多数情况下,Inkscape的优势远远超过TikZ的优势,尤其是在您上课时间紧张的情况下。

结束了,让我们开始吧。

将Inkscape图纸嵌入LaTeX文档中


与TikZ一样,Inkscape可以使用LaTeX在图形中显示文本。 为此,编辑器将数字导出为pdf和LaTeX文件。 在第一张带有单独文本的图片中,以及在LaTeX文件中-正确放置文本所必需的代码。 例如,您正在Inkscape中处理以下图形:


黎曼定理

要将此图包含在LaTeX文档中,请转到“ 文件›另存为”菜单,选择“ pdf”作为扩展名,然后单击“ 保存” ,将出现以下对话框:



选择“在pdf中省略文本并创建LaTeX文件”会将图形另存为pdf + LaTeX。 要将Inkscape绘图插入LaTeX文档,可以将以下代码添加到序言中:

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

假设该图在figures/riemmans-theorem.svg ,则可以使用简单的代码将其插入:

 \begin{figure}[ht] \centering \incfig{riemmans-theorem} \caption{Riemmans theorem} \label{fig:riemmans-theorem} \end{figure} 

编译文档后,您将看到:



如您所见,文本是使用LaTeX呈现的,看起来非常漂亮。 如果您以后决定更改字体,它将相应地更新:



这样的系统允许您在继续键入LaTeX的同时绘制Inkscape。

快速创建和插入工程图


在演讲中编写摘要时,我需要在不中断流程的情况下即时添加图形,即不要浪费时间打开Inkscape,查找正确的目录,输入LaTeX代码以手动插入图形等。 为避免这种情况,我在Vim中添加了一些键盘快捷键来管理图形。 例如,当我键入图片标题Ctrl+F ,将发生以下情况:

  1. 该脚本根据LaTeX根文件的位置查找图片目录。
  2. 然后检查是否存在具有相同名称的图形。 如果是这样,脚本将不执行任何操作。
  3. 如果不是,则将模式模板复制到/figures目录。
  4. 带有图片标题的当前行由LaTeX代码替换以插入它。
  5. 在Inkscape中将打开一个新图形。
  6. 文件监视的配置方式是,每当通过按Ctrl+S将图片保存到svg文件时,该图片也将另存为pdf + LaTeX。 因此,不再出现我们前面讨论的烦人的pdf保存对话框。

实施方案:



当我要编辑图片时,在正常模式下Ctrl+F 。 将打开一个选择对话框,使您可以在当前文档中搜索图案。 选择后,它将在Inkscape中打开图形。 保存后,粘贴代码将复制到剪贴板。 因此,如果删除了源,我可以重新插入它。



这些热键使您可以动态添加和打开图形。 您无需记住,对于每个文件,您都需要指定pdf + LaTeX,选择正确的目录或编写要插入的代码。 与手动添加图片相比,添加新图片的障碍要低得多。 我的图片管理脚本发布在Github上

了解管理知识之后,让我们讨论如何在Inkscape中实际绘制形状。

画图


尽管Inkscape中的绘制通常比TikZ中的绘制更快,但仍比手工绘制要慢。 使用Inkscape的内置键盘快捷键可以加快该过程,但仍然不够。

因此,我决定用Python编写一个自制的快捷方式管理器,该管理器允许您在所有键盘事件到达Inkscape之前对其进行拦截。 因此,我可以完全控制每个按键的解释方式,从而提供了极大的灵活性。

绘图形状


让我们从Inkscape内置键盘快捷键开始。 例如, r激活矩形绘制工具, e绘制椭圆形等。从实现的角度来看,这意味着组合管理器将“回放”这些键盘事件,即将它们简单地传输到Inkscape。

但是,我使用wf代替了铅笔的默认快捷键p和贝塞尔曲线的默认快捷键,因为如果在鼠标右键中,用左手单击它们会更方便。 本着左手组合的精神,我还匹配了z来取消, Shift+z来删除, x来切换捕捉,它们通常分配给难以到达的%

常用样式的按键组合


样式对象是我在Inkscape中第二常见的事情。 绘制形状的样式非常简单:

  • 诸如矩形和圆形的形状通常是黑色,浅灰色,白色或透明的。 与轮廓。
  • 线(包括轮廓线)大多是实线,虚线或点线。 它们可以(非常)粗体或正常宽度,有时在一侧或两侧带有箭头。

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



由于我经常使用这些样式,因此我想快速完成,但是使用Inkscape的默认快捷方式会花费太多时间。 例如,您要更改某些对象的样式,如下所示:



您必须按Ctrl+Shift+F打开样式面板,并通过单击来更新每个对象的样式,因为您无法使用Inkscape中的键盘快捷键来执行此操作。 这很累。 理想情况下,我想在一秒钟内执行这样的操作。



这是进入键盘快捷方式的地方,该快捷方式由两个或多个同时的击键组成。 例如,当我同时按sf时,我的组合管理器将对当前选择应用实线轮廓和灰色填充。 当您需要粗体轮廓时,请同时按s+f+g ,其中g表示粗体。

因此,每个属性都与一个键相对应: s表示法线轮廓, f表示灰色填充, g表示厚度, a表示箭头, d表示点, e表示虚线,依此类推。



该表中的某些样式仅对应一个键,例如,左上角的样式:灰色填充,没有轮廓。 这可能是一个问题,因为按下单个f启动Bezier曲线工具。 解决方案是按 + f ,其中空格充当占位符。

通过这种组合,只需轻按几下即可解决先前的问题:

  • f + s使矩形变为灰色并添加实线轮廓;
  • f + h + e表示填充和粗体点
  • a + g + d添加一个箭头,并将该线变成粗虚线。



添加文字


由于数学公式经常出现在绘图中,因此我想在Vim中使用我的代码片段 。 为此,请按t ,这将打开一个小的Vim窗口,在其中输入LaTeX代码。 退出后,将文本片段插入Inkscape中:



正如我所说,当您在文档中插入图片时,LaTeX将显示此文本。 但是有时候我想立即显示LaTeX,可以通过Shift+T来完成:



两种选择都有其优点和缺点。 基本上,我使用第一种方法,因为文本显示在LaTeX文档中。 这意味着字体始终匹配,并且您可以使用文档的前序中定义的宏。 但是有一个缺点:执行文本定位有时会有些困难。 由于您看不到Inkscape的最终结果,因此有时您需要从Inkscape切换到pdf查看器,然后再重新调整结果。

保存和使用稀有样式


尽管在90%的情况下基本样式就足够了,但有时您还是想使用特殊样式。 例如,要在光学元件上绘制图表,使用玻璃和光束样式很有用。 为此,您首先需要使用默认组合在Inkscape中创建样式:



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

现在,当我选择一个对象时,按s并输入'glass',相应的样式将应用于该对象。 但是,无需输入全名,因为如果样式单独与输入的字符匹配,则会立即应用样式。 例如,如果我只有一种以'g'开头的样式,则输入此字母之一就足以应用该样式。 如果您有几种样式,则必须输入“ gl”甚至“ gla”。

在这种情况下,当您输入太多字符时崩溃很烦人:假设输入'gl'的样式是正确的,但是您键入'gla',然后a将被解释为另一个命令。 因此,组合管理器将等待500 ms,然后返回默认模式。 这个时间足以使人们看到样式已被应用并停止打印。



添加和保存对象


我的设置的最后一个元素是添加和保存对象,分别使用aShift+a键来完成。 例如,按a并输入'ec'会添加一条椭圆曲线:



再举一个例子:按a并输入'dg'会添加一个锁孔,即锁孔('dg'是键盘上'kh'的镜像)。 使用Ctrl+-可从给定形状中减去图形:



其他一些示例:斑点和2D,3D轴,我经常在复杂的分析和微分几何中使用它们。



代号


如果您想自己尝试, 可以在Github 发布用于在Vim中管理图形脚本Inkscape键盘快捷方式管理器 。 这两个脚本仅在Linux系统上工作。 第一个应该开箱即用,第二个可能需要其他配置。

结论


使用Inkscape,您可以轻松,快速地为文章,书籍和演示文稿创建插图。 它们看起来很专业,非常适合文档。 尽管这比手工绘制要慢,但是在大多数情况下,Inkscape比TikZ快。 我的键盘快捷键和用于在Vim中管理图形的脚本可进一步加快工作速度,使您可以在演讲过程中绘制图形,与讲师保持同步。

Source: https://habr.com/ru/post/zh-CN450088/


All Articles