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

texを書かずにtex原稿をつくる

ちょっとtex(LaTex)を書かねばならないことになったのだが、大変めんどうなので、人間様がtexを書かずに済ます方法で何とかした。他にも役立つ人がいるかもしれないので書き残しておく。
(いくつかコマンドを使う必要があるけど、どうせtexだったらコマンドは必要なので、その辺は許してください)

tex環境

texコンパイルのための環境は用意しておいてください。そこは説明しません。

markdown

markdownはwiki記法みたいなやつです。一応書き方を覚えないといけないけど、texよりはだいぶ簡単なのでこれで書く。
http://ja.wikipedia.org/wiki/Markdown


本文データを何とかmarkdown形式にして、contents.mdという名前で保存する。
私の場合、元々の原稿はgoogle docsで書いていたので、google docsからテキスト形式でダウンロードして、改行を改行2つに変換し、見出しを修正し、注を一括変換で何とかし、画像のところだけいじったらだいたい何とかなった。


自動変換スクリプトもあるようだけど、画像があるせいかうまく動かなかった。
http://news.mynavi.jp/news/2013/06/12/353/

pandoc

pandocという変換ツールでmarkdownからtexに変換します。重いけどインストールしてください。
http://qiita.com/sky_y/items/80bcd0f353ef5b8980ee

以下のコマンドで変換できる。

pandoc -o contents.tex contents.md

ただし私は、画像の部分をちょっといじりたかったので以下のようにしていた。
(画像は事前に.epsに変換したものを用意しておいた)

cat contents.md | sed s/.png/.eps/g | pandoc -t latex | sed 's/includegraphics/includegraphics[width=1.0\\columnwidth]/g' > contents.tex

texコンパイル

ただしこれでできるのは本文データだけなので、ガワを用意する。
以下をmanuscript.texという名前で保存

\documentclass[a4paper]{jsarticle}
%
\usepackage{amsmath,amssymb}
\usepackage{bm}
\usepackage{graphicx}
\usepackage{ascmac}
\usepackage[dvipdfm]{hyperref}

\title {タイトル}
\author {著者名}

\begin {document}
\maketitle
\input {contents}
\end{document}

texコンパイル時は以下のコマンドを使う。

platex manuscript.tex

pdf変換

dvipdfmx manuscript.dvi

rake

上だけで十分だけど、あとは完全に趣味の問題で、わたしは、以上を実行するためのスクリプトを用意していた。
まず原稿とガワを以下に用意しておく

  • src/contents.md
  • src/manuscript.tex

pdfその他はbuild/以下に保存する。
以下のRakefileを使った。

# coding: utf-8
require 'rake/clean'

BUILDDIR = 'build'
SRCDIR = 'src'
MDSCRIPT = 'contents.md'
SOURCES = 'manuscript.tex'

SrcFiles = FileList["build/manuscript.tex"]
CLEAN.include(SrcFiles)
CLEAN.include(SrcFiles.ext('out'))
CLEAN.include(SrcFiles.ext('dvi'))
CLEAN.include(SrcFiles.ext('aux'))
CLEAN.include(SrcFiles.ext('log'))
CLEAN.include(FileList['build/images'])
CLEAN.include(FileList['build/contents.tex'])
CLOBBER.include(FileList["build/*.pdf"])

task :default=>:all
task :all=>[:pdf, :clean]
task :contents do 
    puts "contents"
    src = File::join(SRCDIR, MDSCRIPT)
    dst = File::join(BUILDDIR, MDSCRIPT.sub('.md', '.tex'))
    sh "cat #{src} | sed s/.png/.eps/g | pandoc -t latex | sed 's/includegraphics/includegraphics[width=1.0\\\\columnwidth]/g' > #{dst}"
end

task :dvi=>[:contents] do
    src = File::join(SRCDIR, SOURCES)
    images = 'images'
    sh "cp #{src} #{BUILDDIR}"
    sh "cp -r #{images} #{BUILDDIR}"
    sh "cd #{BUILDDIR} && platex manuscript.tex"
end

task :pdf=>[:dvi] do
    sh "cd #{BUILDDIR} && dvipdfmx manuscript.dvi"
end