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

みやびの備忘録

LaTeXとかjulia言語とか. 覚えておきたいことをつらつら書いています.

画像ファイルはPDF!繰り返す. 画像はPDF!!

LaTeXで文書を書いていて, コンパイルまではすんなり終わるのに, 最後のPDFへの埋め込みに異常な時間がかかってお困りの皆さん.
それ, epsファイルのせいっぽいっすよ.

詳しいことはよく分かりませんが, epsを内部でPDFに変換しているんだとか.
埋め込み中にタスクマネージャをみたらGhostscriptがすごい頑張ってました…


TeXが重い!!といろいろ調べてたら画像だけのPDFをつくる方法があったのでまとめます.

用意するもの
LaTeX文書
・epsファイル
・画像用の新規texファイル(gnuplotのepslatexであれば必要なし)

やり方は簡単. 画像だけのtexファイルをコンパイルするだけ. texファイルの中身は,

\documentclass[オプション]{standalone}
\usepackage{graphicx}
\usepackage{color, pict2e}
\begin{document}
  \includegraphics{hoge.eps}
\end{document}

とする. epslatexの場合は, 元々生成されているtexファイルに\documentclass, \begin{document}, \end{document}を付け加えればよい. グラフの凡例などに数式等を入れている場合は, それに必要なstyファイルを\usepackageすることも忘れずに.

また, epslatexで自動生成されるtexファイルのなかにある\includegraphicsには拡張子が省略されているので, .epsを付け足す. これをしないと修正のために再度コンパイルをしたときにエラーを起こす. (恐らくPDFが優先されている.)


こうするとtexファイルと同名のPDFファイルができるので, これを本体の中で\includegraphicsするだけ.
これで見違えるほど軽くなるはずです.

まあ画像一回一回のコンパイルで時間はかかるんですけどね.
文書のちょっとした修正を行いたいときとかに, 事前にやっとくといいですよ~って感じか.



ご存知の方はスルーで
dvipdfmxを使っている場合
pdfだからmediabbか~ してはいけません
\usepackage{mediabb}は禁則です.

gnuplotで背景色を黒にする

gnuplotでスライド用のグラフの画像を作っています.
遠くからでも見やすい色にしたくて色々変えてみたところで, 綺麗なカラーバリエーション(?)にするなんて素人には無理な話なんですね. 特に私美的センスゼロなもんで.

なんだかんだデフォルトが一番. しかし見づらい…
「あ, 背景色黒にすればいいんじゃね?」

ってことで調べまくってたんですけど結構ややこしかったんでメモ.

まず色の設定.

set object 1 rect behind from screen 0,0 to screen 1,1 fc rgb "#333631" fillstyle solid 1.0
set grid lc rgb "white" lt 2
set border lc rgb "white"
set key tc rgb "white"
set xlabel "xlabel" tc rgb "white"
set ylabel "ylabel" tc rgb "white" offset 1, 0
set size ratio 2.0/(1.0 + sqrt(5.0))
set palette rgbformulae 22, 13, -31

1行目, #333631は, 真っ黒じゃ嫌だったので少し優しめの色を選びました.
2行目からは諸々の色を白にしている. 背景黒なんで. 2行目のlt 2で実線, 1にすると破線.
offsetってのはylabelを少しグラフに近づけてる.
最後のは陰面処理っていうの?熱分布のアレの色を虹色にするらしい.

(gnuplot 5.0の)デフォルト色でグラフを書くけど, 流石にlc 1のdark-violetは暗くて見づらい. 多分.
個人的にはlc 2, 3, 5, 7あたりを使えばよさそうかなと思っている.


さてグラフが出来たしいつも通りterminalをepslatexにして…

TeXファイルに色が反映してない…!嘘だろ…!

色々試したけど結局目盛りだけは白色に出来なくて諦めた.


普通のpostscript eps colorは大丈夫だった. フォントがTeXっぽくならないし数式入れられないけどまあスライドだしいいか. しょうがない.
凡例のタイトルはplot ~ title "hoge"と書けば変えられる.
あとそのままだと文字が小さいので,

set terminal postscript eps color 20 #ここでフォントサイズ指定

多分サイズはこのくらいでOK.

ちなみに完成系はこんな感じ.
f:id:miyabi-mathematics:20170125212033p:plain

試しに研究室のプロジェクターで映してみたけど結構いいかなって感じでした.
卒論の発表練習で出したら結構不評だった…(笑)
見やすいと格好いいは別物ですね.

LaTeXのcaption, gnuplotのterminal

本当にただの備忘録. 忘れそうだから.
LaTeXでcaptionの中で数式番号などを参照したいときは, \refとか\eqrefとかの前に\protectをつける.

gnuplotでeps等に出力した後,

> set terminal wxt
> replot

とすればデフォルトの画面に戻れて, ファイルも閉じる. 設定もそのまま引き継ぐので何かと便利.
set terminal windowではない. これ, なんか違う感がすごい.

陰関数のグラフ

gnuplotでは陽関数のグラフしか書けない.
そこで陰関数のグラフを書くために, z=f(x,\, y) のグラフの等高線を利用して書くんですね.
詳しくは
http://www.cymric.jp/old/common-soft/gnuplot_inkansu.html
このページを参照してちょ.

しかし困ったことに縦横比が変えられなかった.
そこで

set table "hoge.dat"
unset table
plot "hoge.dat"

データをファイルに落としてくれるんですね.
こうすれば好きな設定が使える. やったぜ.

グラフの縦横比

gnuplotでグラフの縦横比を変える, set size ratioというコマンドがあるのだが, よくわからず使っていた.

set size ratio -1

とすれば xy の目盛り自体が 1:1 となり,

set size ratio a

で, グラフの外枠の縦横比が x:y=1:a となる.

例えば黄金比にしたいなら

set size ratio 2.0/(1.0 + sqrt(5.0))

とする.

多倍長計算

Juliaで多倍長の小数演算.
そう!BigFloat

a = BigFloat(0.1)

って書いてたけど, こうではなく

a = big"0.1"

って書かねばならんらしい.
BigFloat()っていう関数に渡す前の数字がFloat64で先に読み込まれてしまい, ずれた値が返ってきてしまう.

ただ, big""っていう表記には数字にしか使えないっぽく,

b = big"sqrt(2)"

というのは許されない.

c = big"2"
b = sqrt(b)

とか

b = sqrt(big"2")

と書けばよい.

(追記)Float64をBigFloat関数に突っ込むのと同じだ…

big"0.1"+sqrt(big"2") = 1.514213562373095048801688724209698078569671875376948073176679737990732478462105
0.1+sqrt(big"2") = 1.514213562373095054352803847335480780687830215831049635676679737990732478462102
(参考)sqrt(2) = 1.4142135623730950488016887242096980785696718753769480731766797379907324…

意外と面倒そう…

align再発見

\begin{align}
  \begin{array}{ll}
    \begin{array}{rll}
      a & = & 1\\
      a & = & 2
    \end{array}
    &
    \begin{array}{l}
      (i=1,\, 2,\, \ldots,\, 10)\\
      (i=11,\, 12,\, \ldots)
    \end{array}
  \end{array}
\end{align}

って感じで数式書いてて,
f:id:miyabi-mathematics:20170105124637p:plain
おっ, ちゃんと揃えられるじゃんarray優秀~って思ったら, 数式番号は全体に一つしかつかない…

\begin{align}
  a&=1 &  &(i=1,\, 2,\, \ldots,\, 10)\\
  a&=2 &  &(i=11,\, 12,\, \ldots)
\end{align}

なんだ. alignの中に&をたくさん(?)ぶち込めば揃えられるじゃん.
f:id:miyabi-mathematics:20170105123807p:plain

ただ, 気になるのは真ん中の空間が長すぎること. \hspaceで詰めたら数式番号まで寄ってきてしまってそれは違うなと…

真ん中の長さはarrayの方が良いし, 数式番号とイコールの両脇の隙間をみるとalignの方がいいし,
いいとこどり出来ないものか…