C92:「簡約!?λカ娘(10)」が出ます

C92の一日目(2017/08/11(金))に、サークル「参照透明な海を守る会」から『簡約!? λカ娘 10』が出ます.場所は「東7た11b」です.

<簡約!? λカ娘 10> 内容紹介
第 1 章 モナドとひも @myuon_myon
第 2 章 矢澤にこ先輩と一緒にモナドモナド! @public_ai000ya
第 3 章 Coqダンジョン:底抜けの壺の夢 @master_q
第 4 章 IST(Internal Set Theory)入門(後編) @dif_engine
第 5 章 静的コード解析はいいぞ! @master_q
第 6 章 VeriFast チュートリアル(Bart Jacobs / 翻訳: @eldesh, @master_q)

第 4 章の『 IST(Internal Set Theory)入門(後編) 』が私の記事です.
前編から一年もあればさぞかしゆったりと充実した記事が書けるだろうと思っていましたが,調べる範囲を広げたり絞ったりして試行錯誤しているうちにわりと初歩的なところに内容がとどまった感じです.

表紙
去年に続いて表紙絵を描きました.Goのとき以来の両面表紙になりました.表が『けものフレンズ』のフルルの衣装を着たあずにゃんで,裏が『シンフォギア』の立花響のアームドギアをまとったイカ娘です.

イカ娘(10)表紙

【自分用メモ】ラテン語でiの上の点がなくて棒になってるやつ(伝われ)

■要約: \={\i}

■ラテン語なんかを(まったく知りませんが)latex の文書で引用しようとするとき,i の上の点が棒になってる文字が使いたくなりました.
最初は \={i} かと思ったのですがこれではiの上の点が消えてくれません.調べたら \={\i}を使えば良いようです.(終わり)

■参考:

% !TEX TS-program = platex
% !TEX encoding = UTF-8 Unicode
\documentclass{jsarticle}
\usepackage{verbatim}
\usepackage{minitoc}
\usepackage[utf8x]{inputenc}
\title{有限性について}
\date{}
\begin{document}
\maketitle
finite という言葉はラテン語の\textit{f\={\i}nis}から来てるそうです.
\end{document}

git で特定のファイルだけ取ってくる(自分用メモ)

git checkout fname

commit 前のファイルを git stash で上書きしてしまった!どうする?(自分用メモ)

要約
git stash pop が使えないか検討しよう.

背景
共同作業しているプロジェクトで,「どれどれ,最近の他の人の作業どうなってるかな」という軽い気持ちで git pull したあなたは pull が失敗することに気づいた.「よくわかんねえな」と呟いたあなたはさらに何気なくgit stash してしまう.とりあえずチームの作業を確認したあなたは,作業中だったエディタに向かった.そして異変に気づく:「あれ…このファイル,前回の commit の状態に戻されてるぞ.」そう,あなたが前回の commit から数日間の間に行った大量の変更は消し去られ,数日前の状態に戻ってしまったのだ.

対処
“stash”というのは,何かをこっそり隠すだとか取り除けておく,というような意味合いの言葉です.
その名前が示唆するように,git stash したとき,先程まで保存されていたファイルは(保存されていなかったとしたら流石にアウトだと思うので,エディタが自動的に保存しているバックアップなどを探すしかないでしょう)どこかに置かれています.

最後の stash で退避したファイルを戻すには git stash pop すれば良いようです.

習慣による回避
このような回復手段が git に備わっていることは大変素晴らしいことですが,驚いたり焦ったりすると利用可能な思考のリソースが削がれてもったいないので,日頃から些細な変更のあとにも躊躇なく commit するといいんだろうな~.

時間があるときに調べて書き足すこと
git stash list とかしたときに幾つか stash の結果が出てくるけど,0が一番新しいやつなのか?とかよくわからなかった.stash を複数回やってしまった場合などに回復するためには stash list で得られたリストの時系列をちゃんと知っておくべき.

latex でギリシャ語の入力(ver2)

■前回の記事では、\textomikron に\’ でアクサングラーヴを付けようとして上手く行かなかったが、LGR を上手く使えば、\’o に対するラップで行けるらしい。

% !TEX TS-program = platex
% !TEX encoding = UTF-8 Unicode
\documentclass{jsarticle}
\usepackage{verbatim}
\usepackage{minitoc}
\usepackage{textgreek}
\usepackage[utf8x]{inputenc}
\newcommand{\textgreek}[1]{\begingroup\fontencoding{LGR}\selectfont#1\endgroup}
\newcommand{\showvb}[1]{{#1}$\,\mapsto\,$\textgreek{#1}}
\title{金について}
\date{}
\begin{document}
\maketitle
金(ギリシャ語では{\textgreek{qrus\'os}}と呼びます)は(1)希少な鉱物資源であり(2)加工が容易であり、特に伸展性に富む(3)美しい;といった性質により、世界中で珍重されています。

\section{対応}

\showvb{a},\showvb{b},\showvb{c},\showvb{d},\showvb{e},\showvb{f},\showvb{g},\showvb{h},\showvb{i},\showvb{j},\showvb{k},\showvb{l},\showvb{m},\showvb{n},\showvb{o},\showvb{p},\showvb{q},\showvb{r},\showvb{s},\showvb{t},\showvb{u},\showvb{v},\showvb{w},\showvb{x},\showvb{y},\showvb{z}
\end{document}

■アルファベットの v だけは対応するギリシャ文字がないことに気づいた。

■追記(2017/07/11):田中美知太郎&松平千秋『ギリシア語入門』を読んでいたらシグマの小文字には二種類の字形(σ, ς )がありςは語尾にのみ使い,その他の場合にはσを用いると書いてあった.上の例ではソースに{\textgreek{qrus\'os}}と書いてあり語中と語尾の二箇所にsが出現しているが,ギリシャ文字に置き換えられる際に(σ, ς )の使い分けが正しくされている.便利だ.

latexのギリシャ語テキスト(しかもアクセント付き)の扱い

■(追記)こっちの記事のやり方のほうが良いと思う。

■latex の入力テキストとして、現在では当たり前のように utf-8 を使える。しかし、入力テキストにutf-8を使えるということと、latexの出力にそれを上手く反映させることはまた別の問題。
実際、アクセントのついたギリシャ語単語の表示なんかはまだ面倒、らしい。

■textgreek パッケージにより、\texalpha, \texbeta, \texgamma, …, \textchi などで個々の文字を入力することができるが、たとえばアクサングラーヴを\textomikron に施そうとしたら妙な方向にずれてしまってうまく行かない。

■仕方ないので、webページからその文字を直接取ってきて使った。というわけで、こんな感じのチグハグな処理をしている:

% !TEX TS-program = platex
% !TEX encoding = UTF-8 Unicode
\documentclass{jsarticle} 
\usepackage{minitoc}
\usepackage{textgreek}
\usepackage[utf8x]{inputenc}
\newcommand{\textgreek}[1]{\begingroup\fontencoding{LGR}\selectfont#1\endgroup}
\title{金について}
\date{}
\begin{document}
\maketitle
金(ギリシャ語では {\textchi}{\textrho}{\textupsilon}{\textsigma}\textgreek{ό}{\textvarsigma} と呼びます)は(1)希少な鉱物資源であり(2)加工が容易であり、特に伸展性に富む(3)美しい;といった性質により、世界中で珍重されています。
\end{document}

■結果がこうなれば成功:

■もっと簡単な方法があるのではないか感がある。

atom で non-greedy な正規表現を使う(自分用メモ)

■短い答え: ?をうまく使え。
古い論文をOCRで処理している。するとOCRのミスで
“apple’
というようなものが出てきた。これが意図通りなら問題ないが本来は
“apple”
となって欲しい。こういう例が随所にあるので一括して処理するために正規表現を使おうと思った。

■最初に
"(.+)'
を試したが、正規表現がgreedy、つまり、この表現にマッチする最大長の文字列を探してしまうため、得られたテキストデータが「一段落につき改行一つ」だったりすると大変困る。そこで、non-greedy なマッチをさせる ? をつかって
"([^"]+?)'
のようにした。ここで[^"]を使っているのは
“I have a pen,” he said. Soon after that, he stook the pen to the apple, and said “apple-pen’.
みたいな文章が全文選択されるのを防ぎたいから。

■non-greedy なオプションは他の正規表現エンジンでも使えることが増えてきてる気がするけど、atom 以外でどうなってるかは知らない。

VMware Tools の手動アップグレード(自分用メモ)

ヘルプページには初回用の操作も書いてあって説明が分岐して読むのが疲れるので、手動アップグレードの手続きを自分用にメモしておく。

$ sudo su
[sudo] uname のパスワード:
# mount /dev/cdrom /mnt/cdrom
# cd /tmp
# rm -rf vmware-tools-distrib
# ls /mnt/cdrom

VMwareTools-xxx-yyy.tar.gz が見えてるはず

# tar zxpf /mnt/cdrom/VMwareTools-x.x.x-yyyy.tar.gz
# cd vmware-tools-distrib
# ./vmware-install.pl

質問されたら全部Enterで返事しておく。

! No room for a new \dimen . 問題とその解決法(latex)

以前別のコンピュータで正常にコンパイル出来ていた latex ファイルが「! No room for a new \dimen .」というエラーメッセージを出してしまい、コンパイル出来なかった。
このメッセージでググったら、stackexchangeに対処方法が載っていた。:https://tex.stackexchange.com/questions/38607/no-room-for-a-new-dimen

パッケージが多すぎる場合にこの問題が起きるらしい。この場合、\documentclassの直後に
\usepackage{etex}
を入れれば良いそうだ。

msys2 上で ocaml をビルドしようとして失敗した記録

■真新しいmsys2上でomakeを使いたくなったが、周知の通り現在はWindows用のバイナリが配布されていない。
msys2上のocamlでomakeをビルドしようとしたが上手く行かない。そこで、msys2上でocamlをビルドしてみればいいのではないかというアホなことを考えて失敗した記録。

■準備。本当に必要かどうかはわからない。

$ pacman -S gamin #fam みたいなもの
$ pacman -S bison #yacc みたいなもの
$ pacman -S gcc git patch

■ocamlをビルドする

#ocaml を msys2 上でビルドする。
$ git clone https://github.com/ocaml/ocaml
$ cd ocaml
$ ./configure -host x86_64-w64-windows -cc "gcc -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wl,--stack,16777216"
$ make clean
$ make world
$ make install

ln: シンボリックリンク 'ocamlyacc' の作成に失敗しました: No such file or directory
make: *** [Makefile:606: install] エラー 1

■msys2でsymlinkを使う方法:msys2_shell.cmd をテキストエディタで編集し

rem To activate windows native symlinks uncomment next line
rem set MSYS=winsymlinks:nativestrict

となっているところを

rem To activate windows native symlinks uncomment next line
set MSYS=winsymlinks:nativestrict

に変更して保存する。そして、msys2_shell.cmd を右クリックして「管理者として実行」してmsys2のシェルを立ち上げる。

■手持ちの別のマシンでやったところ ocamlyacc のエラーは出なかったが omake のビルドで

$ ocaml configure.ml
Cannot load required shared library dllcamlstr.
Reason: dllcamlstr.so: dynamic loading not supported on this platform.
Cannot load required shared library dllunix.
Reason: dllunix.so: dynamic loading not supported on this platform.
File "./configure.ml", line 1:
Error: Reference to undefined global `Str'

となって止まってしまった。