我可以在 LaTeX 代码中修剪 SVG 吗?

我可以在 LaTeX 代码中修剪 SVG 吗?

我想用 LaTeX 代码修剪我的图形。不幸的是,这是一个 SVG 图形,因此我使用以下命令导入它:

    \begin{figure}[h]
    \centering
    \def\svgwidth{0.8\columnwidth}
    \input{MessAbsch.eps_tex}  
    \caption{Caption}
    \label{fig:measRanEst}
    \end{figure}

对于正常情况\includegraphics您可以使用:trim=1cm 2cm 3cm 4cm,是否有等效的 \input宏?

答案1

要导入 SVG 绘图,最好使用svg打包比手动\input操作更容易。(见这个答案了解如何设置它。)这个包没有提供选项trim,但是adjustbox包让您可以像使用一样修剪(和剪辑)任何内容\includegraphics

因此,在加载软件包之后

\usepackage[inkscapearea=page]{svg}
\usepackage{adjustbox}

你可以修剪你的绘图

\adjustbox{trim=1cm 2cm 3cm 4cm}{%
  \includesvg{MessAbsch}%
}

请注意 总是\includegraphics先修剪,然后缩放,但 是adjustbox最后修剪。因此,如果您希望最终绘图的宽度为6cm,则必须在修剪之前将其包含得太大。

\adjustbox{trim=1cm 2cm 3cm 4cm}{%
  \includesvg[width=9cm]{MessAbsch}%
}

\input当然,这种方法也适用于,但是使用svg具有多个优点,值得使用。

答案2

我通常在 Google 幻灯片上绘图并下载 SVG 文件。我尝试了\adjustboxschtandard 提到的方法。它没有按预期工作。

最初,我想裁剪掉阴影区域

在此处输入图片描述

我用了

\lipsum[2-2]
\begin{figure}[h]
    \centering
    \adjustbox{trim=1cm 2cm 3cm 4cm}{
        \frame{\includesvg[width=0.90\textwidth]{Diagrams4.svg}}
    }
    \caption{\textbf{Overall ------------------------}}
    \label{fig:arch}
    \centering
\end{figure}

结果如下

在此处输入图片描述

我开始阅读 SVG 文件的代码,并找到了一种手动裁剪 SVG 文件的方法。下图说明了我的发现。你可以想象那个机器人拿着一把刀。

在此处输入图片描述

上述方法的一个主要缺点是必须手动尝试不同的值才能获得完美的裁剪窗口。我发现了一种更简单的方法。我们可以简单地使用 Libre Draw 裁剪 SVG 文件。

插入图像 --> 裁剪 --> 导出为 SVG

结果如下:

在此处输入图片描述

答案3

我最近开始使用 Google Slides 制作插图。我遇到的一个问题是将矢量图形导出到 TeX 文件。可以从 Google Slide 下载幻灯片作为 svg 文件,但需要修剪以删除边距。我遇到了与 @Ritwik 相同的问题,即调整框会导致图像遮挡文本。

我采用的解决方案是将 svg 转换为 pdf,然后使用 中的修剪功能\includegraphics。以下是我在 Linux 上用来简化流程的步骤:

  1. 首先从 Google Slides 或其他来源保存 svg,然后将其重命名为name_of_the_figure.svg

  2. 我使用一个单独的文件夹来存储所有从 Google Slides 生成的 svg 文件。我在这个文件夹中创建了一个 makefile

#----------------------------makefile for svg-----------------------------
# generate file with name parsed from .svg file
TARGET := $(patsubst %.svg,%.pdf,$(wildcard *.svg))
default: ${TARGET}
#------------------------------------rules-----------------------------------
# use python to generate figure
%.pdf: %.svg
inkscape -D -z --file=$< --export-pdf=$@
#-----------------------------------clean-----------------------------------
.PHONY: clean
clean:
rm -f ${TARGET}

关键命令是

inkscape -D -z --file=$< --export-pdf=$@

它将替换$<先决条件名称(在本例中name_of_the_figure.svg为每个 svg),并生成name_of_the_figure.pdf

每次您修改 svg 时,只需make在文件夹中输入,就会为那些更新的 svg 生成新的 pdf。

  1. 修剪内部乳胶
\begin{figure}[h]
\centering
%  trim={<left> <lower> <right> <upper>}
\includegraphics[width=1\textwidth,trim=4.cm 4.8cm 5cm 3.5cm,clip]{name_of_the_figure.pdf}
\end{figure}

LaTeX 的优点是您可以在 pdf 预览中立即看到裁剪的结果,并可以快速调整修剪参数。

我发现修剪 svg 的另一种方法是使用命令行工具 vpype

https://github.com/abey79/vpype

它被引入到这个Stackoverflow 帖子

vpype read test.svg crop 0cm 0cm 10cm 20cm write output.svg

但是 vpype 并不能保留 svg 的所有特性。在我的例子中,裁剪后的 svg 失去了颜色。你应该测试一下 vpype 是否适合你的用例。

希望这些有帮助!

相关内容