EmacsでMarkdownからpdfを作る
Emacsで今編集しているMarkdownファイルからいきなりpdfやdocxを生成できるようになれば仕事がさらにやりやすくなるだろうという着想から作った機能があります。 しばらく使ってみてかなり仕事がはかどるようになりました。
何はともあれ出来上がったgifアニメーションをご覧ください。
Emacsで対象となるMarkdownファイルを開いた状態で
M-x md2pdf
これだけで同じディレクトリ内にpdfが生成されます。
M-x md2docx
これだけで同じディレクトリにdocxが生成されます。
markdownでOfficeを断捨離
最近は請求書や見積書などの書類をWebサービスで作ることは一般化してきているので、 WordやExcelなどのOffice系ソフトウェアの必要性は低下してきています。 WordやExcelを使う人にとっても最終的にpdfで出力すればトラブルも少ないと周知されてきたので、 資料となるデータはpdfでいただくことが多くなってきました。 これはたいへんありがたいことです。
そうであるならば、pdfとdocxを作成するときにOffice系のソフトウェアで文書を作成しないようにすると、個人的にOffice系のソフトウェアを断捨離できるのではないかという企みです。 pdfで文書を作成するとスマートフォンでも閲覧できるのでよいのではないでしょうか。 GitHubでMarkdownを使ってドキュメントを書くのは慣れていますし、pdfとdocxもこの際Markdownで書いていくことにしましょう。 Markdownはテキストベースのフォーマットなのでgitで管理しやすいのもよい点です。 またOffice系のソフトウェアはEmacsキーバインド1で文章が書けなくて苦痛だったので、 Emacsでpdfとdocxを生成できるなら仕事が捗るようになります。
コマンドラインでpdfとdocxを生成
md2pdf draft.md
pdfを作る場合
md2docx draft.md
docxを作る場合(ほとんどの場合pdfでよいと思いますが)。 これでdraft.docxのファイルが完成するようになりました。
必要なものをinstall
LaTeXとPandocが必要なのでお使いのOSに合わせてインストールしてください。 例はArchLinuxです。
sudo pacman -S pandoc texlive-langjapanese texlive-latexextra
~/.bashrcか~/.zshrcに以下のように書いておきます。
function md2pdf() {
if [ $# = 1 ]; then
fname_ext=$1
fname="${fname_ext%.*}"
pandoc $1 -o $fname.pdf -V mainfont=IPAPGothic -V fontsize=16pt --pdf-engine=lualatex
else
echo 'usage: md2pdf file.md'
fi
}
function md2docx() {
if [ $# = 1 ]; then
fname_ext=$1
fname="${fname_ext%.*}"
pandoc $1 -t docx -o $fname.docx -V mainfont=IPAPGothic -V fontsize=16pt --toc --highlight-style=zenburn
else
echo 'usage: md2docx file.md'
fi
}
コマンドラインだけならこれで終わりです。 フォントはお好きなものを設定してください。
Emacsのmarkdownからpdfを直接生成
ここから本題に入ります。 コマンドラインでディレクトリ移動してコマンドをたたくのも悪くはないですが、 もっと楽にエディタで今編集しているMarkdownから直接pdfとdocxを作りたいのでelispを書きます。
exec-path-from-shellが必要なのでインストールします。
(defun md2pdf ()
"Generate pdf from currently open markdown."
(interactive)
(let ((filename (buffer-file-name (current-buffer))))
(shell-command-to-string
(concat "pandoc "
filename
" -o "
(file-name-sans-extension filename)
".pdf -V mainfont=IPAPGothic -V fontsize=16pt --pdf-engine=lualatex"))
(shell-command-to-string
(concat "xdg-open "
(file-name-sans-extension filename)
".pdf"))))
(defun md2docx ()
"Generate docx from currently open markdown."
(interactive)
(let ((filename (buffer-file-name (current-buffer))))
(shell-command-to-string
(concat "pandoc "
filename
" -t docx -o "
(file-name-sans-extension filename)
".docx -V mainfont=IPAPGothic -V fontsize=16pt --toc --highlight-style=zenburn"))
(shell-command-to-string
(concat "xdg-open "
(file-name-sans-extension filename)
".docx"))))
macOSではxdg-openのかわりにopenコマンドを使用してください。
フォントはお好きなものを設定してください。
ブログ記事を投稿したらTwitterでお知らせいたします。ブログを気に入っていただけた方はお気軽にフォローしてください。
— Solist Work (@SolistWork) 2018年11月27日
関連記事
最新記事
タグ一覧
-
ansible (2)
application (8)
chrome (1)
command (14)
django (1)
docker (3)
document (1)
emacs (14)
git (2)
google (1)
hugo (1)
kubernetes (1)
linux (20)
makefile (6)
mariadb (2)
melpa (1)
postgresql (2)
python (1)
security (2)
terminal (11)
thinkpad (2)
work (6)
zsh (10)