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パッケージを使いました。図画間結合については同記事に詳しい説明がなされています。

追記:2019/04/05:図画間結合がplatex/uplatexについてもサポートされたようで、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月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年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環境と相性が悪いらしく,うまく行かなかったため断念しました.

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年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日水曜日

あの人は今 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です.


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