2015年12月10日木曜日

tikzを使って行列の外に書き込みをする。

次のようなtweetを見つけました。



以前にmultirow.styとbigdelim.styを使って行列の外に書き込みをした次のような図を作ったことがあります。

しかし、最近覚えたtikzのmatrixライブラリを使えば上記のtweetの画像により近いものを再現できそうなので試してみました。tikzの使用は上のtweetの趣旨から外れていると思いますが、結果は次のようになりました。

以下にソースを貼り付けておきます。
\documentclass[a4paper,10pt,dvipdfmx]{jsarticle}

\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{math,matrix,backgrounds}

\begin{document}
 \begin{equation}
  P_n(i, j)
 =
\hspace{-8ex}
 \begin{tikzpicture}[%
  baseline=(m.west),
  every left delimiter/.style={xshift=1ex},
  every right delimiter/.style={xshift=-1ex}]
  \matrix(m)[matrix of math nodes,nodes in empty cells,
  ampersand replacement=\&,
  left delimiter={(},right delimiter={)},%
  inner sep=0.8ex]
  {
  1\&\&\&\phantom{1}\&\&\&\&\phantom{1}\&\&\&\\
  \&\&\&\&\&\&\&\&\&\&\\
  \&\& 1\&\&\&\&\&\&\&\&\\
\phantom{1}\&\&\phantom{1}\& 0\&\phantom{1}\&\&\phantom{1}\& 1\&\phantom{1}\&\&\phantom{1}\\
  \&\&\&\phantom{1}\& 1\&\&\&\phantom{1}\&\&\&\\
  \&\&\&\&\&\&\&\&\&\&\\
  \&\&\&\phantom{1}\&\&\& 1\&\phantom{1}\&\&\&\\
\phantom{1}\&\&\phantom{1}\&1 \&\phantom{1}\&\&\phantom{1}\& 0\&\phantom{1}\&\&\phantom{1}\\
  \&\&\&\phantom{1}\&\&\&\&\phantom{1}\& 1\&\&\\
  \&\&\&\&\&\&\&\&\&\&\\
  \&\&\&\phantom{1}\&\&\&\&\phantom{1}\&\&\& 1\\
  };
 \node[above=4.5ex] at(m-1-4){第$i$列};
 \node[above=2ex] at(m-1-4){$\downarrow$};
  \node[above=4.5ex] at(m-1-8){第$j$列};
  \node[above=2ex] at(m-1-8){$\downarrow$};
  \node[left=2.5ex]at(m-4-1){第$i$行$\to$};
  \node[left=2.5ex]at(m-8-1){第$j$行$\to$};
 \begin{scope}[on background layer,x=1ex,y=1ex]
\tikzmath{
int \k,\n,\m;
coordinate \A,\B,\C,\D,\E,\F;
  for \n in {1, 5, 9}{%
  \m=\n +2;
  for \k in {4,8}{
  \A=(m-\k-\n.west);
  \B=(m-\k-\m.east);
  \C=(m-\n-\k.north);
  \D=(m-\m-\k.south);
  {\draw[line width=1pt,line cap=round,dash pattern=on 0pt off 4\pgflinewidth]
  (\A)--(\B) (\C)--(\D);};
  };
  \E=(m-\n-\n.south east);
  \F=(m-\m-\m.north west);
  {\draw[line width=1pt,line cap=round,dash pattern=on 0pt off 4\pgflinewidth]
  (\E)--(\F);};
  };
  }
 \end{scope} 
 \end{tikzpicture}
 \end{equation}
\end{document}

行列の外部に文字を書くことよりも、行列内の複数列、複数行にわたるドットを比較的簡単に記述できるのもtikzを使う利点かもしれません。

追記2015/12/11:少し変更を行いました。ドットの始点や終点になっている行列のセルにphantomで空白を入れ、ドットの長さを調整しました。

2015年11月20日金曜日

Springtime Carnivore

Gold MotelのGreta SalpeteがSpringtime Carnivore名義でアルバムを出していたことに最近ようやく気付きました。Gold Motelの音沙汰が聞こえてこないので、facebookを見てみたところ、実質的に活動停止の状況にあるようです。最近の書き込みはGretaさんがSpringtime Carnivoreを宣伝するものばかりでした。
セルフタイトルアルバムが非常に良かっただけに、活動休止状態なのは残念です。
しかしSpringtime Carnivoreのセルフタイトルアルバムもかなりの良作でした。









two scarsが凄く気に入っているのですが、アルバム収録のものとミュージックビデオのものはバージョンが違っていて、アルバムバージョンはボーカルにエコーが掛かりすぎていてあまり好みではありません。アルバムの前に7inch vinyl版を出しているようで、そちらに収録されているバージョンがYouTubeの動画のバージョンのもののようです。

Springtime Carnivore :: Collectors from Eddie O'KEEFE on Vimeo.


Springtime Carnivore - Creature Feature from Eddie O'KEEFE on Vimeo.

2015年10月22日木曜日

Maritime "Magnetic Bodies/Maps of Bones"

Maritimeの新作"Magnetic Bodies/Maps of Bones"が発売されました。

こちらで全曲試聴可能です。Youtubeにも新曲を含めたライブの音源がアップロードされています。
今作も傑作です。1曲めの"Nothing is forgot"から打ちのめされてしまいました。



amazonでCDは注文したけれど、海外発送で到着までもうしばらくかかりそうです。試聴ですでに20回くらいループしてしまいましたが。

アルバムには先行で発表されていた"Milwaukee"が含まれていないようなので、こちらもMVを貼り付けておきます。

2015年10月2日金曜日

Tikzを使って行列を装飾する。

Tikzを使って行列の装飾をしてみました。特定行の背景を色付けすることと、矢印を引っ張ってコメントを付ける試みをしています。

矢印を描く部分は、図画間結合(inter-picture connections)を使っています。これはremember pictureオプションを使って、自分以外のtikzpicture環境にあるノードを参照する機能だそうです。通常のplatex+dvipmdfx環境では使うことができないため、zrbabblerさんのblog「マクロツイーター」の記事「Tikzはdvipdfmxをどこまでサポートするか?(2)」に紹介されているpxpgfmarkパッケージを使いました。図画間結合については同記事に詳しい説明がなされています。

上の式を出力するためのソースは次の通りです。
\documentclass[dvipdfmx]{jsarticle}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage[svgnames]{xcolor}
\usepackage{tikz}
\usetikzlibrary{matrix,fit,backgrounds,calc}

\usepackage{pxpgfmark}%e-ptexでremember pictureを可能にする.

\begin{document}
 \begin{align*}
&  b_{11}^{k-1}
 \begin{vmatrix}
  b_{11}& \dotsb & b_{1k}\\
  b_{21}&\dotsb & b_{2k}\\
  \multicolumn{3}{c}{\dotsb\dotsb}\\
  b_{k1}&\dotsb & b_{kk}
 \end{vmatrix}
  =
 \begin{tikzpicture}[remember picture,baseline=(T1.west),
  every left delimiter/.style={xshift=1ex},
  every right delimiter/.style={xshift=-1.5ex}] %,
  %matrixライブラリで行列の各セルにノードを配置する
  \matrix(T1)[
  matrix of math nodes,nodes in empty cells,
  ampersand replacement=\&,
  left delimiter={|},right delimiter={|},
  inner sep=0.45ex]
 {
 b_{11}\& b_{12} \&\dotsb \& b_{1k}\\
  b_{11}b_{21}\& b_{11}b_{22}\& \dotsb  \& b_{11}b_{2k}\\
 \vphantom{b_{11}}\&\&\& \\%tikzのmatrixではmulticolumnが使えないので複数列に渡るドットを後で描画する.
  b_{11}b_{k1} \&b_{11}b_{k2} \&\dotsb \& b_{11}b_{kk}\\
 };
 \node[fit=(T1-3-2)(T1-3-4)]{$\dots\dots$};%複数列に渡るドット
 \end{tikzpicture} 
 \\[5pt]
&\qquad
 \begin{aligned}[t]
 & =
 \begin{tikzpicture}[remember picture,
 baseline=(T2.west),
 every left delimiter/.style={xshift=1ex},
 every right delimiter/.style={xshift=-1ex}] %,
 \matrix(T2)[matrix of math nodes,nodes in empty cells,
 ampersand replacement=\&,
 left delimiter={|},right delimiter={|},
 inner sep=0.45ex]
 {
 b_{11} \& b_{12} \& \dotsb \& b_{1k}\\
 0 \& b_{11}b_{22}-b_{12}b_{12} \&\dotsb  \& b_{11}b_{2k}-b_{12}b_{1k}\\
 \vphantom{b_{11}}\& \& \&\\
  b_{11}b_{k1} \& b_{11}b_{k2} \&\dotsb \& b_{11}b_{kk}\\
 };
 \node[fit=(T2-3-2)(T2-3-4)]{$\dots\dots$};
%backgroudsライブラリで行の背景を塗る
 \begin{scope}[on background layer]
  \fill[gray!40,rounded corners]($(T2-2-1.north west)+(-10pt,0)$)rectangle(T2-2-4.south east);
 \end{scope}
 \end{tikzpicture}\hspace{80pt}
 \\[5pt]
 &=
%横幅の広いドット
 \tikz[remember picture,baseline=-0.5ex]{
 \draw[line width=1.5pt,line cap=round,dash pattern=on 0pt off 4\pgflinewidth](0,0)--(160pt,0);
 }
 \\[5pt]
 &=
 \begin{tikzpicture}[remember picture,baseline=(T3.west),
 every left delimiter/.style={xshift=1ex},
 every right delimiter/.style={xshift=-1ex}]
 \matrix(T3)[matrix of math nodes,nodes in empty cells,
 ampersand replacement=\&,
 left delimiter={|},right delimiter={|},
 inner sep=0.45ex]
 {
  b_{11} \& b_{12} \& \dotsb \& b_{1k}\\
 0 \& b_{11}b_{22}-b_{12}b_{12} \& \dotsb  \& b_{11}b_{2k}-b_{12}b_{1k}\\
 \vphantom{b_{11}}\&\&\&\\
  0 \& b_{11}b_{k2}-b_{12}b_{1k} \&\dotsb \& b_{11}b_{kk}-b_{1k}b_{1k}\\
 };
 \node[fit=(T3-3-2)(T3-3-4)]{$\dotsb\dotsb$};
 \begin{scope}[on background layer]
 \fill[gray!40,rounded corners]($(T3-4-1.south west)+(-3pt,0)$)rectangle (T3-4-4.north east);
 \end{scope} 
 \end{tikzpicture} 
%
 \begin{tikzpicture}[remember picture,overlay]
  \draw[->]($(T1-2-4.east)+(3pt,0)$)
  -|  ($(T2-2-4.east)+(15pt,0)$) --($(T2-2-4.east)+(2pt,0)$);
  \node[right=15pt,text width=95] at ($(T2-2-4.east)+(0,30pt)$){\small 1行目の$b_{12}$倍を2行目から引く};
  \draw[->]($(T1-4-4.east)+(2pt,0)$)-|($(T3-4-4.east)+(20pt,0)$)--($(T3-4-4.east)+(2pt,0)$);
  \node[right=20pt,text width=100] at (T3.east){\small 1行目の$b_{1k}$倍を$k$行目から引く};
 \end{tikzpicture}
  \\[5pt]
  &=
 \begin{vmatrix}
  b_{11} & b_{12}&\dotsb &b_{1k}\\
  0& a_{22} &\dotsb & a_{2k}\\
  \vdots& \multicolumn{3}{c}{\dotsb\dotsb}\\
  0& a_{k2} & \dotsb & a_{kk}
 \end{vmatrix}
  =b_{11}
 \begin{vmatrix}
  a_{22} &\dotsb &a_{2k}\\
  \multicolumn{3}{c}{\dotsb\dotsb}\\
  a_{k2}&\dotsb & a_{kk}
 \end{vmatrix}
 \end{aligned}
 \end{align*}
\end{document}
かなり微調整をしているのでソースは汚いです。行の背景に色付けするために、matrixライブラリを使って各セルにノードを配置し、そのノードを元に色付けを行っています。またtikzのmatrix命令の中ではmulticolumn環境が使えないので、複数列に渡るドットも行列のセルのノードの情報を元に後で描画しています。

2015年9月20日日曜日

ketpicによる被覆空間の習作2

曲面上の領域を斜線塗りする方法を利用して、被覆空間における平行移動と被覆変換を図示してみました。
この図では簡素過ぎてよくわからないのでさらにinkscapeに取り込んでさらに加工する必要がありますが、この図を出力するためのソースは次の通りです。
currentdir=pwd()

tic();

a=2;//内側の円の半径
b=2;//被覆空間のxy平面からの距離
R=3;//外側の円の半径と内側の円の半径の差

//視点のアングル
phi=20;
theta=75;
Setangle(theta,phi);


//曲面の定義
function x=CX(u,v)
    x=(u+a)*cos(2*%pi*v)
endfunction

function y=CY(u,v)
    y=(u+a)*sin(2*%pi*v)
endfunction

function z=CZ(u,v)
    z=2*v+b
endfunction
//



//被覆空間
FD=list('p','x=CX(U,V)','y=CY(U,V)','z=CZ(U,V)','U=[0,R]','V=[0,4]');

//底空間
GC1=Spacecurve('[CX(0,V),CY(0,V),0]','V=[0,1]');
GC2=Spacecurve('[CX(R,V),CY(R,V),0]','V=[0,1]');


//被覆空間の輪郭線・境界線データ
SFb=Sfbdparadata(FD,[50,250],0.01,0.001);



//被覆空間上の領域
EHSC=list();//斜線で塗った領域を曲面に埋め込んだもののリスト
ESC=list();//領域の境界を曲面に埋め込んだもののリスト
for K=list(-1,0,2,3)
  
function Z=Embz(X,Y)
  if K>0 then
    //atanの出力値は(-pi, pi]なので注意する。
    Z=atan(Y,X)/%pi+2*floor(K*0.5)+b;
  else
    //K=-1,0の場合はZ=0の平面
    Z=0
  end
endfunction


//埋め込み関数の定義
deff('Out=Emb(X,Y)','Out=[X,Y,Embz(X,Y)]');

//埋め込む平面上の領域の境界線を定義
function Y=CvY(T)
  Y=sin(T)+(a+0.5*R)*(-1)^(K+1)
endfunction
SC=Paramplot('[cos(T),CvY(T)]','T=[-%pi,%pi]');

//境界内を斜線で塗る
HSC=Hatchdata(list('i'),list(SC),45,2.5);

//領域を曲面に埋め込む
EHSC1=Embed(HSC,Emb);
ESC1=Embed(SC,Emb);

EHSC($+1)=EHSC1;
ESC($+1)=ESC1;

if K>0 then
  EHSC2=Translate3data(EHSC1,[0,0,4]);
  ESC2 =Translate3data(ESC1,[0,0,4]);
  EHSC($+1)=EHSC2;
  ESC($+1)=ESC2;
end

end


//ファイバー
Fibre=list();
SFibre=list();
for K=1:2
  Fibre1=Spacecurve('[0,(a+0.5*R)*(-1)^(K),T]','T=[0,10]');
  Fibre($+1)=Fibre1;
  SFibre1=Crvsfparadata(Fibre1,SFb,FD)
  SFibre($+1)=SFibre1;
end

//パス 後でスケルトンデータを取るため、曲面よりもz座標が少し大きくなるようにする
SPath=list();
for K=0:2
  if K>0 then
    Vmax=0.75+2*(K-1);
    Vmin=1.25+2*(K-1);
    SPath1=Spacecurve('[CX(0.5*R,V),CY(0.5*R,V),CZ(0.5*R,V)+0.02]','V=[Vmax,Vmin]');
    SPath($+1)=SPath1;
  else
    SPath1=Spacecurve('[CX(0.5*R,V),CY(0.5*R,V),0.02]','V=[0.75,1.25]');
    SPath($+1)=SPath1;
  end
end

//陰線処理
SkDom=Skeletonparadata(list(ESC,EHSC),list(Fibre,SPath),1,0.01);
SkSFb=Skeletonparadata(SFb,Fibre);
SkGC2=Skeletonpara3data(GC2,Fibre);

//曲面に隠れる曲線 曲面と交わらないときは最後に-1を付ける。
SGC2=Crvsfparadata(SkGC2,SFb,FD,-1);



Setwindow([-6,6],[-2,11]);//ウィンドウ範囲を設定
Windisp(list(Projpara(GC1,SGC2,SFibre,SPath),SkDom,SkSFb));

cd(currentdir);


Openfile('fiber_translation.tex')//書き出し用ファイルを開く
Beginpicture('10/12cm');//picture環境を始める。引数は単位長
Drwline(list(Projpara(GC1,SGC2,SFibre,SPath),SkDom,SkSFb),1);
Endpicture(0);//picture環境を終える(座標軸を書かない)
Closefile();//書き出し用ファイルを閉じる


T=toc();
minute=floor(T/60);
second=floor(T-60*minute);
disp(strcat([string(minute), ' minutes ', string(second), ' seconds']));
出力したpdfをinkscapeで取り込んで、パスを簡略化したあとsvg2tikzでtikzのコードに変換し、文字や矢印を入れていくと次のような図になりました。
これはこれでゴチャゴチャし過ぎな感じがします。もうちょっと修正が必要かな。

2015年9月17日木曜日

ketpicで曲面を斜線塗りする

ketpicのEmbed関数を利用して曲面上の領域を斜線塗りする試みをしました。
今回作成したのは、円の内部の領域$x^2+y^2\leq 1$に斜線を入れたものを曲面$z=x^2-y^2$に持ち上げた図です。
この図を作成するためのソースは次の通りです。
currentdir=pwd()

tic();

//視点のアングル
phi=60;
theta=40;
Setangle(theta,phi);
//


//曲面の関数
function z=Sfc(x,y)
  z=x^2-y^2
endfunction

//曲面のデータ
Fd=list('Z=Sfc(X,Y)','X=[-1.5,1.5]','Y=[-1.5,1.5]');
Sb=Sfbdparadata(Fd);//境界線の3dデータ
Sbh=BorderHiddenData();//曲面に隠れる境界線の3dデータ

//曲面に埋め込む円
GC=Paramplot('[cos(T),sin(T)]','T=[0,2*%pi]');
deff('Out=Emb(X,Y)','Out=[X,Y,Sfc(X,Y)]');
GH=Hatchdata(list('i'),list(GC));
SC=Embed(GC,Emb);
SH=Embed(GH,Emb);

Setwindow([-3,3],[-3.5,3]);

Windisp(Projpara(Sb,Sbh,SH,SC));

Openfile('test.tex')//書き出し用ファイルを開く
Beginpicture('1cm');//picture環境を始める。引数は単位長
Drwline(Projpara(Sb,SH,SC));
Dottedline(Projpara(Sbh));
Endpicture(0);//picture環境を終える(座標軸を書かない)
Closefile();//書き出し用ファイルを閉じる


T=toc();
minute=floor(T/60);
second=floor(T-60*minute);
disp(strcat([string(minute), ' minutes ', string(second), ' seconds']));

ここでは曲面に隠れるべき部分も描かれてしまっていますが、どうやって対処すべきかまだ理解できていません。

2015年9月4日金曜日

highlight.jsを利用してBloggerでLaTeXのソースコードに色付けを行う設定

はてなブログやwordpressではLaTeXのソースに色付けする機能が標準で備わっていて、日頃から羨ましく感じていました。
ソースコードの色付けを行う方法としては、syntaxhighlighterを使うのが有名なようで、検索で引っかかる情報が多かったです。しかしsyntaxhighlighterではLaTeXが公式にサポートされていません。こちらで紹介されているように、非公式には存在しているみたいです。

今回は、LaTeXのソースの色付けが公式にサポートされているhighlight.jsの導入を試しました。kakurasanの備忘録さんの「HTML内のコード色付き表示highlight.jsのBloggerへの設置とカスタマイズ」という記事を参考にしました。
公式サイトに行き、「Get version 8.7」のボタンをクリックすると次の 画面になります。現在のバージョンは8.7です。
最初の説明によると、よく使われる22の言語についてはCDNにホストされているので自前で導入しなくとも使えるそうで、この部分のコードをテンプレートに記述することだけで良いのですが、TeXはこの中に含まれていません。下にスクロールしてみると利用可能な言語の一覧があります。
Common部分がCDNにホストされている言語で、それ以外の言語についてはチェックを入れてパッケージをダウンロードし、自分で設定を行う必要があります。

下の方にTeXも見つかりました。ここではScilabとTeXにチェッックを入れています。必要な言語を選んで「Download」ボタンをクリックするとhighlight.zipというファイルがダウンロードされるので解凍します。今回実質的に用いるのは、解凍したフォルダ内にあるhightlight.pack.jsというファイルだけです。これがソースコードに色付けするJavaScriptライブラリです。このファイルの内容をテンプレートに貼り付ける方法もあるようなのですが、ここではGoogle Driveにファイルをアップロードして設置する方法を取りました。

私の場合はhighlight.zipを解凍してできたhighlightというフォルダそのものをGoogle Driveにアップロードしました。以下はGoogle Driveでフォルダの中身を開いた画像です。
ここでhighlight.pack.jsを選択し、右上の左から2番目の人型アイコンから共有の詳細設定でアクセス権限を「ウェブ上で一般公開」に設定します。この画像は共有設定済みのものです。
同じアイコンをクリックするとファイルのリンクが表示されます。下の画像はその一部です。
ここで「 https://drive.google.com/file/d/…/view?usp=sharing」のドット部分にある文字列をコピーします。このファイルの実体は「https://googledrive.com/host/…」にあります。

さて、このスクリプトファイルを参照する設定をブログのテンプレートに書き込む設定をしましょう。

ブログの編集画面から、テンプレートを選択し、「HTMLの編集」ボタンをクリックします。そしてbodyで囲まれた部分の最後の方に次のように記述します。
記入した内容は
<link href='//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.7/styles/monokai.min.css' rel='stylesheet'/>
<script src='https://googledrive.com/host/「上でコピーした文字列」' type='text/javascript'/>
<script>hljs.initHighlightingOnLoad();</script>
です。最初の1行は色付けのスタイルファイルの設定で、こちらも通常は自前のファイルを使って設定をするのですが、どうにもうまくいかなかったためCDNに置いてあるcssファイルを読み込むように設定しました。ここではmonokaiというスタイルを選択しています。
他のスタイルを試したい場合は、公式ページのlive demoの部分から各言語での色付けの様子を確認することができます。

以上でテンプレートの設定は完了です。
<pre><code>...</code></pre>
で囲んだ部分が色付けされます。言語は自動判定しているので、判定がうまくいっていない場合や言語を明示したい場合は
<pre><code class="tex">...</code></pre>
のように記述しておくと良いようです。

2015年9月2日水曜日

tikz-cdで可換図を描いてみた。

横幅が広すぎる可換図をページ内に収めるため、tikz-cdのマニュアルを参考に複数行にわたる可換図を描いてみました。


次はできあがった図の画像です。
ソースは以下の通り。
\documentclass[10pt,a4paper]{article}
\usepackage[dvipdfmx]{graphicx}
\usepackage{amsmath,amssymb}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{cd}

\begin{document}
\begin{equation*}
 \begin{tikzcd}[column sep=small]
  H_{n+1}(S_\ast(U)+S_\ast(V))
  \arrow[r]
  \arrow[d]
  &(\Sigma^{-1}\mathbb{Z})_n
  \arrow[r]
  \arrow[d,equal]
  &H_n(\tilde{S}_\ast(U)+\tilde{S}_\ast(V))
  \arrow[d]
  \arrow[ddd, phantom, ""{coordinate, name=Z}]
  \arrow[dd,rounded corners,
  to path={ --([xshift=2ex]\tikztostart.east)
            |-($(Z)+(0,-1ex)$)\tikztonodes
            -|([xshift=-2ex]\tikztotarget.west)
            --(\tikztotarget)}]
\\
  H_{n+1}(X)
  \arrow[r]
  &(\Sigma^{-1}\mathbb{Z})_n
  \arrow[r]
  &\tilde{H}_n(X)
  \arrow[dd,rounded corners,
  to path={ --([xshift=2ex]\tikztostart.east)
            |-($(Z)+(0,+1ex)$)\tikztonodes
            -|([xshift=-10ex]\tikztotarget.west)
            --(\tikztotarget)}]
\\
& &H_n(S_\ast(U)+S_\ast(V))
 \arrow[r]
  \arrow[d]
 &(\Sigma^{-1}\mathbb{Z})_{n-1}
  \arrow[d,equal]
\\
&&H_n(X)
  \arrow[r]
&(\Sigma^{-1}\mathbb{Z})_{n-1}
 \end{tikzcd}
\end{equation*}
\end{document}

2015年8月9日日曜日

bxjsbook.clsを試してみた。

BXjsclsのバージョン1.0が出たそうです。
すでにCTANのファイルが更新されていて、texlive2015でアップデートをかければ導入されるようです。バージョンが1.0になったことで、これまで無かったjsbook.clsに対応するクラスファイルbxjsbook.clsなどが追加されたので、早速試してみました。

私はこれまで主にjsbook.clsを使って数学ノートの作成をしていたのですが、jsbookクラスファイルは1行に40文字が基準となっていて、フォントサイズを変更すると余白が大きくなりすぎると感じていました。

例えばplatexで
\documentclass[dvipdfmx,b5paper,10pt]{jsbook}
でタイプセットすれば次のようなレイアウトになります。

いつもはこの状態で作成しています。
これを
\documentclass[dvipdfmx,b5paper,9pt]{jsbook}
にしてタイプセットすると

となります。この左側の余白が気になるので、奥村先生のpLaTeX2e 新ドキュメントクラスにあるように\textwidthやマージンを調整して
\documentclass[dvipdfmx,b5paper,9pt]{jsbook}
\setlength{\textwidth}{\fullwidth}
\setlength{\evensidemargin}{\oddsidemargin}
とすれば今度は

となるので、幅が広すぎると感じてしまうわけです。そこで短絡的に\textwidthを少しいじって
\documentclass[dvipdfmx,b5paper,9pt]{jsbook}
\setlength{\textwidth}{0.9\fullwidth}
\setlength{\evensidemargin}{\oddsidemargin}
と変更すると、
となりレイアウトが崩れます。こんな感じで、jsbookについてはレイアウトの調整が面倒だなという印象が出来てしまいきちんと調べることをしていませんでした。

bxjsbook.clsではこの辺の挙動が改善されていないかと思い試してみました。まず調整なしで
\documentclass[platex,dvipdfmx,b5paper,10pt]{bxjsbook}
と設定すると

となりました。これでは余白が大きすぎると思ったので、マニュアルを見て
\documentclass[platex,dvipdfmx,b5paper,9pt]{bxjsbook}
\renewcommand{\jsTextWidthLimit}{45}
\pagelayout{hmargin=20mm}
と設定すると

となりました。\jsTextWidthLimitで1行内の文字数の上限を設定するようになっていて、通常は40に設定されています。ここを設定し直すだけで文字数を変更できるので、jsbookに比べて遥かに設定が楽になっていると感じました。これからはbxjsbook.clsに完全に移行したいと思います。

ただ、bxjsbook.clsにしてから
LaTeX Font Warning: Command \normalsize invalid in math mode
という警告が大量に出るようになりました。別行立ての数式全体で発生しているようです。内部でフォントサイズの変更をしているのかな?

今のところplatex以外のlatexエンジンを使う必要性に迫られていないので、BXjsclsの特徴であるlatexエンジン非依存性の恩恵を享受することはなさそうなのですが、上記の理由だけでも移行する価値が十分にあるという話でした。

追記2015/09/10: texlive2015に含まれているbxjsbook.clsのアップデートがあり、バグフィックスが行われたようで別行立ての数式で発生していたエラーは無くなりました。

2015年7月22日水曜日

位相空間の勉強ノート

Trevesの本を使って位相ベクトル空間の勉強をしているのですが、ところどころで記述がすっきりしないと思うところがあり、位相ベクトル空間が一様空間の一例であることから、一様空間について勉強を始めました。

はじめは宮島さんの「関数解析」の項目と岩波数学辞典の一様空間の項目を見ながら勉強していたのですが、一様空間の文献としてBourbakiがよく挙げられるようなので、位相と位相線型空間の巻を購入して読み始めています。

位相の第2章の一様空間について、位相ベクトル空間のところですぐに使いそうな項目をひと通り勉強したので、その勉強ノートをこちらに置いておきます。

自分で考えた時には、2つの位相ベクトル空間の完備化の直積と直積の完備化の間の同型を示すのにも相当手こずってしまいましたが、Bourbakiには一様空間族の直積の完備化と完備化の直積が一様同相であることがすっきりした形で書かれていてタメになりました。

位相空間のノートで、initial topologyやfinal topologyをそれぞれ始位相や終位相と訳してしまったので、initial uniformityを始一様構造と訳しています。Bourbakiの訳書では逆一様構造と訳していますが、ググっても日本語の記事が全く引っかかりませんでした。initial topologyやfinal topologyは、Bourbakiの訳書と同じ逆位相や像位相という用語のほうが定着しているようです。

写像族により定まる位相や一様構造についての部分は、Bourbakiの集合論のところで普遍写像性という一般的な議論があるらしく、その性質の帰結としてスマートに述べられているのですが、集合論の巻を購入していないため、ノートでは泥臭い議論になっています。

一様空間の完備化の勉強をしたことで、以前に作ったノートでの、位相ベクトル空間の完備化の証明に穴があることがわかりました。証明を自分で埋める必要がある本を読む場合には、こういったことがよくあるので気をつけなければならないと改めて感じています。

目的から大分遠回りをしていますが、位相加法群や位相環、位相加群の簡単な定義と一様空間の距離付可能性なども勉強して、位相ベクトル空間に戻りたいと思います。

追記:2016/04/16 定理環境の枠囲みを,mdframed.styからtcolorbox.styに変更しました.妙な改ページが無くなっていると思います.

追記:2016/05/02 定理などのの引用番号がおかしくなっていたのを修正しました.

2015年6月7日日曜日

precompiled preambleを用意して,platexのタイプセットを高速化する

最近dynabook v713を使っていなかったので知人に譲り,これを元手にして,久々にwindowsのデスクトップPCを購入しました.所有しているMacbook Air (mid 2012)に比べてcpuの周波数が2倍,コア数も2倍になったけれど,platex+dvipdfmxによるタイプセットの速度は約60%速くなったくらいで,期待していたほどではありませんでした.TeXがシングルスレッドで動作するようなので,cpuのコア数は速度向上に寄与していないみたいです.

そこでLaTeXのタイプセット速度を向上させる方法がないか検索をしてみたら,
  • precompiled preambleを用意して,preambleの読み込み時間を短縮する.
  • tikzのexternalライブラリを用いて,tikzの絵をいったんpdf化し,それを読み込むことでtikzのタイプセット時間を短縮する.
という方法が見つかりました.

ここでは前者を紹介します.後者も試してみたのですが,可換図を描くライブラリであるtikz-cdのtikzcd環境と相性が悪いらしく,うまく行かなかったため断念しました.


precompiled preambleの作成
howtotex.comというブログの「Faster LaTeX part IV: Use a precompiled preamble」という記事でpreambleをprecompileする方法が紹介されています.まず,preambleを動的な部分と静的な部分に分けます.動的というのは,文章を書き上げる際に書き換えの頻度が高いという意味くらいに捉えておけばよいようです.例えば\includeonlyを使って部分タイプセットしているときは,書き換える頻度が高いので,動的と見なします.
preambleの静的な部分と静的な部分を\endofdumpで分けます.つまり,texファイルの\begin{document}よりも前の部分は次のようになります.

% 静的な部分
...
\endofdump
%動的な部分
...
\begin{document}
私はglossaries.styを使っていますが,\endofdumpより前に\usepackage{glossaries}があるとエラーが起きました.glossaries.styは動的な部分に配置してください.

以下ではtexファイルの名前が「mydoc.tex」であるとします.ターミナルを開いてmydoc.texのあるフォルダに移動し,
eptex -ini -jobname="mydoc" "&platex" mylatexformat.ltx mydoc.tex
と打ち込みます.するとmydoc.fmtというファイルが作成されます.このファイルをprecompiled preambleと言っているようです.元の記事では最初のeptexの部分がpdftexで,&platexの部分が&pdflatexになっています.最初のeptexの部分はplatexでも大丈夫でした.
最後に,フォーマットファイルmydoc.fmtを読み込むために,mydoc.texの最初の部分に%&mydocと記述します.
%&mydoc
...
\begin{document}
mydoc.fmtファイルを作った後はpreambleの静的な部分をコメントアウトしてもいいですし,そのままでもmydoc.fmyのほうを読みにいってくれます.静的な部分を独立したファイルにしてもいいみたいです.

私は上記のコマンドを覚えられそうにないので,シェルスクリプト化しました.

特にtikzを使っている場合は,tikzの関連ファイルの読み込みに時間がかかっていたので,短縮されました.MacBook Air (mid 2012 corei-7)でタイプセットに11秒かかっていた200ページくらいの文章が9.5秒くらいにはなりました.但し,あくまでもpreambleの読み込み速度を上げているだけなので,その分の時間短縮にしかならないようです.つまり本文が長くなっても短縮される時間に変わりはほとんどありませんでした.逆に本文が短くなればなるほど体感時間を速く感じると思われます.

preambleが肥大化している人は試してみるとよいのではないでしょうか.

2015年6月2日火曜日

Windows8.1上でmozc_emacs_helper.exeをコンパイルする試み

NTEmacs Wikiのemacs-mozc を動かすための設定(mozc_emacs_helper コンパイル編)という項目を見たら,mozc_emacs_helperをコンパイルしてGoogle日本語入力と連携させることができるようなので試してみました.

上記のWikiの項目の最後にmozc_emacs_helper.exeのバイナリが置いてあったので,まずはそれを試したもののうまく行かず,自前でコンパイルしてみても,やはり結果は同じでした.という訳なので,コンパイルの詳しい手順は上記のWikiを参考にしてみてください.変えたところといえば,mozcのソースバージョンが変わっているので,提供されているパッチを当てずに,個々のファイルを書き直したくらいでしょうか.実際にmozc_emacs_helper.exeのコンパイルまではうまく(?)いきました.

cygwin上でmozc_emacs_helperの動作確認をしてみると,以下のような結果になりました.

$  echo -e '(0 CreateSession)\n(1 SendKey 1 hiragana)\n(2 SendKey 1 97)' | ./mozc_emacs_helper.exe
((mozc-emacs-helper . t)(version . "1.13.1641.0")(config . ((preedit-method . roman))))
((emacs-event-id . 0)(emacs-session-id . 1)(output . ()))
((emacs-event-id . 1)(emacs-session-id . 1)(output . ((id . "9022697100350878797")(mode . direct)(consumed . nil)(key . ((special-key . kana)))(status . ((activated . nil)(mode . hiragana)(comeback-mode . hiragana))))))
((emacs-event-id . 2)(emacs-session-id . 1)(output . ((id . "9022697100350878797")(mode . direct)(consumed . nil)(key . ((key-code . 97)))(status . ((activated . nil)(mode . hiragana)(comeback-mode . hiragana))))))
どうやら,直接入力からひらがなモードへの切り替えが出来ていないようです.windowsでmozc.elが使えると便利だと思ったのですが,これ以上何をして良いのかわからないので一旦断念します.


この方法は,コンパイル時にbrandingをMozcでなくGoogleJapaneseInputに書き換えたり,バージョンを書き換えたりしていたので,同様の方法がmacにも使えないかと浅知恵で試みたものの失敗に終わりました.誰か詳しい人が挑戦してくれないかな.

2015年5月13日水曜日

Emacs.appから起動したEmacsでシェルの環境変数を引き継ぐ

Macを使い始めて最初に不便に感じたことの一つは,Emacs.appをGUIで起動したときに,PATHなどのシェルの環境変数が引き継がれないことでした.

最近はターミナルから起動するのが習慣づいているので余り気にならなくなりましたが,環境変数を引き継ぐことが出来るようなので設定してみました.参考にしたのはsyohexさんのブログ「Life is very short」の記事


です.

exec-path-from-shell.elというパッケージを用います.
まずpackage.elを用いるか,もしくはこちらからexec-path-from-shell.elをダウンロードして,これをemacsが読み込める場所に置いておきます.

設定は次のようにしました.
;;;ターミナル以外から起動したときも,パスなどのシェル環境変数を引き継ぐ
(when (memq window-system '(mac ns))
     (require 'exec-path-from-shell)
     (exec-path-from-shell-initialize)
     (let ((envs '("BIBINPUTS" "TEXINPUTS" "INDEXSTYLE")))
       (exec-path-from-shell-copy-envs envs))
     )
ここでは,パス以外のシェル環境変数としてLaTeXで使うBIBINPUTSとTEXINPUTS, INDEXSTYLEの3つをenvsというリストにして,exec-path-from-shell-copy-envsという変数に設定しています.これでexec-path-from-shell-copy-envsに設定したシェルの環境変数も一緒に引き継いでくれるようになりました.

あとはQuicsilverでEmacs.appにキーボードショートカットを割り当てて,ターミナルなしで起動出来るようにしました.最近外付けSSDにUbuntu 15.04をインストールしたのですが,UbuntuでもEmacsをGUIから起動するとパスなどが引き継がれなくなってしまったようです.同様の方法を試してみたいと思います.

2015年4月3日金曜日

ketpicによる被覆空間の習作

被覆空間の勉強を少ししているので,平行移動などを図示してみようとketpicの練習中です.それっぽいものが書けるようになりました.

下の円環が底空間のつもりで,上の螺旋状のものが被覆空間の一部のつもりです.後は曲面に沿った曲線などを入れて平行移動を表現したいと思っています.
ketpicのコマンドマニュアルを見ると,曲面の境界の描画を指定することができるようなのですが,境界無しに設定しようとするとエラーが出てしまいます.
円環部分から境界を取り除きたいのですがどうするのでしょう.

追記:2015/04/06 習作その2
それっぽくなってきたものの,なんかイマイチな出来です.縦の直線はファイバーを表しています.Macbook Air 2012の2GHz core i7を使って計算すると輪郭だけなら4〜5分で済みますが,ワイヤーデータの計算も含めると35分程度かかりました.これをinkscapeに取り込んで加工してみるかな

2015年1月31日土曜日

直積写像

数学のノートを作っていて,通常の記法とは異なった意味で使ってしまっていた記号があることに気づきました.

通常の記法では,集合$A, B, X, Y$に対して,写像$f : A\to X$と写像$g:B\to Y$が与えられたとき,$f$と$g$の直積写像$f\times g : A\times B \to X\times Y$を$(a, b)\in A\times B$に対して
\[(f\times g)(a, b)=(f(a), g(b))\]
で定義します.

ところが私は今までノートの中では,$C$を集合とするとき写像$\varphi : C\to X$と$\psi : C\to Y$に対して,$\varphi \times \psi : C\to X\times Y$を,$c\in C$に対して
\[(\varphi \times \psi)(c)=(\varphi (c), \psi(c))\]
という意味で使ってきたことが多いように思います.この意味で使っていたため,直積写像に対応する写像を扱う場合にはわざわざ射影$\pi_1 : A\times B \to A$と$\pi_2:A\times B\to B$を用意して,$f\circ \pi_1 : A\times B \to X$や$g\circ \pi_2 : A\times B \to Y$のように定義域を揃えてから$(f\circ \pi_1)\times (g\circ \pi_2) : A\times B \to X\times Y$のように記述していました.

最近まで両者を混同して記述していることに気づいていませんでした.後者の意味の写像(定義域が揃っていて,$\varphi$と$\psi$を座標写像とするような写像)は$(\varphi, \psi) : C\to X\times Y$, $c\mapsto (\varphi(c), \psi(c))$と記述するのがよいようです.しかしこの記法でいくと,写像の族$f_\lambda : C\to X_\lambda$ ($\lambda\in \Lambda$)が与えられているときに写像$f : C \to \prod_{\lambda\in \Lambda}X_\lambda$で$f(c)=(f_\lambda (c))_{\lambda \in \Lambda}$を満たしているものは$f=(f_\lambda)_{\lambda\in \Lambda}$という表記になると思いますが,直積空間$\prod_{\lambda \in \Lambda}X_\lambda$の元$x=(x_\lambda)_{\lambda\in \Lambda}$を写像$x : \Lambda \to \prod_{\lambda\in \Lambda}X_\lambda$とみなしていたのと混同してしまわないかを危惧しています.

とりあえずこれまでに作ったノートの記述を洗い直さないといけないです.地味に辛いっす.

2015年1月7日水曜日

祝・柏教授定年退職

谷村省吾さんのTwitterを見て,柏太郎先生が定年退職されることを知りました.
学問が本気で面白いという気持ちが起こったのは,思えば柏先生のエネルギッシュな講義を聴いたことが発端のように思います.おめでとうございます.

未だに入門レベルの部分をうろうろしている状況ですが,勉強をこれからも継続していきたいと思います.場の量子論の演習書まだ買ってないやorz

あの人は今 The Stereo

The StereoはWikipediaによると1999年から2004年にかけて活動していたpop, rock and rollバンドだそうで,私はEmo関連で聴き始めました.3枚のアルバムを残していますが,どれも良作で特に1枚目の"Three Hundred"か2枚目の"No Traffic"がおすすめです.2枚目は友人に貸したら返ってこなくなったので買い直した記憶があります.
3枚目はほぼソロアルバムなので,バンド感が無くて少々期待外れでした.Last Days of Aprilなんかもそうですが,実質的にソングライティングしている人間が一人であっても,その人が全パート録音とかするとバンドよりも密度が薄まっているんですよね.
しかしもう10年以上経つのかぁ.

久しぶりにiTunesに入れていた曲を聴いてみたところ,メンバーの現状が気になったので検索してみました.フロントマンのJamie WoolfordはLet Goというバンドを結成して2005年にはアルバムを出し,2006年には来日していたようです.全然知りませんでした.WikipediaにはLet Goを継続中のように書いてあるのですが,音源は2009年に出したSplit CDが最後のようで,現状はどうなのかよくわかりません.とりあえずAmazonで中古アルバムが1円だったので購入してみました.視聴してみる限り,Stereoと同系列の音みたいです.こちらから視聴できます.
しかし相変わらず検索をかけにくいバンド名です.

The Stereoの2枚目"No Traffic"からの曲です.






2011年にFueled by Ramenの15周年記念のライブで演奏していたみたいです.




Let Goの曲のMVです.


ソロアルバムも出しているみたいです.