ぼくじょう日記

てらお牧場に起こる出来事を書きつらねていきます。

gnuplotの時間軸が無理やり日本語を使いに行って文字化けする件

gnuplotの時間軸が、見るからに日本風の日付を書きに行って文字化けしている(Mayと書いてほしいのに、5ぁ□□)。 この場合どうすればよいかいろいろとはまった挙句に解決した。どうすればよいか?

ともかく国際標準の日付を書いてほしい。日本語はいらない。という場合、

set locale "C"

を実行する。

日本語の軸で行きたい。という場合は、文字コードを適切なものに変更する必要がある。 こちらはおそらくset encodingをいじることになる。というのが結論。

続きを読む

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 などを作ってみることにする。

やってみたいことは以下のとおり。

  1. 字の大きさを大きくする
  2. 余白を小さくする
  3. 著者情報をもう少ししっかり書くようにする (Haskellで書き加える)
  4. doublespace.latex も作成してみる
  5. セクション番号を書く (-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を指定。 ダブルスペースは、YAMLlinestretch: 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

ともかく、ghccannot 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を使え、と書いてある。.emacsrequire 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.ellispコードも無事評価されて、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/binPATHに設定。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(とっかかり)が出来上がってる。明日はもっと実用的なページの作成にかかろう。今日はここまで。