将 draw.io 中的图表导入 LaTeX

将 draw.io 中的图表导入 LaTeX

我在 draw.io 中创建了一个图表,我想将其包含在我的 LaTeX 文件中。Draw.io 可以选择将其导出为 svg、png 或 pdf。

当包含 svg 时,LaTeX 会使用其自己的样式(字体大小和字体系列)重新渲染 svg 内的字体,从而导致图表看起来很糟糕。

可以包含 png 并且看起来不错,但我读到包含矢量图形通常会在打印时产生更好的效果。

draw.io 的 pdf 导出结果为整个 A4 页面,图表周围有大量空白。我可以将其包含在我的 LaTeX 文件中,但空白使它看起来很糟糕。

您是否有包含 draw.io 图像的解决方案?

假设:

  1. 如何裁剪 PDF 以显示其内容。
  2. 如何停止重新渲染 SVG 以使其在 draw.io 和 LaTeX 中看起来相同。

答案1

回答我自己的问题,draw.io 工具可以将 PDF 输出裁剪为实际图表的大小。

PDF...怎么操作?从可用导出列表中选择。

PDF export

然后勾选Crop复选框并将 PDF 包含在您的 LaTeX 代码中。

Crop option

使用 PDF 图像编译文档比 PNG 更方便,但也更慢,因此,在执行此操作时,还要创建 PNG 导出,将两个文件都放在 LaTeX 文件夹中,并在命令中省略文件扩展名includegraphics。现在,您可以稍后在图像格式中选择首选项。

答案2

我将 draw.io 集成到我的论文的 LaTeX 工作流程中,如下所示:

在 Ubuntu 18.04 上测试。目录路径需要相应调整。

  1. 从以下位置安装“draw.io Desktop”https://about.draw.io/integrations/
    我使用 draw.io-amd64-10.7.7.deb,因为我使用 Ubuntu。
  2. 启动 draw.io Desktop 并使用它来创建图形。
    将它们存储在 ./document/images/drawio/ 下,并以 .drawio 作为扩展名,例如。myfigure.drawio
  3. 将 .drawio 文件转换为 PDF 文件。我使用一个简短的脚本来自动化该过程。
    添加convert_drawio_figures.sh到您的项目:

    #!/bin/bash
    
    /usr/bin/find ./document/images/drawio -name *.drawio -exec rm -f {}.pdf \; -exec /usr/local/bin/draw.io --crop -x -o {}.pdf {} \;
    

    此脚本对 ./document/images/drawio/ 下的所有 .drawio 文件执行 draw.io,并将它们作为 PDF 文件导出到具有相同名称的同一目录中,例如myfigure.drawio导出到myfigure.drawio.pdf。首先需要删除现有的 PDF 文件,否则 draw.io 会输出“写入文件时出错”。

  4. 将生成的 PDF 包含在您的 tex 文件中。根据您的需要调整 LaTeX 选项。
    \begin{figure}[h]
      \caption{Caption for my figure}
      \centering
      \includegraphics[width=0.75\textwidth]{images/drawio/myfigure.drawio.pdf}
    \end{figure}
    
  5. 在构建 LaTeX 文档之前手动运行convert_drawio_figures.sh,或者将其添加到构建配置中以便每次构建时自动运行它。

通过这种方法,您的所有 .drawio 文件都存储在本地。我将它们添加到我的文档的 git 存储库中,并在 .gitignore 文件中排除生成的 PDF 文件。

答案3

一些想法:

  • 最简单的方法可能是用您最喜欢的搜索引擎搜索“裁剪 PDF”,然后让一些在线工具为您进行裁剪。
  • 当包含 PDF 时\includegraphics,可以在可选参数中指定进行一些裁剪,例如:

    \includegraphics[trim=<left> <bottom> <right> <top>, clip]{mydrawio.pdf}
    
  • 当您使用 SVG 的“导出为 PDF”功能并选择将文本渲染为 LaTeX 时,您通常会执行类似的操作,\input{mydrawio.pdf_tex}并使用 LaTeX 的当前字体设置编写文本。我非常喜欢这种方式,因为这样图表的字体与周围的文本相同,但是您必须调整字体设置,以使文本仅占用与 draw.io 中相同的空间。

    如果不知道你的图像在 draw.io 和 LaTeX 中的具体显示效果,我无法给你准确的解决方案。但通常你可以先尝试更改字体大小:

    {\scriptsize\input{mydrawio.pdf_tex}}
    

答案4

根据以下答案普拉特纳我创建了一个 makefile 来执行此操作。除了 makefile 本身之外,最大的区别是我还将 drawio 添加到了 PATH

FILES := $(wildcard *.drawio)
PDFS  := $(addsuffix .pdf, $(FILES))

.PHONY : all
all : $(PDFS)

%.drawio.pdf : %.drawio
    drawio $< --crop -x pdf -o $@

clean :
    rm *.drawio.pdf

相关内容