在 macOS 或 Linux 中将文档中的所有公式导出为单独的 PDF 文件

在 macOS 或 Linux 中将文档中的所有公式导出为单独的 PDF 文件

通常,人们会用 tex 编写报告、论文、草稿、信件等,并需要根据这些内容进行演示。然后,将所有方程式导出为单独裁剪的精美 pdf 非常有用。这是一个相当 bash 脚本的主题,但它只与 tex 用户相关,并且与 tex 文件操作有关。

非常类似于将文档中的所有方程式导出为单独的 svg 文件但与 macOS 兼容并导出 pdf 方程式而不是 svg(需要进行微小的修改才能将它们获取为 svg 文件)。

这个问题可能相关:

从使用 Latex 编译的 PDF 中提取方程式

为文档中的所有方程式生成外​​部图像

答案1

这有力地证明了 Damien 的问答:将文档中的所有方程式导出为单独的 svg 文件

我基本上把所有命令都放在了一个相当脏的 bash 脚本中,但与 OSX 兼容的版本除外。(使用了很多:pdfcrop、pdftk、sed、latexmk、awk)

我使用这个解决方案来让乳胶更安静: 乳胶错误的编译器样式输出 以及将行插入 .tex 文件的 awk 解决方案,因为 OSX 中的 sed 似乎存在一些问题。(https://www.linuxquestions.org/questions/programming-9/sed-error-command-c-expects-%5C-followed-by-text-under-os-x-but-works-in-linux-730997/相当老了但可能仍未解决 (?))

要使用此功能,请将代码保存在名为 scriptName 的文件中,然后运行 ​​./scriptName file.tex

#!/bin/bash

if [ $# -le 0 ]
then
    echo "Usage: $0 filename"
    exit
fi
file=$1
if [ ! -e $file ] || [ ! -f $file ]
then
    echo $file not found or is not a regular file.
    exit
fi

outDir=splitEquations

if [ ! -e $outDir ]; then
    mkdir $outDir
    if [ $? -ne 0 ] ; then
            echo "Output directory $outDir does not exist and you have not enough permissions to create it."
            exit
    fi
fi

# Create a copy of the existing file
newFile=${file%.tex}-stripped.tex
cp $file $newFile

echo "Making a copy of $file, $newFile"
echo "Stripping: $newFile"

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

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

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

awk '/\\begin{document}/{print "\\usepackage[active,tightpage]{preview}\n\\PreviewEnvironment{align*}"}1' $newFile > auxFile
$newFile > auxFile

mv auxFile $newFile
latexmk -pdf -pdflatex="pdflatex -file-line-error -interaction=nonstopmode" $newFile 2>&1 | grep "^.*:[0-9]*: .*$"
pdfcrop ${newFile%.tex}.pdf
cd $outDir
pdftk "../${newFile%.tex}-crop.pdf" burst
cd ..
echo 'Done.'

此外,就我而言,我真正需要进行演示的不仅是下面的方程式\begin{equation} \end{equation},还包括插入文本中的所有方程式。我猜这通常很难做到,但至少就我而言,只需添加这些额外的 sed 替换即可(我发现在很多文件中我始终遵循这些规则 :P):

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

sed -i '' 's/\$\,/\\end{align*}/g'   $newFile
sed -i '' 's/\$\./\\end{align*}/g'   $newFile

sed -i '' 's/(\$/\\begin{align*}/g'   $newFile
sed -i '' 's/\$)/\\end{align*}/g'   $newFile

sed -i '' 's/^\$/\\begin{align*}/g'   $newFile
sed -i '' 's/\$$/\\end{align*}/g'   $newFile

sed -i '' 's/\$:/\\end{align*}/g'   $newFile

相关内容