読者です 読者をやめる 読者になる 読者になる

Pandoc + LaTeX で markdownからB6縦書・小説本のPDFを作成

概要

markdown記法(markdownで表現できないところは結局、TeX記法になってしまうが)で原稿を書いて、コマンド(Windowsならファイルのドラッグ・アンド・ドロップ)で、B6縦書の小説本やエッセイ本PDF作成ができる。

フォルダ内の構成

任意のフォルダ内が以下のような構成になるように準備していく。

任意のフォルダ
 ┃
 ┣ B6tate.sty (設定スタイルファイル)
 ┣ Base-B6tate.tex  (LaTeXテンプレート)
 ┣ makepdfB6.bat (Winのみ。バッチファイル)
 ┣ makepdfB6.sh  (Linuxのみ。スクリプトファイル)
 ┣ nkf.exe    (Winのみ。nkfコマンドプログラム)
 ┣ 原稿.md   (原稿ファイル)
 ┣ 001.jpg   (原稿に挿入する画像)
 ┣ 002.jpg

下準備 拡張子の表示設定

Windows(以下、Win)の人は、ファイルの拡張子が表示されるようにしておく。

ファイル名を「makepdfB6.bat」や「原稿.md」にしないといけないところを、気づかずに「makepdfB6.bat.txt」や「原稿.md.txt」になってしまって、うまく実行されなくなってしまうのを防ぐために必要。

下準備 インストール編

Pandocのインストール

Pandoc

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

sedのインストール(Winのみ)

Pandocで変換して生成されたTeXファイルのコードの文字列をsedを使って置換して、画像を正しい向きに調整するためなどに必要。

sed for Windows

「Download」の項目の「Complete package, except sources Setup」をクリックして、インストーラーをダウンロードして、インストール。

nkfプログラムのダウンロード(Winのみ)

Windows用のsedが、対象ファイルがutf-8のままだと動いてくれないので、文字コードを変換してsedを実行するために必要。

nkf.exe nkf32.dll Windows用

「nkfwin.zip」をダウンロードして、展開。

「vc2005\win32(98,Me,NT,2000,XP,Vista,7)Windows-31J」フォルダの中にある「nkf32.exe」という実行ファイルを取り出し、「原稿.md」などを入れるフォルダにコピーして、「nkf.exe」という名前に変更する。名前を変更するのを忘れないように!

よくPATH(パス)を通してくださいっていう情報があるけど、作業をする同じフォルダ内に入れておけばいいので、別にパスは通さなくていい。

LaTeXTeX Live)のインストール

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

TeX Wiki / TeX Live/Windows

TeX Wiki / Linux

下準備 設定ファイル編

設定ファイルを自分で作るのが面倒くさい人は、

を、ダウンロードして展開してください。

ただし、Windowsの人は、前述のnkfプログラムのダウンロードで取り出してリネームしたnkf.exe」を、展開したフォルダ内(原稿.mdなどの入っているフォルダ内)に入れることを忘れずに。

よく分からないzipファイルはウイルス等の危険性があって怖いという人は、以下のように一つずつファイルを作っていく。

テキストエディタ(メモ帳など)で、下記の3つの設定等ファイルを新規作成。ファイルの内容はそれぞれ後述の内容をコピペするだけ。

ただし、Winは文字コードに注意すること。

メモ帳で作成・保存(「名前を付けて保存」)するときには、バッチファイルのmakepdfB6.bat以外は、以下の設定にすることに注意。

  • ファイルの種類を「すべてのファイル
  • 文字コードを「UTF-8」を選ぶ(たぶん、全ファイルUTF-8で大丈夫だと思う。 makepdfB6.bat は、shift_jis(932) じゃないとダメでした。メモ帳で makepdfB6.bat を編集する場合は上記の文字コード変換はしなくていいです〔ANSIになっていればいい〕)。

もし、ファイル名に「.txt」がついたら、それを消すこと。例えば、「B6tate.sty.txt」となってしまったら、「B6tate.sty」にする。ファイル名の「.txt」を消すときに、もしかしたら警告が出るけど、気にしなくていい。

B6tate.sty

LaTeXのB6縦書のために調整した設定スタイルファイル。

% 数字をtime系に
\usepackage{newtxtext,newtxmath}

%ルビ 例 \ruby{山﨑}{やま|さき}
\usepackage{pxrubrica}

%1行目を1文字目インデント
\usepackage{indentfirst}

%一部横書きなど
\usepackage{plext}

%BMP外の文字を使う
\usepackage{otf}

% 原稿ページ設定(B6[JIS規格])
\paperwidth 128mm
\paperheight 182mm
\topmargin -15mm
\headheight 3mm
\headsep 7mm
\oddsidemargin -8.9mm
\evensidemargin -8.9mm
\textwidth 137mm %縦書なので、これがテキストの「高さ」
\textheight 95mm %縦書なので、これがテキストの「幅」
\footskip 15mm

\renewcommand{\baselinestretch}{1.15}

\pagestyle{bothstyle}
\usepackage[dvipdfmx]{graphicx}
\usepackage{bounddvi} %%トンボ付ける際に必要

% 印刷用紙サイズ
%\special{papersize=182mm,257mm} %%B5に面付け
%\special{papersize=210mm,297mm} %%A4に面付け
%\special{papersize=\the\paperwidth,\the\paperheight} %%上記原稿サイズ(B6[JIS規格])

%タイトルページ出力
\usepackage{titlesec}

%タイトルページの再定義
\makeatletter
\if@titlepage
  \renewcommand{\maketitle}{\begin{titlepage}%
  \let\footnotesize\small
  \let\footnoterule\relax
  \let\thanks\p@thanks
  \let\footnote\thanks
  \vbox to\textheight\bgroup\tate\hsize\textwidth
  \null\vfil
  \vskip 63\p@
  \begin{center}%
    {\LARGE \@title}\hspace{4em}{\kanjiskip=.1zw plus.5pt minus.5pt \large \@author \par}%
  \end{center}\par
  \vfil{\centering\@thanks}\vfil\null
  \egroup
  \end{titlepage}%
  }%
\makeatother

%ヘッダー、フッター調整。文字を小さく(\footnotesize)。
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[ol]{\footnotesize\leftmark} %奇数ページ左上に「偶数ページ用の柱=章」
\fancyhead[er]{\footnotesize\rightmark} %偶数ページ右上に「奇数ページ用の柱=節」
\fancyfoot[ol]{\footnotesize\thepage} %奇数ページ右上にページ番号
\fancyfoot[er]{\footnotesize\thepage} %偶数ページに右下にページ番号
\renewcommand{\headrulewidth}{0pt} %ヘッダーの下線の太さ
\renewcommand{\footrulewidth}{0pt} %フッターの下線の太さ

%1頁目を空白ページにしない。\白紙ページにfootnombreスタイルを適用
\makeatletter
\def\cleardoublepage{\clearpage
\if@twoside
  \ifodd\c@page\else
      \hbox{}\thispagestyle{footnombre}\newpage
      \if@twocolumn\hbox{}\newpage\fi
  \fi\fi}
\makeatother

%footnombre 白紙ページ、各章の最初のページのノンブルを小さく
\makeatletter
\def\ps@footnombre{\let\@mkboth\@gobbletwo
    \let\ps@jpl@in\ps@footnombre
  \def\@evenfoot{\hfil\footnotesize\thepage}%\footnotesizeで小さく
  \def\@oddfoot{\footnotesize\thepage\hfil}%\footnotesizeで小さく
  \let\@oddhead\@empty\let\@evenhead\@empty}
\let\ps@jpl@in\ps@footnombre
\makeatother

%目次ページのヘッダーを削除。
\makeatletter
\renewcommand{\tableofcontents}{%
  \if@twocolumn\@restonecoltrue\onecolumn
  \else\@restonecolfalse\fi
  \chapter*{\contentsname
    \@mkboth{}{}
    %\@mkboth{\contentsname}{\contentsname}
  }\@starttoc{toc}%
  \if@restonecol\twocolumn\fi
}
\makeatother

%脚注のインデント調整
\renewcommand\thefootnote{\rensuji{\arabic{footnote}}}

\makeatletter
\long\def\@makefntext#1{\parindent 1em\noindent 
\@hangfrom{\hbox to 1.8em{\hss{\@makefnmark}}}#1}
\makeatother

%見出しの数字を変更
\renewcommand{\thechapter}{\rensuji{\arabic{chapter}}}  %%章レベルをアラビア数字に
%\renewcommand{\thechapter}{第\rensuji{\arabic{chapter}}章}  %% 第1章
%\renewcommand{\thechapter}{\Kanji{chapter}}  %% 章レベルを漢数字に
%\renewcommand{\thechapter}{第\Kanji{chapter}章}  %% 第一章
%\renewcommand{\thesection}{\rensuji{\arabic{section}}}  %% 節レベルをアラビア数字に
\renewcommand{\thesection}{\Kanji{section}}  %% 節レベルを漢数字に

%見出しの調整 \vspace{見出しの前の余白}、\fontsize{フォントサイズ}{2行以上になったときの行間}
\titleformat{\chapter}
  {\vspace{-15mm}\normalfont\fontsize{12}{15}\bfseries}{\thechapter}{1em}{}
\titleformat{\section}
  {\normalfont\fontsize{10}{15}\bfseries}{\thesection}{1em}{}

%目次に「第」や「章」をつけない
\renewcommand{\prepartname}{}
\renewcommand{\postpartname}{}
\renewcommand{\prechaptername}{}%章レベルの前
\renewcommand{\postchaptername}{}%章レベルの後

%写真のキャプションに「図」を入れない
\renewcommand{\figurename}{}

%画像まわり再定義
\makeatletter
\renewcommand{\thefigure}{%
 %\ifnum\c@chapter>\z@\thechapter{}・\fi\rensuji{\@arabic\c@figure} %%画像のキャプションに余計な文字や数字を入れない
 }
\def\fps@figure{tbp}
\def\ftype@figure{1}
\def\ext@figure{lof}
\def\fnum@figure{\figurename\thefigure}
\makeatother

%キャプションまわりの余白を再定義
% [Tex tips](http://osksn2.hep.sci.osaka-u.ac.jp/~naga/miscellaneous/tex/tex-tips2.html)を参照のこと
\abovecaptionskip=-10pt

\makeatletter
\setlength\belowcaptionskip{0\p@}
\long\def\@makecaption#1#2{%
  \vskip\abovecaptionskip
  \iftdir\sbox\@tempboxa{#1\hskip1zw#2}%
    \else\sbox\@tempboxa{#1 #2}%
  \fi
  \ifdim \wd\@tempboxa >\hsize
    \iftdir #1\hskip1zw#2\relax\par
      \else #1 #2\relax\par\fi
  \else
    \global \@minipagefalse
    \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
  \fi
  \vskip\belowcaptionskip
  }
\makeatother

Base-B6tate.tex

Pandocが下記テンプレートファイルの $body$ に、原稿.mdを放り込んで変換してくれる、そのためのテンプレートファイル。

トンボをつけたり、本文のフォントサイズを変えたり、印刷所名を変えたりときに少しいじる程度。トンボを付けたPDFを出力したいときは1行目の先頭に「%」をつけてコメントアウトして、2行目の先頭の「%」をはずす。

\documentclass[uplatex,dvipdfmx]{utbook}  %トンボなし。
%\documentclass[uplatex,tombow,dvipdfmx]{utbook}  %トンボあり。
\input{B6tate.sty }
\title{$title$} 
\author{$author$} 
\date{$date$} 
\begin{document}
    \maketitle
    \tableofcontents

    $body$

%奥付
\clearpage
\thispagestyle{empty}
\begin{minipage}<y>[htpb]{9cm}
\begin{center}
    \vspace{90mm} %奥付のページ上部からの位置

\begin{tabular}{l}
\multicolumn{1}{c}{\Large{$title$}}\\[3mm] %%タイトル
\hline
%% row 1
\\[-3mm]
\hspace{2mm}\large{著者}\hspace{6mm}$author$\\[0mm] 
\hspace{2mm}\small{発行日\hspace{5mm}$date$    }\\[0mm]
\hspace{2mm}\scriptsize{印刷・製本}\hspace{2mm}{\scriptsize 桜島出版}\\[-3mm]
\\\hline
\end{tabular}
\end{center}
\end{minipage}

\end{document}

makepdfB6.bat (Winのみ)

バッチファイル。文字コードshift_jis(932)=ANSIで保存。

pandoc %~n1.md --template Base-B6tate.tex --top-level-division=chapter -o %~n1.tex

nkf -s --overwrite %~n1.tex
sed -e "s/begin{figure}/begin{figure}\n\\begin{center}\n\\begin{minipage}<y>\[htbp\]{9.7cm}/g" -e "s/end{figure}/end{minipage}\n\\end{center}\n\\end{figure}/g" -e "s/caption\\{/\\caption{/g" -e "s/上\\includegraphics/\\begin{figure}\[htbp\]\n\\begin{center}\n\\begin{minipage}<y>\[htbp\]{9.7cm}\n\\centering\n\\includegraphics/g" -e "s/}下/}\n\\end{minipage}\n\\end{center}\n\\end{figure}/g" %~n1.tex > %date:~0,4%%date:~5,2%%date:~8,2%-%~n1.tex
nkf -w --overwrite %date:~0,4%%date:~5,2%%date:~8,2%-%~n1.tex

uplatex %date:~0,4%%date:~5,2%%date:~8,2%-%~n1
dvipdfmx %date:~0,4%%date:~5,2%%date:~8,2%-%~n1

del %~n1.tex 

内容としては、

  • 対象markdownファイルをpandocで変換
  • nkfShift_JISコードに変換(そうしないとWin用sedが動いてくれない)
  • sedで置換(-iオプションを使うと一時ファイルが増えていくので使わなかった)。主に画像まわりの調整。
  • nkfUTF-8に戻す
  • uplatex 実行
  • dvipdfmx 実行
  • 置換前のtexファイルを削除

というコマンドを並べているだけ。

Pandocの変換方法が変わって、sedによる置換がうまくいかなくなるかもしれないので、あしからず…。ちなみに2017年1月現在、Pandocのバージョン1.19.1で動作確認済み。

makepdfB6.sh (Linuxのみ)

シェルスクリプトファイル。基本、上と同じことをやっている。まぁ、こっちが先にできたんだけど…。

#!/bin/sh

pandoc $1.md --template Base-B6tate.tex --top-level-division=chapter -o $1.tex
#写真の調整
sed -e 's/begin{figure}/begin{figure}\n\\begin{center}\n\\begin{minipage}<y>\[htbp\]{9.7cm}/g' -e 's/end{figure}/end{minipage}\n\\end{center}\n\\end{figure}/g' $1.tex > `date +%Y%m%d-$1`.tex
#横サイズ写真2枚を1ページに収める調整
sed -i -e 's/caption\\{/\\caption{/g' -e 's/上\\includegraphics/\\begin{figure}\[htbp\]\n\\begin{center}\n\\begin{minipage}<y>\[htbp\]{9.7cm}\n\\centering\n\\includegraphics/g' -e 's/}下/}\n\\end{minipage}\n\\end{center}\n\\end{figure}/g' `date +%Y%m%d-$1`.tex
uplatex `date +%Y%m%d-$1`
dvipdfmx `date +%Y%m%d-$1`
rm -f $1.tex

上記と一緒で、Pandocの変換方法が変わって、sedによる置換がうまくいかなくなるかもしれないので、あしからず…。ちなみに2017年1月現在、Pandocのバージョン1.19.1で動作確認済み。

原稿を書く(原稿.mdの作成)

原則、markdownpandoc拡張のmarkdown)記法で書くが、markdownにないものは、TeX記法で書く。

文字コードUTF-8で。

以下、簡単なテンプレート。ガシガシ書いていく。

%タイトル
%著者
%2017年1月1日

<!-- 書き方メモ
- 強調  *強調したい文字*
- ルビ  \ruby{山﨑}{やま|さき}
- 傍点  \bou{傍点をつけたい語句}
- 縦中横の数字  \rensuji{10} 
- 2点リーダーを3つで「‥‥‥」を表現する。
- 1ページに1枚の画像。  
![キャプション](001.jpg){width=9.2cm}
- 横向き写真を、1ページに上下2枚並べる。
上![](002.jpg){width=9.2cm}\caption{キャプション}
![](003.jpg){width=9.2cm}\caption{キャプション}下
-->

# 章レベルの見出し

あとは本文をガシガシ書いていく。画像は以下のように書く。{width=9.2cm}というのはPandocの拡張だが、一般的な書き方に沿っている。

![キャプション](001.jpg) {width=9.2cm}

# 章レベルの見出し

## 節レベルの見出し

本文をガシガシ書いていく。

1ページに横向きの写真を上下に2枚入れるときは、下記のように書く。sedで置換するために、かなり特殊な書き方になっている。上記の書き方メモからコピペしてきて。

上![](002.jpg){width=9.2cm}\caption{キャプション}
![](003.jpg){width=9.2cm}\caption{キャプション}下


\chapter*{あとがき}
\markright{あとがき}
\addcontentsline{toc}{chapter}{あとがき}

あとがきを書いていく。

原稿作成時のポイント

  • 数字、アルファベットは基本、全角や漢数字で。
  • 強調(ゴシックになる程度) *強調したい文字*
  • ルビ \ruby{山﨑}{やま|さき}
  • 傍点 \bou{傍点をつけたい語句}
  • 縦中横の数字 \rensuji{10}

  • ※ 画像について

    • 1ページに1枚の画像の場合は下記のように。横幅はご自由に調節を。9.2cmぐらいが左右のバランスが取れる最大の幅かな…。

      ![キャプション](001.jpg) {width=9.2cm}
      
    • 横向き写真を1ページに上下2枚並べるときは、下記のように書き方がかなり特殊になる。これはsedで置換して調整するため。1枚目の前に「上」、2枚目の後ろに「下」を置き、キャプションの付け方にも注意。

      上![](002.jpg){width=9.2cm}\caption{キャプションはここに書く}
      ![](002.jpg){width=9.2cm}\caption{キャプションはここに書く}下
      
  • ※その他

    • 「…」3点リーダーはPandocで\ldotsに変換されて、縦書だと左に寄ってしまうので、2点リーダーを3つで「‥‥‥」を表現する。

実行(PDF生成)

Windows

原稿.md をバッチファイルの makepdfB6.bat の上に2回重ねる(ドラッグ&ドロップ)。2回繰り返すのは目次生成のため。

または、

原稿.mdなどの入っているフォルダのアドレス欄のところに cmd と入力して、コマンドプロンプトを起動、

makepdfB6 原稿

と入力して、実行。この場合も、目次生成のために2回実行する。

そうすると、<日付>-原稿.pdf などが生成される(他にもいくつかファイルが作られるが気にしなくていい)。

環境にもよるだろうが、完成したpdfファイルを開いたまま、もう一度、上記作業を実行するとpdf生成に失敗することがあるので、一度pdfビューア(Adobe readerなど)を閉じてから実行すること。

Linux

Ubuntuであれば、原稿.mdの入っているフォルダで 右クリック > 端末の中に開く で端末を起動させて、

sh makepdfB6.sh 原稿

を、やはり目次生成のために、2回実行。

おわりに

TeX使いの人からすれば、最初からTeXで書けばいいじゃん…となるのだろうが、普段からmarkdownで書いていて、内容ファイルはできるだけシンプルに!装飾はcssで!(md→pandoc→html/css)というのに慣れている身としては、原稿ファイルに画像挿入などのTeXコード(しかも今回は画像を回転させるためにさらに複雑になる)があるのを見るだけで、ウンザリしてしまうし、かつ、Pandocによるmarkdown変換の方に慣れているので、これでいいのだ…w。

修正・追加

B6tate.styの修正

  • 2017年1月16日 ヘッダーの設定を修正。
  • 2017年1月16日 目次ページのヘッダー削除を追加。
  • 2017年1月18日 タイトル位置、ヘッダー・フッターの調節等。

全体

  • 2017年1月18日 A5・2段組のバージョンと混乱しないように、いくつかのファイル名に「B6」「B6tate」を追加。
  • 2017年1月24日 makepdfB6.sh をよりシンプルに修正。
  • 2017年1月25日 設定ファイルをB6-tate(20170125).zipにして、ダウンロードできるようにした。
  • 2017年1月26日 makepdfB6.bat、makepdfB6.shの修正。B6-tate(20170126).zipのアップ。

サンプル画像

f:id:adbird:20170114025912p:plain f:id:adbird:20170120123058p:plain f:id:adbird:20170120123550p:plain f:id:adbird:20170120123048p:plain f:id:adbird:20170120123039p:plain