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

markdown->TeXの変換だけで卒論を仕上げるのに便利だったツール10個まとめ

卒論書き上がったので環境を後続の人類のためにどうやって作ったかメモっておく。 環境はMacだったけどMacTeX以外たぶんLinuxでもいける。その指導教員に入れられたmacportsTeXTeXShopを窓から投げ捨てろ。というのが要旨。

MacTeX

MacTeX - TeX Users Group http://tug.org/mactex/ 2014年において他の環境を入れる必然性は殆ど無い。これ一本。

iconv

この時代sjisを扱うのは人生をムダにするだけなので、研究室の秘伝タレたるtexもまずutf8に変換。 その後 ¥ を \ に置換するのは必要だったけどオプションでどうにかなるのかもしれない。

iconv -s -f SHIFT_JIS -t UTF-8 hoge.sty   > hoge.utf8.sty 

pandoc

markdownをtexに変換できるツール。革命的に便利。 基本的に全部markdownで書いてTeXに変換

pandoc hoge.md hoge.tex

みたいに使う。たぶん拡張子で判断して勝手に変換してくれる。

cabal入ってる Haskellerは cabal install pandoc, Macの人は brew install pandoc

僕の環境では src/1.md ~ src/6.md があって、 コンパイル対象の src/thesis.tex はこんなふうになっている

中略
\chapter{導入}
\input{src/1.tex}

\chapter{先行研究の調査}
\input{src/2.tex}

\chapter{あ〜}
\input{src/3.tex}

\chapter{い〜}
\input{src/4.tex}

\chapter{う〜}
\input{src/5.tex}

\chapter{まとめ}
\input{src/6.tex}

どうせmarkdownなんで大した変換しないので、 markdownで表現できないtexの構文はそんままmarkdown内に書いている

~では以下の技術が使われている.

- A\cite{a}
- B\cite{b}
- C\cite{c}
- D\cite{d}

ここまで来るとtexで直接書くほうが良いかもしれないけど、markdownでほとんどの記述は済むので、楽。

Rakefile

というかただのコマンド発行しまくるRubyスクリプト。秘伝のタレ。

task :default => ["build", 'clean']

name = "thesis"

task :build do
  Dir.glob("src/*.md").map { |md|
    tex = md.sub(".md", ".tex")
    `pandoc #{md} -o #{tex}`
  }
  puts `platex -kanji=UTF8 src/#{name}.tex`
  puts `dvipdfmx #{name}.dvi`
  puts `mv #{name}.pdf build/`
end

task :clean do
  Dir.glob("src/*.md").map { |md|
    tex = md.sub(".md", ".tex")
    if md != 'src/thesis.tex'
      `rm #{tex}`
    end
  }

  `rm *.log`
  # `rm *.aux`
  `rm *.dvi `
end

task :open do
  `open build/thesis.pdf`
end


task :abstract => ["build_abstract", 'clean']
task :build_abstract do
  puts `platex abstract/abstract.tex`
  puts `dvipdfmx abstract.dvi`
  puts `mv abstract.pdf build/`
end
task :open_abstract do
  `open build/abstract.pdf`
end

task :eps do
  Dir.glob('src/images/**/*.png').each {|png|
    eps = png.sub(".png", ".eps")
    p `convert #{png} #{eps}`
  }
end

rake epspngを全部epsに変換したりできる

ディレクトリ構成はこんな感じ

~/p/thesis (master) $ tree
.
├── README.md
├── Rakefile
├── TODO.md
├── abstract
│   ├── abstract.tex
│   └── style.sty
├── build
│   ├── abstract.pdf
│   └── thesis.pdf
├── src
│   ├── 1.md
│   ├── 2.md
│   ├── 3.md
│   ├── 4.md
│   ├── 5.md
│   ├── 6.md
│   ├── thesis.tex
│   ├── style.sty
│   ├── images
│   │   ├── arch.eps
以下略
rake build open

書くたびにプレビューしてた。特定の章だけ編集したいときは \inputs{src/*.md}コメントアウトして書いてた。

Cacoo

めんどいので全部 https://cacoo.com/ で書いてたけど時間があったら Graphviz を使った。

おまけ

プリアンプルの一部

\usepackage[dvipdfmx]{graphicx}
\usepackage{url}
\usepackage{here}
\usepackage{listings}
\usepackage{verbatim}
\usepackage{graphicx}
\usepackage{ascmac}
\usepackage{xcolor}
\usepackage{caption}
\DeclareCaptionFont{white}{\color{white}}
\DeclareCaptionFormat{listing}{%
  \parbox{\textwidth}{\colorbox{gray}{\parbox{\textwidth}{#1#2#3}}\vskip-4pt}}
\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white}
\lstset{frame=lrb,xleftmargin=\fboxsep,xrightmargin=-\fboxsep}
\belowcaptionskip=-10pt

確か研究室のタレがコンパイルできなかったので, dvipdfmをdvipdfmxに書き換えたりした。

おまけ2

卒論が完成するまでのコミットログです

みんなもGitを使いこなして卒論を書こう!

10個ないのはお約束です。