忍者ブログ
Yaleで、遊んで学ぶ日々。

Yaleで、遊んで学ぶ日々。

囲碁、ときどきプログラミング、ところにより経済。
[1]  [2]  [3
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

昨日インストールしたlatex用のフォントやパッケージのインストールプロセスを自動化するバッチファイルを書いた。PCを買い換えたり、latexをまるごと入れなおしたいときなどに使う予定。これからもインストールするパッケージの数は増えていきそうだから、随時更新していく予定。そうすると、インストール手順のメモ代わりにもなる。

バッチファイルの仕組みも大分わかるようになってきた。
if ... goto バグの恐怖を味わった。
普通プログラミングの授業とかでは、if ... goto という条件分岐の書き方は発見しにくいバグを生みやすいから避けるように教えられるけど、バッチファイルでは結構使われるらしい。甘く見ていたら、同じ命令が二度繰り返されるバグが発生して発見に時間を食った。つまり、

...
...
if A goto B

...
...

:B
   ...
   ...
exit /b

っていう感じのプログラムで、これだと Bの作業は2回繰り返されてしまう。避けるためには、


...
...
if A goto B

...
...
exit /b    :: <- これ

:B
   ...
   ...
exit /b

という風に、2度目のBの前にexit /b を入れて、そこでプログラムを終わらせてしまえばいい。

PR
注:この記事の内容に一部不十分な点があった。こちらの記事も参照。

Latexは便利だけど、フォントの種類がはじめは限られていて(Computer Modern, Times, Platino)で、追加する方法が難しくて今まで手を出せなかった。MS Wordなら、はじめから大量のフォントが入っているし、DLして追加するのも難しくない。のだめがみそ字フォントで千秋のパソコンにいたずらできるくらい簡単だ。

今日、思い立ってGaramondフォントをtexに導入することに決めた(Windowsの方に。Ubuntuの方はまた今度。すぐできると思う)。
まず、フォントをDLする時の最大の問題は、DLした後に、マップファイルなるものを作成しなくてはいけないらしく、それをするのがupdmap.exeというソフトらしい。何が問題かというと、このupdmapが奥村晴彦の『美文書作成入門』の標準インストールに含まれていないことだ。試していないが、単純にupdmap.exeというのを探してきても駄目らしい。まとめてtex一式をDLし直すのが第一選択だ。

まず、updmapが入っているかを確認する。コマンドプロンプトを開いて
  updmap
とコマンドを打ち込んでみる。「認識されていません」みたいに言われたら、それはupdmapというソフトがないということで、DLしてこないといけない。ちなみにupdmapが存在するなら、working....というような、何かしらが行われているようなメッセージが出る。

updmapがない場合、このあべのりページというところにインストーラがあるので、これをDL・解凍・実行する。『美文書』でDLしたtexのためのフォルダ(C:\usr 以下)は消しておく。あと、それ用のPath(C:\usr\local\bin;)も消しておくといい。怖かったら触らないのも手。このインストーラはGSView, Ghostscript, dvioutなども合わせてインストールするのだけど、それは失敗した。理由は分からない。古いのでも問題なく動いたからとりあえず放置することにした。

さて、この結果、デフォルトでは C:\tex 以下にtex用のフォルダが作られているはず。Pathは勝手に通しておいてくれる(システム環境変数のPathにC:\tex\bin;が追加されている)。まずは普通に動くかどうか実験しておく。以前に書いたtexのコードをwinshellを使ってコンパイルする。回った。続いてdvioutで表示。ここで1回止まった。何かフォントの場所の設定が出来ていないためらしい。古いdvioutが今までとおりの場所にフォントを探しに行ったところ、すでに削除済みで困った、ということのよう。dvioutの設定画面が始まるので、適切に設定する。おそらくresolutionはそのままでいいと思うから、Nextをクリック。次は、Fontというところだけど、とりあえずGuessで試してみる。僕の場合は全然間違ったディレクトリをguessしてた。TEXROOTには
C:\tex\share\texmf\fonts
を入力する(デフォルトの場合)。基本的には、『美文書』の付録Gに書いてあるとおりいいが、ただし
  C:\usr\local....
というようなパスは
  C:\tex...
に変える必要がある(tex用ディレクトリの場所がちょっと変わったので)。

ここまでで、普通のtex環境はもとに戻ったはず。そのことを実験で確認したら、今度はupdmapがちゃんと入っているかを確認する。もう1度、コマンドプロンプトを開いて
  updmap
を入力してみる。ソフトの存在を確認したら、とりあえず第1歩はクリア。


次はGaramondフォントをDLする。まずは、CTANのページへいく。ちょっと下へスクロールするとREADMEがあるので、それをまずはDLする。手順はそこにすべて書いてある。以下はその内容をかいつまんで説明する。

(1) 同じページから、mdcore.zip をDL。とりあえずデスクトップにでも解凍してみる。するとdocとtexという2つのフォルダが出てくるはずなので、それらを C:\tex\share\texmf に移動。このディレクトリにはすでに同名のフォルダがあるので上書き確認をされるが、問題ないので上書きOKにする(既存の中身に付け加えるだけなので、実際はファイルは上書きされない)。これは、mathdesignシリーズ全体(3種類ある)に共通するコアファイルというやつらしい。

(2) 次に、上の方にあるmathdesign-garamondという部分をクリックして移動。Location on CTANというところにzipファイルへのリンクがあるので、それをクリックして mdugm.zip をDL。同じように解凍するとdoc, dvips, fonts, tex の4つのフォルダが出てくるので、それらをやはりC:\tex\share\texmf に移動、上書きOK. これがgaramondのパッケージ。 解凍時に同じ名前のフォルダが出てくるので、どっちのzipからのフォルダなのか混乱しないように注意。

(3) コマンドプロンプトを開いて、
mktexlsr
のコマンドを入力。READMEによると、
texconfig rehash
の場合もあるらしい。入ってないコマンドだった。OS違いだろうか。機能としては、texmfの状態を再確認する作業らしい。

(4) C:\tex\share\texmf\web2c\updmap.cfg というファイルをテキストエディタで開いて、末尾に
       Map mdput.map
       Map mdugm.map
       Map mdbch.map
と書き足して保存。その後、コマンドプロンプトで
  updmap
のコマンドを実行。
おしまい。

使い方としては、プリアンブルにこれを足せばいいみたい。
\usepackage[urw-garamond]{mathdesign}


こういうテスト用のtexコードを書いて、動作確認をしてみよう。

\documentclass{article}
\usepackage[urw-garamond]{mathdesign}
\begin{document}
This is {\it mathdesign}!
\[ y = x^2 \Longrightarrow x = \pm \sqrt{y}\]
\end{document}



一時期Lyxを使って文書作成をしていたけれど、結局tex打ちに舞い戻ってきた。Lyxは数式等をコードで記入する必要がなく何かワードっぽく作成できる。例えば分数の2分の1を表示したいときは、texなら \frac{1}{2} と書くところを、Lyxなら分数ボタンをクリックして1と2をそれぞれの位置に入力すればよい。便利っていう人の気持ちは分かるけど、結局そういうボタンの配置、またはメニューの位置などを色々記憶しなくてはいけないのが面倒くさいのと、やたらマウスを使う必要がある(さもないと大量のショートカットを記憶しないといけない)ので時間を食う。そういうわけで今はまたtexをコードで書いてコンパイルして出力するようにしている。ただ、校正ソフトを入れていないため誤字が多くなって、先生には不評である。修士論文の時には副査の先生に3ページで誤字の指摘を諦めたと言わしめた経験がある。


図を文書に挿入することはよくある。texに挿入するのに便利な画像形式はepsだと思う。一方、一般によく使われる画像の形式はjpg, bmp, png, gif などだから、eps形式に変換をする必要がある(jpgやbmpを直接張ることも出来た気はするけど、試したことはない)。僕はそういうときにはEPS-convというフリーソフトを利用している。超お勧め。

MatlabやR, Stataなどで描いたグラフの場合には、直接epsファイルに保存できる。
Matlabなら、
  print -depsc2 ファイル名
をいつも使っている。-depsc2の部分はオプションだから変更できるけど、こだわりがなければいつもこれで問題なし。
Rでは
  dev.copy2eps(file=ファイル名)
または
  postscript 関数を使っている。2つの違いは分からない。出力結果を見る限りどっちでもいいんだろうと思う。
Stataでのeps出力は今までに1回だけやったことがある。2年前に書いたStataのDo-scriptを掘り起こしてきた。
  graph export ファイル名, as(eps)
でいけるらしい。ちなみに
   graph export ファイル名, as(png)
とすればPNGファイルにも出来る(その結果できたのがこのwebsiteのStatisticsというページにある大量のグラフたちだ)。いずれの方法でも一番新しいグラフ(カレント・グラフ)が保存されるから、基本的には作図の直後に保存を行う。参考: 上坂吉則『MATLABプログラミング入門』牧野出版, 2000, 第5章; R-Tips47節; 筒井淳也ほか『Stataで計量経済学入門』ミネルヴァ書房, 2007, 第3章。

データ解析やシミュレーションの結果を表示する目的ではなく、数式を視覚的に説明する目的でグラフを見せることも多い。需要・供給曲線とか、無差別曲線とかがその例。こういう場合にはWinTpicを使っている人が多そう。ペイントっぽい感覚で図を描けて、それをtexに直接コピペできるコードに変換して吐き出してくれる。文字や数式を図中に書くこともできる。これをスクリプトでやろうというのがMetapost(参考)。描きたい画像の情報をスクリプトで描いて、それを読み込んでPS形式で出力するソフトということらしい。Texの標準インストールをしたら普通についてきた。文字も書けるが、このソフト自体にはフォントの埋め込みができないので、texを併用しなくてはいけないらしい。やり方は、まずmetapostのコードを書いて、コマンドプロンプトとかターミナルとかで
  mpost ファイル名
としてpsファイルを発生させる。でもこのpsファイルはtex専用らしく、普通の閲覧ソフト(gsviewとかXnview)では開けない。
次に
   \documentclass{article}
   \usepackage[dvips]{graphicx}
   \pagestyle{empty}
   \begin{document}
   \includegraphics{psファイル名}
   \end{document}
というtexコードを書いて、latexにかける。つまりコマンドプロンプトで
  latex  texコード名
さらに、ここからepsを作るためには
  dvipsk -Ppdf -E texファイル名 -o eps出力先ファイル名
というコマンドをすればいいらしい。
どうも、一旦tex専用のpsファイルにして、それをlatexfやらdvioskやらにかけることで文字の埋め込まれたepsファイルに書き出している、ということらしい。参考:奥村晴彦『Latex2e美文書作成入門』技術評論社, 2002, 付録F.  日本語がどうしても文字化けするけど、とりあえず英語だけでいいと思う。
注:ここに書いたことはTeX環境をインストールし直したら全く上手くいかなくなった→解決編

この一連の作業([1]metapostコードを書く [2] mpostにかける [3] texコードを書く [4] latexにかける [5] dvipskにかける)がいちいち面倒くさかったので(実際のところ、mpostコードを修正するたびにいちいち回し直さないと画像の変化が分からない)、生まれて初めてバッチファイルを書いた。ファイルはここ。バッチファイルというのは、要するにコマンドプロンプト上で出す命令をまとめて書いておいたものだ(たぶん)。ファイルの検索とか、移動や削除、テキストファイルの作成など、色々できるからちょっとしたソフトウェアみたいに動く。今回書いたバッチファイルには、mp2eps.batという名前をつけた。第1引数にmetapostファイルを第2引数にそのmetapostファイルで作成する画像ファイルの数を取り、一連のコンパイル作業を行ってepsファイルをmetapostファイルと同じディレクトリに出力する。初めてなので勝手がよく分からず手間取ったけど、とりあえずそこそこ機能するようだ。ちなみに、Windows以外だと動かないに決まっている(Windowsのコマンドプロンプト用に書いてあるので)。

問題点が1つあって、時々余計なepsファイルを出力するような仕様になっている。このバッチファイルでは、mpostの出力するpsファイルの名前は、もとのmpostファイル名が xyz.mp だとすると、 xyz.ps となるか、 xyz.1, xyz.2,....という連番拡張子になることを利用して、そういう名前のついたファイルをディレクトリ内で検索して片っ端からeps化するようにしている(連番の場合は、第2引数で指定された番号まで)。だから、そのmpostファイルで出力されたか否かによらず、eps化はされることになる。例えば、以前何かの理由でxyz.psというファイルを作っておいて、今回のmpostファイルではxyz.1とxyz.2の2ファイルを出力したとしても、3つのepsが全て上書きされる仕様なっている。mpostの後に作成されるlogファイルを読み込んで、今回出力されたファイルのみを対象にすることも可能ではあると思うけど、バッチファイルの文法がよく分からないので止めた。少なくとも、作りたい画像ファイルはちゃんと出力されるし、間違って上書きしてしまう可能性もほとんどないだろうから、個人用としてはこれで満足。

これを使うと煩わしいコンパイルが少し楽になる、かも。完全に善意で作られたコードだけど、batファイルは悪用しようと思えば結構なんだって出来てしまうので(ファイル消すとか色んなソフトウェアを開きまくるとか)、使う場合は自己責任で。短いコードなのでちょっと読めば何やっているかは一目瞭然だと思うけど。

使い方:
mp2eps.bat をパスの通ったディレクトリに保存。
コマンドプロンプト上で、
  mp2eps [metapostファイル名] [ファイルで定義された絵の数(デフォルトは10)]
でOK.  拡張子はつけちゃ駄目。
当然、mpost, latex, dvipskとか一式がちゃんと揃っていることが大前提。奥村晴彦の本でインストールした場合はついてきているはず。


これでmetapostファイルが書ければeps化はすぐなので、今度はmetapostファイルを手軽に書ける方法が欲しい。その方法については、色々考えている。


**パスが何か分からないという場合は、C:\batというフォルダを作って、そこにmp2eps.batを保存。そしてマイコンピュータを右クリック→「詳細設定」→「環境変数」と進んで、「システム環境変数」の中のPathを選択して「編集」をクリック。変数値の末尾に  ;C:\bat を付け加える。以上、うちのlaptopの場合。他の場合はパスの通し方を検索すれば分かる。要するに、mp2epsというソフトをコマンドプロンプト上で使いたいのだけど、パソコンは一定の範囲(パスの通ったディレクトリ)でしかそのソフトを探さない。だから、コマンドプロンプトで使いたいファイルはパスの通ったディレクトリに保存しておく必要がある。そのため、まず適当なフォルダを作って保存して、システム環境変数を変更してその保存フォルダにパスを通した。ちなみに、Administratorの環境変数とシステム環境変数の違いが分からない。複数ユーザーがいなければ同じと思っていいのかな。


【追記1】
ちょっと方向性は違うけど、こんなもんがあるそうな。
MePoTeX

【追記2】
日本語対応用のバッチを書いてみた。でも文字化けする。理由は分からない。調べる気力もない。
jmp2eps.bat


【追記3】
Ubuntuで同じことをする方法を調べてみたところ、Windowsでいうバッチファイルに該当するのがシェルスクリプトというのだそうな。文法は違うけど似てる。スクリプトを書いてもいいけど、もっとお手軽な方法が開発されていると思うので保留。

Calender
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Search in This Blog
Latest Comments
[03/30 川内のばば山田]
[03/30 川内のばば山田]
[08/06 Aterarie]
[07/05 Agazoger]
[07/01 Thomaskina]
Oldest Posts
Latest Trackbacks
フリーエリア

Barcode
Access Analysis
Powerd by NINJAブログ / Designed by SUSH
Copyright © Yaleで、遊んで学ぶ日々。 All Rights Reserved.
忍者ブログ [PR]