はじめに
どうも,KeTCindyはいいぞおじさんと申します.本稿では,動的幾何学ソフトCinderellaを用いて作成された図形を${\rm\LaTeX}$に出力できるKeTCindyをDockerコンテナ上で動作させる方法を紹介します.
この記事に書いてあること
- KeTCindyをDockerコンテナ上で動かし,出力されたPDFファイルを閲覧する方法
この記事に書いていないこと
- WSL2やDockerの使用方法
- Windows 11 + WSL2以外でのCinderellaの動かし方
KetCindyとは
冒頭で述べたように,KeTCindyとは動的幾何学ソフトCinderellaを用いて作成された図形を${\rm\LaTeX}$に出力するためのシステムのことです.「GUIアプリケーションで作成した図形を${\rm\LaTeX}$に取り込む」というだけであればいくつか似たようなシステムは存在します.筆者が個人的に一番すごいと感じるのは,陰線処理された3次元図形を出力できることです(下の図のようなイメージ).
その他のサンプルや利用方法に関しては公式ホームページ1を参照してください.また,GitHubリポジトリ2にもたくさんの資料があります.
Dockerコンテナ上で動かす方法は公式ではサポートされていないようですが,Linux向けの導入方法をDockerfile
上で再現することで比較的容易に導入できたので紹介します.
動作環境
筆者が使用している環境です.これ以外の環境(特にWindows 11 + WSL2の部分)では,Dockerコンテナとして導入したGUIアプリケーションを動かすのに多少の苦労が伴うと思われます.
- Windows 11 Professional
- WSL2 (Ubuntu 22.04 LTS)
- Rancher Desktop
導入方法
導入は,大きく分けて以下のステップで行います.
-
Dockerfile
作成,コンテナ作成 - 初期設定
後者の初期設定はDockerfile
への記述でスキップできそうな気がしましたが,難しそうだったので断念しました.
よいアイデアがあれば教えてください.
Dockerfile
作成
以下のようなDockerfile
を作成します.
FROM texlive/texlive:latest
# 必要なパッケージをインストール
RUN apt-get update && apt-get install -y \
wget \
tar \
jq \
r-base \
maxima \
gcc \
evince \
pkexec \
sudo
# Cinderellaのアーカイブをダウンロードして解凍
RUN wget https://beta.cinderella.de/Cinderella-3.0b.2089.tar.gz -O /tmp/Cinderella-3.0b.2089.tar.gz \
&& tar -xzf /tmp/Cinderella-3.0b.2089.tar.gz -C /opt \
&& rm /tmp/Cinderella-3.0b.2089.tar.gz
# /opt/cinderellaにパスを通す
ENV PATH="/opt/cinderella:$PATH"
# keTcindyの最新リリースをダウンロードして解凍
RUN LATEST_RELEASE=$(wget -qO- https://api.github.com/repos/ketpic/ketcindy/releases/latest | jq -r '.tag_name') \
&& wget https://github.com/ketpic/ketcindy/archive/$LATEST_RELEASE.tar.gz -O /tmp/ketcindy-$LATEST_RELEASE.tar.gz \
&& tar -xzf /tmp/ketcindy-$LATEST_RELEASE.tar.gz -C $HOME \
&& rm /tmp/ketcindy-$LATEST_RELEASE.tar.gz
- KetCindyの動作には${\rm\LaTeX}$が導入されている必要があります.ここでは,DockerイメージとしてTeX Liveを導入しています.
- 次に,
apt-get
コマンドを用いて必要なパッケージを導入しています.wget
からjq
まではDockerfile
内に記載した後段の作業を行うため,r-base
からevince
まではKetCindyの動作のため,pkexec
とsudo
はKetCindyが内部で使用しているスクリプトを動作させるために導入しています. - 次に行うのはCinderellaの導入です.Cinderellaは
apt-get
コマンドでは導入できないため,公式ホームページ3から取得しています.バージョン番号の部分は適宜書き換えてください. - Cinderellaの導入後はパスを通しておきます.必須というわけではありませんが,あると便利でしょう.パスを通さずにCinderellaを起動する場合は
/opt/cinderella/Cinderella
とコマンドを叩いてください. - 最後に,KeTCindyのGitHubリポジトリから最新リリースを取得します.GitHubのAPIを利用して最新のタグを取得し,そのタグ名のリリースを取得するという流れになっています.
Dockerfile
を作成した後はDockerコンテナをビルドし,コンテナの中に入りましょう.入り方は自由ですが,筆者はVisual Studio CodeのRemote Container機能を利用しています.
初期設定
作成したコンテナにログインした状態で,ターミナル上で以下のコマンドを実行してCinderellaを起動します:
$ Cinderella
すると,Cinderellaの画面が立ち上がります4.
Cinderellaの画面から「File」→「Open」を選択し,~/Ketcindy-<tag名>/doc
以下にあるketcindysettings.cdy
を開きます.
「Lang」「Tex」「Grahpic」ボタンはクリックするたびに値が切り替わるので,好みのものに変えます.ここではそれぞれ「j」「lualatex」「tikz」としました.
真ん中の「TexLive」「Kettex」「Ketjs」は適切なものを選択します.本稿ではTeX Liveを使用しているので,「TexLive」を選択します.
右側の「Mkinit」「Update」「Work」については,この順にボタンをクリックすることで初期設定用のスクリプトが走ります.この環境では途中の「Update」をクリックしたときにエラーが発生しますが,特に気にせず実行してください.
「Work」ボタンまでクリックしたのち,先ほど「Update」ボタンクリック時にエラーが発生して行えなかった処理を手動で実行します.
$ cd ~/ketcindy-<tag名>/doc/fig
$ R --vanilla --slave < update.r
これで初期設定は完了です.
動作確認
初期設定時に生成されるワークディレクトリには,いくつかのテンプレートファイルが同梱されています.Cinderellaの画面から「File」→「Open」を選択し,~/Ketcindy<年月日>/templates
以下から適当な.cdy
ファイルを選択して開きます.
右上の「Figure」ボタンをクリックしてPDFファイルが開かれれば環境構築成功です.
最終成果物としてのPDFファイルだけでなく,途中の.tex
ファイルもtemplates/fig
以下に格納されており,取得可能です.
ちなみに09surfaceC.cdy
では「Scripting」→「Edit Scripts」からスクリプトエディタを開き,4行目のXyzax3data
関数の呼び出しにオプション引数a1
を加えると,座標軸に矢じりを生やすことができます5.Cinderella上の画面でも生成されたPDFでも矢じりが生えています.