将文档中的所有方程式导出为单独的 svg 文件

将文档中的所有方程式导出为单独的 svg 文件

我目前正在根据一篇最初用 Latex 编写的论文进行演示。目前,我使用 Kile 和 Ubuntu 进行工作。

我发现我需要大量散布在演示文稿中的原始论文中的方程式(并使用它们来注释图表等)。我目前的屏幕截图 + gimp 方法相当慢 :)

因此,我想要做的是编译 tex 文档,而不是创建 pdf/dvi,而是希望它输出多个文件,每个文件都是文档中的一个方程式,最好是矢量格式,但如果必须的话,我会使用 PNG,只要它的分辨率足够高。

我已看过许多实用程序。

以下 Web 实用程序:http://www.codecogs.com/latex/eqneditor.php对于单独输入的方程式,它或多或少满足了我的要求。但是,我在方程式中使用了很多宏,这让它使用起来有点混乱(例如)

\newcommand{\SkewSymmetric}[1]{\ensuremath{ \left[ #1 \right]_{\times}}}

我看过 pdf2svg,但它并不能完全满足我的要求——我仍然需要裁剪出感兴趣的方程式。

还有什么我应该看看的吗?

答案1

查看预览包。例如,包括

\usepackage[active,tightpage]{preview}
\PreviewEnvironment{equation}

打印所有equation环境,不打印其他内容,每个环境均裁剪,一页一页。它对 DVI 和 pdf 输出同样有效。equation环境中嵌入的宏(或任何宏)的处理透明且正确。

然后可以使用以下命令将 pdf 转换为 SVG 图像:

pdf2svg filename.pdf output-page%03d.svg all

答案2

扩展@Kilgore 的答案:

要删除方程式编号(并且您拥有原始文件的完整备份!),您可以执行以下操作:

#!/bin/bash

files=`find . | grep -e '\.tex$'`

for file in $files ; do 

    echo "Stripping: $file"

    # Create a copy of the existing file
    cp $file $file.strip_backup

    sed -i 's/begin{equation\*}/begin{align*}/g'   $file
    sed -i 's/end{equation\*}/end{align*}/g'   $file

    sed -i 's/begin{equation}/begin{align*}/g'   $file
    sed -i 's/end{equation}/end{align*}/g'   $file

    sed -i 's/begin{align}/begin{align*}/g'   $file
    sed -i 's/end{align}/end{align*}/g'   $file

done

可以使用以下公式提取各个方程:

\usepackage[active,tightpage]{preview}
\PreviewEnvironment{align*}

(请注意添加的 *)

要删除多余的空格,请使用以下实用程序:

pdfcrop output.pdf

最后,你可以将其拆分成单独的 svg 文件

mkdir output-equations
pdf2svg filename.pdf output-equations/output-page%03d.svg all

如果 svg 图像仍然没有被正确裁剪,Inkscape 可以修复该问题:

inkscape -z --verb=FitCanvasToDrawing --verb=FileSave --verb=FileClose output-equations/*.svg

答案3

创建一个 Metapost 文件,每个方程包含一个图形,每个方程都放在一个“未装箱的盒子”中:

beginfig(1)
  boxit.a(btex $$e^{i\pi}+1=0$$ etex);
  a.c = (0,0);
  drawunboxed(a);
endfig(1);

beginfig(2)
  boxit.a(btex $$F={G m_1 m_2 \over d^2}$$ etex);
  a.c = (0,0);
  drawunboxed(a);
endfig(2);

运行mptosvg,它将为每个图形生成一个 SVG 文件,并带有正确的边界框。

答案4

您还可以使用縮寫包,它preview在内部使用该包,但也会裁剪生成的片段并将它们转换为多种不同的格式。您可以使用上面的@Damien 的答案将所有数学环境转换为align*'s 并调用:

ltximg --latex --extrenv 'align*' --imgdir eqs --svg --png -o test-out test_eq.tex

test_eq.tex从目录中提取 pdf、svg 和 png 片段eqs。ltximg 默认仅提取图片环境(tikz、pstricks 等),因此我们需要使用来--extrenv指定数学环境。

相关内容