markdown+pandocにおける図表およびその相互参照
これについてもユーザーズマニュアルの記述が良くわかる。 表(table)のcaptionは、": (あるいはTable:)から始まるパラグラフ"で、表の前後のいずれにも置くことができる。
図の場合は、イメージだけからなるパラグラフが図と定義されるようで、[]内の記述がキャプションになるようだ。
markdown+pandocのlatexとhtmlへの変換について
日本語のユーザーガイドを見ていると、 タイトル、著者、アブストラクトについておさまりが悪くて困っていたが、どうやらメタデータブロックに書き込むことによってこれらを定義することができるようだ。やってみよう。 YAMLメタデータブロックを使ってみる。
このメタデータブロックに書いた情報を展開するためには、どうも template にそのように書き込んでやればいいようだ。 ひとつ面白そうな実例が乗っていて、例えば著者情報について、 name: と affiliation: を何人分も並べて定義するようなことができそうで、 その場合には以下のようなテンプレートを書けばいい、というようなことが書かれている。
$for(author)$ $if(author.name)$ $author.name$$if(author.affiliation)$ ($author.affiliation$)$endif$ $else$ $author$ $endif$ $endfor$
たぶんこれは Haskell
なのだろうと思われる。この際まじめにやってみる。
個人的にテンプレートをつくるなら、 $HOME/.pandoc/
に置けばよいのだろう。
テンプレートの作り方や使い方なども含めて書かれていそうなのは、Pandoc User's Guide というページの記述だ。
ここで tepmlates の節を見に行く。 はじめの項目に書かれているのは、 -s オプションの意味合い。同やら単に -s とつけると、header, footer を自動的につけてくれて出力するみたいだ。もしかして・・
おお。htmlにはきちんとタイトルがついたではないか。 なおかつ、author情報も出そうとしかかっているではないか。 残念ながら abstract は見当たらない。が、できそうではある。
latexの出力もすばらしくて、いろいろなプリアンブルがつけられた上に、title, author, abstract が展開されている。author だけは謎のリストになっているが、これは上記の haskell スクリプトか何かで何とかなりそうだ。 この出力はどんなものになるか、ちょっと latex + dvipdf を試してみる。 ちょっと余白が広すぎるが、独自テンプレートをつくることで対応できそうだ。 まずは、$HOME/.pandoc/templates/default.latex などを作ってみることにする。
やってみたいことは以下のとおり。
- 字の大きさを大きくする
- 余白を小さくする
- 著者情報をもう少ししっかり書くようにする (Haskellで書き加える)
- doublespace.latex も作成してみる
- セクション番号を書く (-N オプションをつけて変換する)
デフォルトテンプレートを見ると、基本的には YAML で変数設定したら全部反映して直りそうな感じ。 ただ author だけはだめそうなので、ここだけ
最終的には、以下のコマンドで変換している。
% pandoc -N -s src/main.md --bibliography src/reference.bib --filter pandoc-crossref -o latex/main.tex
最後に行番号をつけてダブルスペースで出力する方法。
行番号については、packageとして、lineno.styを使う。
そのうえで、今回は\begin{document}の直後にページ単位のナンバリングであることを指定するオプション\pagewiselinenumbers
を指定。
ダブルスペースは、YAMLでlinestretch: 1.8
を指定。
ところで、 (Iguchi et al. 2000; 2009) としたいので、そういう場合の記法が何だったか思い出した。
-@
で年号だけになるとのこと。書いてある通りにしたらうまくいった。
が、このページがどこにあったのかが分からなくなってしまった。困った。
markdown+pandocで論文を書く環境
とりあえずmarkdown
で論文を書いている。
タイトルと要旨にはそれぞれ、末尾に{#title .title}
, {#abstract .abstract}
をつけておく。すると、その他のsection見出しと異なる class (title
, abstract
) をつけることができるので、今後の自動化の手掛かりとなるだろう。
pandoc-crossref
を用いて図表および節番号の相互参照を実現するようにする。節番号で一応のテスト運用をしてみたが、うまく機能しているようだ。
pandoc-citeproc
を用いて文献参照の機能を実現する。bibliographyファイルに、bibtexの .bib
ファイルを利用することにする。作り方は latex のものと同じ。
元のファイルは main.md
として以下のようにコンパイル。
% pandoc main.md --bibliography reference.bib --filter pandoc-crossref -o main.tex % pandoc main.md --bibliography reference.bib --filter pandoc-crossref -o main.html
今のところはlatexについてはテンプレート document.tex
をつくりそこから上記で作成される main.tex
を呼び出すやり方。だけれども、まだ \title
を陽に書き写す必要があるし、 main.tex
内の title や abstract が普通の \section
になっていて、これらをコメントアウトしたり、abstract を abstract
環境にしたり、acknowledgements を section*
にしたりする必要がある。
更に、リファレンスは確かに作られて心強いのだが、まだそのフォーマットを指定する方法を知らないし、なぜか各文献が \hypertarget
という私の取っては謎のエントリーになっていて、 latex が通らない。何か指定したらよいのだろうか?
html
の方も無事 reference が自動作成されて素晴らしい。こちらは3名以上の著者の場合に et al. で表現する、といった部分ができていない。
これから解決させていきたい。
pandocで+文献参照+相互参照
インストールを試しているが、なかなか難航している。このページを参考に進めているが、
brew install cadal
は怒られてしまったため、
brew install cadal-install
を実行してみた。ところが、haskellのインストール中に原因不明のエラーで落ちる。
checking for path to top of build tree... utils/ghc-pwd/dist-install/build/tmp/ghc-pwd-bindist: line 3: /tmp/ghc--binary-20160916-31072-wvsvug/ghc-8.0.1/utils/ghc-pwd/dist-install/build/tmp/ghc-pwd: cannot execute binary file utils/ghc-pwd/dist-install/build/tmp/ghc-pwd-bindist: line 3: /tmp/ghc--binary-20160916-31072-wvsvug/ghc-8.0.1/utils/ghc-pwd/dist-install/build/tmp/ghc-pwd: Success configure: error: cannot determine current directory
ともかく、ghcとcannot dtermine current directory
でググると、
brew install python && pip install dblatex && brew install ghc
で解決したよ。というコメントの入った記事が。もしかすると、python
が入っていない環境は想定されていないのかもしれない。dblatex
もいるのかどうかは不明だが。
一つ一つやってみることにする。
brew install python
をやってみると成功。pipについてupdateせよと言っているようなので、
brew install ghc
を試してみる。やはり同じエラーで落ちる。次は、dblatex
をやってみよう。
pip install dblatex
今度は以下のエラーで落ちる。
+checking XSLT saxon... no (missing saxon) Error: XSLT not installed: saxon
XSLTあるいはsaxonがない。というように読める。そこで、
brew install libsxlt
をしてみると成功。再度pip
。今度はこれ。
Error: not found: latex, makeindex, pdflatex, kpsewhich
それはそうだと思う。latexすらまだ入れていないと思う。さすがにlatexは入れないといけないだろう。
yum install texlive
再度pip
。次はこれ。
Error: not found: appendix, changebar, multirow, overpic, stmaryrd, subfigure, titlesec
依存したいtexliveのパッケージなのだろう。これらをyumで入れてみよう。
sudo yum -y install texlive-appendix texlive-changebar ... textlive-titlesec
全部成功。そしてさらにこれ。
error: can't copy 'etc/schema': doesn't exist or not a regular file
だけれども、これが本当に本筋なのか?
疲れた
ので、奥の手。
sudo yum install pandoc
でも、バージョン古いかも。大丈夫かな??
% pandoc -v pandoc 1.12.3.1 Compiled with texmath 0.6.6, highlighting-kate 0.5.6. Syntax highlighting is supported for the following languages: ...
だそうだ。
markdownで論文を書く
今書いている論文をMarkdown
で書き下すことにする。
その際に、pandoc
のツール群に定義されている標準的な方法にのっとって、図表等への相互参照と、引用文献リストの自動作成等を行っておきたい。
とはいえ、フルに活用するにはいくつもの問題があって一気にはいけないだろう。だから、今日はまず手元から進めていこうと思う。
まずは、emacs
のmd編集モードを何とかしたいと思う。markdown
モードを入手したい。
検索をすると、Emacs Markdown Modeというページがあった。これを活用しよう。このページを見ると、packages.el
を使え、と書いてある。.emacs
にrequire paciage
をしなさいと書いてある。これはもともと入っているのかどうかよくわからないのだが、まずとりあえずはやってみようかと思う。(追記:…いろいろ見ていると、どうも最近こういうものも普通に使われるようになっていて、もともと入っているものと考えてよさそう。)
``emacsの個人設定ファイルは最近どうなっているのだろう? このページには
.emacsとか、
init.elとか書いてあるが、別のページには、
.emacs.el``が設定ファイルと書いてある。最近は情報が私の中ではいろいろいい加減になっていて困る。紹介マニアMoinMoinというところの、dot.emacs.dというページでは、
Emacs22
以上では~/.emacs.d
以下に集めるのが良い。~/.emacs.d/init.el
を起動ファイルとして読むので~/.emacs
や~/.emacs.el
ではなくて~/.emacs.d/init.el
にした方が良い。
と明確に主張されていて、納得がいく。これに従おうと思う。
始めに書いてある方法は、MELPAというEmacs Lispパッケージを管理しているアーカイブサイトから、package.el
を使って簡単にダウンロードするという方法である。上記サイトに書かれている通りに.emacs.d/init.el
に書き込んで実行してみるが、肝心のmarkdown-mode
が見つからない。
MELPAのパッケージリストにはmarkdown-mode
が見出されるので、なぜこれが現れないのか不明。
MELPAのGetting startedページにあるlispコードを覗いてみると、melpaのサイトを指定するところで、パラメータが一個足りない('t'
というパラメータがない)ことが分かった。望みは薄いと思われるが、一応これを指定してみた。だがだめ。
妙なところではまってしまった。これで一時間ロスなのである。MELPAとrequire.el
の組み合わせは結構魅力的なのだが、どうも謎が解けない。ともかく意味不明なので、Emacs Markdown Modeというページに書かれた次善の策、直接インストールの方法(まぁ昔の方法)を試すことにする。
markdown-mode-2.1.el
をダウンロード。load-path
の通ったところに置けとある。さて。load-path
はこのシステムではどう設定されているのやら。ここで、
M-x describe-variable
をたたく。load-path
を見る。無事load-path
の設定内容が表示された。
個人のディレクトリは見たところないようだ。
だから、ホームディレクトリに個人設定として入れて管理するためには、そのディレクトリ名をこの変数に設定しなければならないということだ。こういう場合はどうするものなのか。これもなんらかの標準的な方法があるはずである。これを探すことにする。(これも一回覚えれば応用範囲は広い。きっちり方法を探そう。)
マスタカの ChangeLog メモというページの2009年7月5日の記事に、Emacsの
load-pathに関する講座がある。少し古いのだが、謙虚に目を通してみる。すると、「
load-path`` にユーザ指定のディレクトリを追加する方法」という記述がありました。
例えば、"
~/share/elisp
" を追加したい場合は以下を~/.emacs
に設定して下さい。(add-to-list 'load-path "~/share/elisp")
この例ではload-path
の先頭に "~/share/elisp
" が追加されます。
なるほど。$HOME/share/elisp
というディレクトリに入れるのがデファクトスタンダードなのだな。ということで、このディレクトリをつくり、ここに先ほどのファイルを入れてみる。
とかやっているうちに、.emacs.d/init.el
ではなく、なんと.emacs.d/init.d
などという変な名前のファイルにlispを書き込んでいたことが判明。もう一度やり直してみたがうまくいかないというこれまた非生産的な30分間を過ごしてしまった。
最新のemacs
事情に関するページが見つかり、どうもこの間大きな変化が続いている様子。しかもEmacs24.4
でおおきな機能追加がなされ、melpaの中には24.3
以前をサポートしないものもあるとのこと。利用中のバージョンはやはり24.3
ではある。とはいえ、はたしてmarkdown-mode
もそのようなものなのかどうかは判然とせず、すくなくともEmacs Markdown Modeのページにはそれらしき記述はない。くだんのpackages.el
のlispコードも無事評価されて、melpaのページもきちんとリストされるところまではいっていることも判明。なぜmarkdown-mode
が検索されないのかはさっぱり謎のまま。
まぁ諦めて、やはり直接ダウンロードしたmarkdown-mode.el
を古典的に使う方法をとることにしようと決断。
結果的にうまくmarkdown
モードがインストールできた。
要するに、
markdown-mode-2.1.el
を本家アーカイブからダウンロード、~/share/elisp
にコピー(markdown-mode.el
という名前に).emacs.d/init.el
に、load-path
を指定。拡張子が.md
または.markdown
のファイルだったらこのlispを呼ぶようにスクリプトを書く
指定をしただけ。まぁ、パッケージやモードのインストールの標準的な方法が分かったこと。melpaという名前のアーカイブが重宝しそうだということ。最近このあたりの事情が大きく変化していて、Emacs24.4
に乗り換えるのが本当は良さそうだということが分かったので、意義もあったと言えると思う。
あとはこれを使ってかなり書き進んできた論文をmarkdown
で取りまとめるだけ。
実際、htmlで
書いているからあまり変えるところもないので簡単に進むと思う。
hugoをインストールするまで
今日はhugo
をインストールしたい。自分のウェブページを確立するためである。
homebrew
(linuxbrew
)をインストールする
まず、linuxbrew
を使うとシステムに依存せず個人環境にhugo
関連ツールをインストールできそうだったので、これを実施することにする。
まずはLinuxbrew のススメを参考にしたが、結局本家ページの方で確実を期すこととした。
そもそもruby
も入っていなかったので、yum install ruby
をした。それから、本家ページのDependencyの項を読んで、必要なパッケージをyum install
した。
それから、Installationの項に従う。
$ ruby -e "$(curl ...)"
のコマンドを実行。
.bash_profile
で$HOME/.linuxbrew/bin
をPATH
に設定。MANPATH
, INFOPATH
も設定しておく。
$ brew install hello
を実行。
$ brew update
が何かgit
に関するメッセージを出して落ちている風なので、git
もinstall。
$ brew git install
時間かかったがエラーなくインストールされた様子。今度は、
$ brew update
がエラーなく終わる。ここで
$ brew install hugo
を実行してみる。ようやく成功したみたいだ!!
実は結構はまった。手順を間違えると、hugo
のインストールが通らなくなる。意味不明のメッセージがあちらこちらに出てきて手も足も出なくなる。そのときはlinuxbrew
のインストールをやり直してみた。やり直しの方法は、無理やり
$ ruby -e "$(curl ...)"
を実行させてみたらメッセージとして吐き出された方法、
$ rm -rf /home/terao/.linuxbrew/Cellar /home/terao/.linuxbrew/.git && brew cleanup
を実行してみることでほぼ解決。ただそのあと、brew doctor
が薦めたので、
$ brew prune
を実行して、不要なsymbolic linkを消す作業をした。
hugoの動作を確認する
ここからは、hugo
の本家ページのQuickstart Guideを参照する。
$ hugo help
正常に動作。
$ mkdir <working directory> $ cd <working directory>
をした後、
$ hugo new site bookshelf
をやってみると、とりあえずscafforld(とっかかり)が出来上がってる。明日はもっと実用的なページの作成にかかろう。今日はここまで。