2014年9月17日水曜日

psfragでepsファイルに数式を入力する

LaTeXで図を入力するにはepsファイルを作成するのがシンプルな方法である. gnuplotやtgifならepsファイルの出力をサポートしているしベクター画像だから, 拡大や縮小にも問題がほとんどおきない.

ただ, epsファイルに数式を入力したいとなると, 少し面倒な作業が必要になる. 方針としては,
  1. epsファイルをTeXに取り込んで, 文字部分を数式に置き換える(psfragを使う).
  2. dvipsでepsファイルを作成する.
  3. epsファイルから余分な情報を取り除く.
  4. 必要に応じて, バウンディングボックスを修正する.
という感じ. 一つづつ説明する.

  1. epsファイルをTeXに取り込んで, 文字部分を数式に置き換える(psfragを使う).
    gnuplotの場合はtgif形式に出力できる.

    set term tgif
    set output "hogehoge.obj"

    とすればよい.

    tgifで数式に変更したいところに, 適当な文字(例えばギリシャ文字のΩを入力したかったら, Omega とか)を入力しておく. そのあと, tgifからepsファイルに出力しておく.

    次に, texファイルで上で作ったepsファイルを取り込み, ソースのプリアンブルに

    \usepackage[dvips]{psfrag}

    を書きこみ, さらに本文中のepsファイルを取り込む前に

    \psfrag{Omega}{$\Omega$}

    と入力する(\mathversion{bold}とか\bfを入れるかは御自由に). これをlatexでコンパイルする. なお, 出てきたdviファイルを見てもあまり意味がない.
  2. dvipsでepsファイルを作成する.

    上で得られたdviファイルをdvipsでepsに変換する.

    dvips -D 1200 -E hogehoge.dvi -o fugafuga.eps

    この -D 1200 は解像度として1200dpiとすることを表す. 入れても入れなくても大差はないし, もっと大きな値にしてもよい. -E はepsを出力するオプション.
  3. epsファイルから余分な情報を取り除く.
    今までは上記で

    dvips -D 1200 hogehoge.dvi

    としたあとに

    ps2eps hogehoge.ps hogehoge.eps

    としていたのだが, これで作ったepsファイルはdvipsに対応していない場合がある. すると, arXivなどで投稿するときに, 画像ファイルの数式が出力されないといったおかしなことがおこることがある(日本数学会のアブストラクトで, 不等式やら\Omegaやらが出力されていないものがあったが, その理由はここに起因しているものと思われる). その問題は, 実はps2eps(i)にあったようで, このコマンドでepsを作ったときに, 一部のフォント情報が抜けてしまうらしい(詳しいことはよくわからない). そこで, 上のようにdvipsでepsファイルを作ってから, そのファイルのバウンディングボックスなどを設定することにした(ついでに不必要なプレビュー画像も削除することにした). ghostscriptを使って

    gs -q -sDEVICE=epswrite -sOutputFile=Final.eps -r1200 -dNOPAUSE -dBATCH -dEPSCrop fugafuga.eps

    とする(改行はしていない. 一行で記述する). windowsの場合はgswin32とかかもしれない. 細かいオプションについて調べてはいないが, たぶん -q はメッセージを出さない(quiet), epswriteはepsを出力するということ, OutputFileは出力ファイル名, -r1200は解像度を1200dpiとすること, -dNOPAUSEはエラーでストップしない, -dBATCH はよくわからない, -dEPSCrop はバウンディングボックスをオートで設定するということだと思う.
  4. 必要に応じて, バウンディングボックスを修正する.

    今回, 自分がやったときはうまくいったが, バウンディングボックスがうまく設定されていないときは, epsファイルをノートパッドなどで開いて, バウンディングボックスの数値を変更する. これは「eps bounding box 修正」とgoogle検索すればあれこれ情報があるはず.

なお, この方法でepsを作ると, プレビューで見たときに数式の部分などがジャギーになっていて綺麗に見えないかもしれないが, これはこれで正常である. texに取り込ませてみると, 綺麗に出力されているようなので問題はないようである.

2014年4月20日日曜日

プロキシ環境下での windows update

proxy環境下では、Windowsの自動更新がうまく働かないことがある。このときは、proxyをwindowsに設定してやる必要がある。

コマンドプロンプトで

proxycfg -u Proxy名:ポート番号
net stop wuauserv
net start wuauserv


とすればよい。

beamerのインストール

思っていた以上に苦労したので、メモしておく。

http://sourceforge.net/projects/latex-beamer/files/ にアクセスして

  • latex-beamer-3.07.tar.gz
  • pgf-1.01.tar.gz
  • xcolor-2.00.tar.gz

をダウンロードしてくる。そしたら、適当な解凍ソフト(例えば Lhaplus)を使って解凍し、

c:\usr\local\share\texmf\tex\latex\
(フォルダは適宜、自分の環境に合わせて変えること)


の中に、(texmfのところは、texmf-localがあれば、そちらに変えてもよい。そのときは、texmf-localのフォルダの下に、tex\latexのフォルダを作っておく)

  • latex-beamer
  • pgf
  • xcolor

の三つのフォルダを作り、それぞれの中に解凍したものを入れる。(latex-beamer-3.07.tar.gz の解凍した中身をlatex-beamerの中にコピーする etc.)

xcolorについては、インストールする必要がある。コマンドプロンプトから

cd c:\usr\local\share\texmf\tex\latex\xcolor
latex xcolor.ins

として、insファイルをコンパイルすること。

これで、とりあえず、beamerが使えるようになると思う。さらに、size14.cloファイルなどをダウンロード、インストールしなければいけないかもしれない。

# こういうところは、DebianやVineの方がラクチンですね…

2014年3月11日火曜日

SyncTeXの設定

bSyncTeXを用いると, pdfとtexソースでジャンプができるようになる. とりあえず, inverseサーチ(pdfからtexへのジャンプ)ができるようにした.

1. texファイルをコンパイルするときに

platex -synctex=1 hogehoge.tex


とオプション -synctex=1 をつけておく. すると, hogehoge.synctex.gz がで
きていて,

dvipdfmx hogehoge.dvi


としたときに, hogehoge.synctex.gz を取り込んでくれる.

2. evince や okular で, エディタを設定しておけば, inverseジャンプができるようになる. エディタの設定を, 自分の使うエディタ(emacs の場合は emacsclient)にすれば, (debian の場合は)設定が最初から入っている. okular のときは "Shift+左クリック" でジャンプする.

3. latexmk で SyncTeX を使うときには, オプションを入れることについては, (latexmkの最低限の設定の仕方を知っていれば)とくに困ることはないはず. latexmk -c で synctex.gz も削除するためには

$clean_ext = "synctex.gz";


と, 変数 clean_ext に加えておけばよい.

4. YaTeXでpdfをプレビューに使う場合には, .emacsに

(defvar YaTeX-dvi2-command-ext-alist '(("[agx]dvi\\|dviout" . ".dvi")
("ghostview\\|gv" . ".ps")
("acroread\\|pdf\\|Preview\\|TeXShop\\|Skim\\|evince\\|okular"
. ".pdf")))


として, okularで開くときに拡張子に .pdf をつけるように設定しておく. そ
して

(setq dvi2-command "okular")


を追加すると, Ctrl-c Ctrl-t p で okular をプレビューアにしてくれる.

2014年2月10日月曜日

UDP123が閉じられているときの時計あわせ

企業などのネットワークでは、セキュリティの事情でUDP123が閉じられているために、ntpdateが使えないことがある。以前にも手動での時計あわせとして、やり方を紹介したが、httpsが接続できるなら、nict.go.jpのデータを利用する方法がある。

date -s "`w3m -dump https://ntp-a1.nict.go.jp/cgi-bin/time`"
hwclock -w


とする。上の w3m -dump ...というのは、nict.go.jpの時刻データをhttpsで拾ってきて、標準出力で出力させるコマンドであり、この標準出力をdateコマンドに渡している。最後のhwclock -wはハードウェア時計をソフトウェア時計に合わせる設定である。

ちなみに、リンク先についてはnictの技術情報から選んだものである。自分で都合のよいものを選べば良い。

2013年4月29日月曜日

スクリーンのstandbyやsuspendをさせないようにする

講演でdebianなどのLinuxを使っているとき、通常はxwindowを使っているだろう。そのときに、standbyやsuspend, offになってしまうとVGAへの出力も止まってしまうので、そういうことをさせないようにするには

xset dpms 0 0 0


とする。最初の数字がstandbyになるまでの秒数、次の数字がsuspendになるまでの秒数、最後の数字がpoweroffになるまでの秒数。0にしてあるので、standbyにもsuspendにもpoweroffにもならない。shell scriptにでもしておいて、講演の時にscriptを起動させればよいだろう。

apt translationを減らす

Debian / Ubuntuのupdateの時間を短縮する方法。squeezeあたりからlocaleをなんでもかんでもチェックするようになったが、それをやめさせる方法。

1. 既に取得してしまっている翻訳情報を削除する。

既に apt-get update または aptitude update を実行している場合は、国際化情報を取得してしまっているので、それらを削除する。

cd /var/lib/apt/list
sudo rm -f *Translation*


2. 使用する言語の設定

/etc/apt/apt.conf に使用するlocaleを設定します。
エディタで /etc/apt/apt.conf を開いて(ファイルがなければ作成)次の行を追記します。

APT::Acquire::Language "ja_JP";
APT::Acquire::Language "en";
APT::Acquire::Translation "ja_JP";


3. パッケージデータベース更新

sudo aptitude update (または sudo apt-get update)


指定したlocaleの国際化情報は取得しなくなって、更新が早くなるはず。