adbird(広告鳥) 備忘録

Pandoc で markdown から 論文PDF へ変換

概要

Pandoc(Lualatexエンジン経由)で、markdown(マークダウン)ファイルを論文PDFに変換する方法。
ただし、文系の論文で、環境はLinux(Ubuntu16.04)で、Pandoc 2.1.1。

※Pandocのバージョンによっては正しく動作しなくなる恐れがありますので、あしからず。

う〜ん、でも文系の人でLinux使っている人なんて、僕のようなよほどの変人しかいないだろうなぁ…w。
気が向いたら、Windows対応の記述も追加します…。

フォルダ内の構成

任意のフォルダ
 ┃
 ┣ 原稿.md   (原稿ファイル)
 ┣ breakfbox.sty (TeXスタイルファイル)
 ┣ uline--.sty  (TeXスタイルファイル)
 ┣ テンプレ.tex
 ┣ makepaper.sh  (スクリプトファイル)
 ┣ pic/(画像フォルダ)
   ┣ 001.jpg

下準備 インストール編

Pandocのインストール

Pandoc

「There is a package installer at pandoc’s download page.」のリンク先の下の方にあるインストーラーをダウンロードして、インストール。

LaTeXTeX Live)のインストール

リンク先を参照のこと。Windowsだとインストールに2時間近くかかる…。

TeX Wiki / TeX Live/Windows

TeX Wiki / Linux

下準備 設定ファイル編

TeXスタイルファイル

下線・波線などのために必要。
breakfbox パッケージから、以下の2つのファイルを入手する。

  • uline--.sty
  • breakfbox.sty

テンプレ.tex

テキストエディタ(メモ帳など)で下記の内容をコピペして、「テンプレ.tex」を新規作成。

\documentclass[a4paper,lualatex,ja=standard]{bxjsarticle}

%ルビ、圏点
    \usepackage{luatexja-ruby}
%表
    \usepackage{longtable}
    \usepackage{booktabs}
%下線・波線・囲み文字 https://github.com/doraTeX/breakfbox から uline--.sty と breakfbox.sty を入手
    \usepackage[usetype1]{uline--}
    \usepackage{breakfbox}
%脚注番号を (1)に変更
    \renewcommand\thefootnote{(\arabic{footnote})}
%脚注番号を 1)に変更
    %\renewcommand\thefootnote{\arabic{footnote})}
%リンク
    \usepackage[hidelinks]{hyperref}

%画像
    \usepackage{graphicx}
    %\usepackage[export]{adjustbox}

%画像の幅のみ指定で、画像の幅・高さの比率を維持したまま縮小する
    \makeatletter
    \def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}
    \def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi}
    \makeatother
    % Scale images if necessary, so that they will not overflow the page
    % margins by default, and it is still possible to overwrite the defaults
    % using explicit options in \includegraphics[width, height, ...]{}
    \setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}

\title{$title$} 
\subtitle{\vspace{10truept}{\large $subtitle$}}
\author{$author$} 
\date{$date$} 

\begin{document}
    \maketitle
    % \tableofcontents
    \begin{abstract}$abstract$\end{abstract}

$body$

\end{document}

スクリプトファイル

テキストエディタ(メモ帳など)で下記の内容をコピペして、「makepaper.sh」を新規作成。

#オリジナルのmdをコピーして別名保存
cp $1.md `date +%Y%m%d-$1`.md

#オレオレ記法をTeX記法に置換
#波線
sed -i -e 's/uw{/\\uwave{/g' `date +%Y%m%d-$1`.md
sed -i -e 's/}uw/}/g' `date +%Y%m%d-$1`.md

#下線
sed -i -e 's/ul{/\\uline{/g' `date +%Y%m%d-$1`.md
sed -i -e 's/}ul/}/g' `date +%Y%m%d-$1`.md

#囲み文字
sed -i -e 's/k{/\\breakfbox{/g' `date +%Y%m%d-$1`.md
sed -i -e 's/}k/}/g' `date +%Y%m%d-$1`.md

#ルビ
sed -i -e 's/rb{/\\ruby{/g' `date +%Y%m%d-$1`.md
sed -i -e 's/}rb/}/g' `date +%Y%m%d-$1`.md

#圏点
sed -i -e 's/ten{/\\kenten{/g' `date +%Y%m%d-$1`.md
sed -i -e 's/}ten/}/g' `date +%Y%m%d-$1`.md

#pdfに変換
pandoc `date +%Y%m%d-$1`.md -o `date +%Y%m%d-$1`.pdf --pdf-engine=lualatex --template テンプレ.tex -V papersize=a4 -V classoption=jafont=ipaex

#別名保存したmdを削除
rm -f `date +%Y%m%d-$1`.md

#wordに変換。ただし、ルビの文字等が消えるので注意。
# pandoc $1.md -o `date +%Y%m%d-$1`.docx

原稿作成

以下のような感じで、「原稿.md」を作成。

なぜルビや下線などをLaTeX記法ではなく、オレオレ記法wで書いているかというと、
一つはできるだけ短い記法にしたいということと、
もう一つは、もしhtmlなどの別のファイルに変換したいときに、LaTeX記法のままだと全ての記法(例えば、\uline{下線}\ruby{語句}{ごく}など)の最後が「}」になり、僕の技量では記法ごとの置換が適切にできない(終わりを記法ごとに</span><\/rt><\/ruby>などに区別して置換したいけど、全てが}だと難しい)ので、あえて}ul }rbと明示することによって、それらを</span> <\/rt><\/ruby>などに置換しやすいようにしている。

---
title: 論文タイトル
subtitle: サブタイトル
author: 執筆者名
date: 日付
header-includes: |

abstract: This is a pandoc test . . .
---


<!-- 書き方メモ
- 強調  *強調したい文字* ゴシックになる程度
- ルビ  rb{山|﨑}{やま|さき}rb
- 圏点  ten{傍点をつけたい語句}ten
- 下線 ul{下線をつけたい文字}ul
- 波線 uw{波線をつけたい文字}uw
- 囲み文字 k{囲みたい文字}k
- 引用 > 
- 画像 ![キャプション](pic/001.jpg){width=10cm}
- 脚注 本文につける[^1]   [^1]:脚注を書く
- 見出しに章番号をつけたくない時  # 見出し{-}
-->

# はじめに

# 教育の目的

以下、福沢諭吉の「教育の目的」より。


>  ul{教育の目的は}ul、人生を発達して極度に導くにあり。そのこれを導くは何のためにするやと尋ぬれば、uw{人類をして至大の幸福を得せしめんがためなり}uw。そのrb{至|大}{し|だい}rbの幸福とは何ぞや。ここに文字の義を細かに論ぜずして民間普通の語を用うれば、天下泰平・家内安全、すなわちこれなり。今この語の二字を取りて、かりにこれをk{平安の主義}kと名づく。人として平安を好むは、これをその天性というべきか、はた習慣というべきか。余は宗教の天然説を度外視する者なれば、天の約束というも、rb{人為}{じんい}rbの習慣というも、そのへんはこれをrb{人々}{にんにん}rbの所見にまかして問うことなしといえども、ただ平安を好むの一事にいたりては、古今人間の実際に行われてrb{違}{たが}rbうことなきを知るべきのみ。しからばすなわちten{教育の目的は平安にあり}tenというも、世界人類の社会に通用してrb{妨}{さまたげ}rbあることなかるべし。

>  そもそも今日の社会に、いわゆる宗旨なり、徳教なり、政治なり、経済なり、その所論おのおのrb{趣}{おもむき}rbを一にせずして、はなはだしきはrb{相互}{あいたがい}rbにrb{背|馳}{はい|ち}rbするものもあるに似たれども、平安の一義にいたりてはrb{相違}{あいたが}rbうなきを見るべし。宗旨・徳教、何のためにするや。善を勧めて精神の平安をいたすのみ。*政治、何のためにするや。悪をrb{懲}{こ}rbらし害を防ぎて、もって心身の平安を助くるのみ。*経済、何のためにするや。人工を便利にして形体の平安を増すのみ。されば平安の主義は人生の達するところ、教育のとどまるところというも、はたして真実|rb{無|妄}{む|もう}rbなるを知るべし。


以上、青空文庫より[^1]。

[^1]:著作権の消滅した作品が読める。http://www.aozora.gr.jp/

表の作成は、このサイト(http://www.tablesgenerator.com/markdown_tables)を利用するのが便利。というか、このサイトがないと、表を作る気がしない。

Table:表の例

| Tables   |      Are      |  Cool |
|----------|:-------------:|------:|
| col 1 is |  left-aligned | $1600 |
| col 2 is |    centered   |   $12 |
| col 3 is | right-aligned |    $1 |

![画像のキャプション](pic/test.jpg){width=5cm}

スクリプト実行

端末(ターミナル)で以下を実行。Lualatex経由なので、処理に時間がかかるけど、じっと我慢していると、PDFが作成される。

$ sh makepaper.sh 原稿

サンプル画像

f:id:adbird:20180131205538p:plain