概要
- LaTeXで書いた数式をpngで保存する方法です
- スクショと異なり背景透過もされているため扱いやすいです
- 複数の数式を一度に出力できます
- パワポなどに貼るときに便利です
環境
- TexLive 2023
- Inkscape 1.3.2
- Ubuntu 22.04(Windowsにも方法は転用可能)
方法
大雑把な流れ
- LaTeXで数式のみのpdfを出力(ページ番号なども無し)
-
pdfcrop
で余白を削除 -
rungs
でフォントをパスに変換(文字化け防止) -
pdfseparate
でpdfをページごとに分離 - inkscapeでpdfをpngに変換
pdfcrop
,rungs
とpdfseparate
は,TexLiveに同梱されています.
ビルド用のshellスクリプト
texbuild.sh
# ファイルパスの処理
filepath=$(readlink -m $1)
dir="$(dirname "$filepath")"
file="$(basename "$filepath")"
file="${file%.*}"
echo "[${dir}] [${file}]"
# ファイル名の生成
texname=$file".tex"
pdfname=$file".pdf"
pdf_tmp=$file"_tmp"
pdf_sep=$file"_%02d.pdf"
# カレントディレクトリの移動
OLDPWD=$PWD; cd $dir
echo $PWD
# すでにあるpdfとpngを削除
find -regex ".*png"
rm *pdf *png
# メインの処理(lualatex使用バージョン)
lualatex -interaction=nonstopmode --jobname=$pdf_tmp $texname
pdfcrop $pdf_tmp".pdf" $pdf_tmp".pdf"
rungs -o $pdfname -dNoOutputFonts -sDEVICE=pdfwrite $pdf_tmp".pdf"
pdfseparate $pdfname $pdf_sep
rm $pdf_tmp*
eqs=$(find -regex ".*[1-9]\.pdf" -type f )
for eq in $eqs; do
echo $eq
inkscape --pages=1 $eq --export-dpi=600 --export-type="png"
done
# 作業前のディレクトリに戻る
cd $OLDPWD
実行例
以下のtexファイルを例に実行例を示す(\clearpage
ごとに別々の画像が出力されます).
eq.tex
\documentclass[a4paper,10pt]{ltjsarticle}
\usepackage[deluxe,haranoaji]{luatexja-preset}
\usepackage{amsmath,mathtools,amssymb}
\pagestyle{empty}
\begin{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{align*}
e^{j\theta} = \cos(\theta) + j\sin(\theta)
\end{align*}
\clearpage
\begin{align*}
_{\it n}\mathrm{C}_{\it r} = \frac{n!}{(n-r)!r!}
\end{align*}
\clearpage
\begin{align*}
\int f(x)dx, \ g(x)=\int^{x} f(x')dx'
\end{align*}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\end{document}
上記のtexファイルに対して,以下のコマンドを実行する.
source texbuild.sh eq.tex
出力後のディレクトリ構造と出力された画像:
.
├── eq_01.pdf
├── eq_01.png
├── eq_02.pdf
├── eq_02.png
├── eq_03.pdf
├── eq_03.png
├── eq.pdf
├── eq.tex
└── texbuild.sh
-
eq_01.png
:
-
eq_02.png
:
-
eq_03.png
:
ソースコード