ラベル TeX の投稿を表示しています。 すべての投稿を表示
ラベル TeX の投稿を表示しています。 すべての投稿を表示

2025年2月18日火曜日

Typst(1)

奥村さんが Typst β版の新バージョンが出たことを話題にしていた。聞き覚えがあるような気もするが,早速インストールして試してみよう,というかこれは何をするものだ?

Typstは2023年に生まれた組版処理システム(PCで整形されたきれいな文書をつくるもの)だ。同種のものとして,ドナルド・クヌース(1938-)が1978年に開発したTeXや,レスリー・ランポート(1941-)がこれに続いて1984年に作ったLaTeXがある。まあ,Wordだってその仲間だ。咲子がLaTeXならば風葉がTypstだ。軽量マークアップ言語のMarkdown(2004)に数式表現が加わっている。同工のものとして日本発のSATySFy(2021)がある。

さて,ローカル版はhomebrewで簡単にインストールできる。sample.typ ファイルに対して, typst c sample.typ とすれば,sample.pdf が得られる。しかも,LaTeXよりずっと速い。typst w sample.typ とすれば,ソースコードを修正しながらこれが反映した結果のpdfファイルを確認できる。Typst.appにはWeb版もあって,登録すれば無料で利用できる。Sing In したところ,メールアドレスは登録済みだったので,昔いちど試してみたのかもしれない。もう忘れている。

LaTeXとTypstのコンバータがあれば便利だろうと,OpenAI o3-mini-high にやらせてみたところ,すぐにできたが,入力したtexファイルに問題があって,うまくいかなかった。そうこうしているうちに,ファイルコンバータのpandoc にはこの変換が組み込まれている(逆方向はダメ)ことがわかり,確かにうまくいった(\Big は\big に直す必要があった)。


図:Typst のアイコン(Typstのホームページから引用)

Q(koshix):
日本語と数式と図を含んだ組版システムとして,LaTeX(昔から)とTypst(最近)があります。この両者の特徴を比較して,どちらがお薦めかを教えてください。

A(Perplexity Pro):
LaTeXとTypstは、両者とも日本語、数式、図を含んだ文書の組版に適したシステムですが、それぞれに特徴があります。以下に両者を比較し、どちらがおすすめかを検討します。

LaTeXの特徴
長所
・長年の実績があり、学術界で広く使用されている
・複雑な数式や特殊文字を正確に表現できる
・異なる要素のスタイルを厳密かつ一貫して制御できる
・すべてのOSと互換性がある
・数式や図表の自由な配置編集が可能
・安定性が高く、バグが少ない
短所
・環境構築が複雑
・エラーメッセージが不親切で、デバッグが困難
・初心者には扱いづらい

Typstの特徴
長所
・文法がわかりやすく、特に数式の記述が直感的
・エラーメッセージが親切で理解しやすい
・環境構築が簡単
・処理速度が非常に速い
・レイアウトの調整が容易
・LaTeXからの移行がしやすい
短所
・比較的新しいシステムのため、LaTeXほどの実績がない
・英語のドキュメントしかない

おすすめ
どちらがおすすめかは、ユーザーの状況や目的によって異なります。
LaTeXをおすすめする場合
・学術論文を執筆し、広く受け入れられているフォーマットが必要な場合
・複雑な数式や特殊な組版が必要な場合
・長期的なサポートや豊富なリソースが必要な場合
Typstをおすすめする場合
・迅速な文書作成や編集が必要な場合
・環境構築の手間を省きたい場合
・より直感的な文法を好む場合
・処理速度を重視する場合

結論として、学術界での実績や豊富なリソースを重視するならLaTeXが、使いやすさや処理速度を重視するならTypstがおすすめです。ただし、Typstは比較的新しいシステムなので、今後の発展や学術界での受け入れ状況を注視する必要があります。

[1]Typst.app 公式ページ
[3]Typst入門(奥村晴彦)
[4]Typstの使い方(KumaROOT)
[5]Typstのはじめかた(monaqa)
[6]組版処理システムTypstの紹介(樫村博基)
[7]便利パッケージと使用例の紹介(Qiita,key_271)




2025年2月3日月曜日

ChatGPT o3-mini(1)

TikZのカメ(2)からの続き

1月31日にOpenAIから一般向けにリリースされた ChatGPT o3-mini である。すごく評判がいい。一般の二次関数の逆数の定積分や平方根の定積分は軽々と実行したが,これはどこにでも公式がのっているようなものなので検証の役には立たない。

こうなってくると人間のアイディアの方がAIの処理能力に追いつかないのである。とりあえず比較のためにカメのTIkZイメージを同じように作らせてみた。残念ながら一発でコードが通らなかったのだが,エラー部分を入れてみるとすぐに実行可能なコードがでてきた。その結果が下図である。立体的な表現ができるようになり,足と頭と尾の位置はそれぞれもっともらしいところにある。


図:OpenAI o3-mini-highによるカメのイメージ

以下が,OpenAI o1 にまとめさせたOpenAI o3-mini の概要だ。
OpenAIは、新たな推論モデル「o3-mini」をリリースしました。このモデルは、科学、数学、コーディングなどのSTEM分野での優れた性能を持ち、従来の「o1-mini」と比較して低コストかつ低遅延を実現しています。 

o3-miniは、関数呼び出し、構造化出力、開発者メッセージなど、開発者から要望の多かった機能をサポートしており、すぐにプロダクション環境での利用が可能です。また、推論の深さを「低」「中」「高」の3段階から選択でき、タスクの複雑さや速度要件に応じて最適化できます。ただし、視覚的なタスクには対応していないため、画像や視覚情報を扱う場合は「o1」モデルの使用が推奨されています。 

OpenAIのPlus、Team、Proユーザーは、本日よりo3-miniにアクセス可能で、Enterpriseユーザー向けには2月から提供が開始されます。o3-miniは、従来のo1-miniに代わり、より高いレート制限と低遅延を提供し、特にコーディングやSTEM関連の問題解決に適しています。さらに、PlusおよびTeamユーザー向けのメッセージ制限が1日50件から150件に増加しました。無料プランのユーザーも、メッセージ作成時に「Reason」オプションを選択することで、初めて推論モデルを試すことができます。

o3-miniは、特に技術的な分野での精度と速度を求めるユーザーにとって、有力な選択肢となります。ChatGPT内では、デフォルトで中程度の推論深度が設定されており、速度と精度のバランスが取れています。また、全ての有料ユーザーは、モデルピッカーで「o3-mini-high」を選択することで、より高度な推論を行うバージョンを利用できます。Proユーザーは、これらのモデルに無制限にアクセス可能です。 

 

\begin{tikzpicture}[scale=1]
% OpenAI o3-mini-high
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  % カメの甲羅: 大きな楕円にグラデーションシェーディング
  \shade[ball color=green!30!blue, opacity=0.9] (0,0) ellipse (3cm and 2cm);
  \draw[line width=1pt, color=green!80!black] (0,0) ellipse (3cm and 2cm);
  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  % 甲羅の装飾: ウロコ風の模様(小さな円)
  \foreach \pos in {(-1.2,0.5), (1.2,-0.5), (0,1), (-0.8,-0.7), (0.8,0.8)}
  {
    \draw[fill=green!60!black, opacity=0.8] \pos circle (0.3cm);
  }
  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  % カメの頭: 右側に配置
  \begin{scope}[shift={(3.5,0.5)}]
    \shade[ball color=yellow!80!orange, opacity=0.95] (0,0) ellipse (0.8cm and 0.6cm);
    \draw[line width=1pt, color=orange!80!black] (0,0) ellipse (0.8cm and 0.6cm);
    % 目の描画
    \fill[white] (0.3,0.15) circle (0.15cm);
    \fill[black] (0.33,0.15) circle (0.07cm);
  \end{scope}
  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  % カメの足: 前右、前左、後右、後左の4箇所に配置
  \foreach \x/\y in {(1.8,2.0), (-1.8,2.0), (1.8,-2.0), (-1.8,-2.0)}
  {
    \begin{scope}[shift={(\x,\y)}]
      \shade[ball color=green!50!yellow, opacity=0.95] (0,0) ellipse (0.5cm and 0.3cm);
      \draw[line width=1pt, color=green!70!black] (0,0) ellipse (0.5cm and 0.3cm);
    \end{scope}
  }
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  % カメの尻尾: 左側に配置
  \begin{scope}[shift={(-3.2,0)}]
    \shade[ball color=green!50!yellow, opacity=0.95] (0,0) ellipse (0.4cm and 0.2cm);
    \draw[line width=1pt, color=green!70!black] (0,0) ellipse (0.4cm and 0.2cm);
  \end{scope}
  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  % 背景装飾: 水しぶきのような曲線(オプション)
  \draw[blue!50, thick, decoration={random steps,segment length=3mm,amplitude=1mm}, decorate] 
        (-3, -2.5) .. controls (0, -3) .. (3, -2.5);

\end{tikzpicture}

2025年2月1日土曜日

TikZのカメ(2)

TikZのカメ(1)からの続き

ChatGPTのプログラムコードではじめて絵を描かせてみたのが2年前のマインドマップのつたない線画だった。半年前にはそのテクニックで,Claude 3.5 Sonnetによるカメを描いた。だいぶ進化していた。

この度,推論モデルが登場したので,再度TikZによる描画に挑戦してみた。参加メンバーは,(1) Chat GPT o1,(2) Gemini 2.0 Flash,(3) Qwen2.5-Max,(4) DeepSeek R1の4種類である。ただし,新登場の(3) Qwen2.5-Maxだけは推論モデルには該当しないことに注意する。


図:TikZによる各生成AIが保持しているカメのイメージ
(1) 左上:ChatGPT o1,(2) 右上:Gemini 2.0 Flash
(3) 左下:Qwen2.5-Max,(4) 右下:DeepSeek R1 

半年前よりは少し進化しているかもしれない。彼ら生成AIは,カメが甲羅と頭としっぽと四本の短い足から成り立っていることを知っている。また,緑色や茶色が基調色として採用されている。今回は,グラデ—ションや中間色の表現が登場した。DeepSeekR1は本体の足の取り扱いは残念なのだが背景の水や泡にまで思いが及ぶようになっている。


2024年6月30日日曜日

TikZのカメ(1)

マインドマップからの続き

去年,Chat GPTは,日本語を解釈してSVGやTikZで稚拙ながらそれらしいイメージを出力することができた。あれから1年,この度のClaude 3.5 Sonnetではどうか試してみた。まあ,少しだけ進歩しているかもしれない。

Q(koshix):
latexのtikzコマンドで、カメのイメージをなるべくリアルに描画するコマンドを示してください
Q(koshix):
亀の甲羅の模様を六角にして,手足には爪をつけて,しっぽはスルリと細く短くなるようにできますか?
Q(koshix):
以下の部分でエラーが出ました。
\foreach \x in {-1,0,1}
  \foreach \y in {-0.75,0,0.75}
    \draw[green!30!black, thick] (\x,\y) hexagon (0.5);

A(Claude 3.5 Sonnet):
申し訳ありません。エラーが発生したのは、hexagon コマンドが標準のTikZには定義されていないためです。このエラーを修正し、六角形を描画する別の方法を使用しましょう。

\documentclass{standalone}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}

% カメの体(甲羅)
\fill[green!50!black] (0,0) ellipse (2 and 1.5);

% 頭
\fill[green!70!black] (2.3,0) ellipse (0.5 and 0.4);

% 目
\fill[black] (2.6,0.1) circle (0.05);

% 足と爪
\begin{scope}
  \clip (-1.5,-1.2) ellipse (0.4 and 0.3);
  \fill[green!70!black] (-1.5,-1.2) ellipse (0.4 and 0.3);
  \fill[brown] (-1.7,-1.4) -- (-1.6,-1.5) -- (-1.5,-1.4) -- (-1.4,-1.5) -- (-1.3,-1.4) -- cycle;
\end{scope}

\begin{scope}
  \clip (-0.5,-1.4) ellipse (0.4 and 0.3);
  \fill[green!70!black] (-0.5,-1.4) ellipse (0.4 and 0.3);
  \fill[brown] (-0.7,-1.6) -- (-0.6,-1.7) -- (-0.5,-1.6) -- (-0.4,-1.7) -- (-0.3,-1.6) -- cycle;
\end{scope}

\begin{scope}
  \clip (0.5,-1.4) ellipse (0.4 and 0.3);
  \fill[green!70!black] (0.5,-1.4) ellipse (0.4 and 0.3);
  \fill[brown] (0.3,-1.6) -- (0.4,-1.7) -- (0.5,-1.6) -- (0.6,-1.7) -- (0.7,-1.6) -- cycle;
\end{scope}

\begin{scope}
  \clip (1.5,-1.2) ellipse (0.4 and 0.3);
  \fill[green!70!black] (1.5,-1.2) ellipse (0.4 and 0.3);
  \fill[brown] (1.3,-1.4) -- (1.4,-1.5) -- (1.5,-1.4) -- (1.6,-1.5) -- (1.7,-1.4) -- cycle;
\end{scope}

% 尻尾(より細く短く)
\fill[green!70!black] (-2.1,0) .. controls (-2.3,0.1) and (-2.3,-0.1) .. (-2.1,-0.1) -- cycle;

% 甲羅の六角形の模様(修正版)
\foreach \x in {-1,0,1}
  \foreach \y in {-0.75,0,0.75} {
    \draw[green!30!black, thick] 
      (\x+0.5*0.866,\y+0.25) -- 
      (\x+0.5*0.866,\y-0.25) -- 
      (\x,\y-0.5) -- 
      (\x-0.5*0.866,\y-0.25) -- 
      (\x-0.5*0.866,\y+0.25) -- 
      (\x,\y+0.5) -- cycle;
  }

\end{tikzpicture}
\end{document}

この修正版では、以下の変更を行いました:
1.hexagon コマンドの代わりに、六角形を直接描画するコードを使用しています。これは6つの点を指定して六角形を描くものです。
2.六角形のサイズと位置を調整して、カメの甲羅に合うようにしました。
3.その他の部分(体、頭、目、足、爪、尻尾)は前回のバージョンと同じままです。

この修正により、エラーなくコンパイルできるはずです。六角形の模様が甲羅全体に広がり、カメらしい外観を作り出しています。
コードをコンパイルして問題がないか確認してください。もし他に問題が発生したり、さらに調整したい部分があれば、お知らせください。例えば、六角形のサイズや配置を微調整したり、色を変更したりすることも可能です。

図:Claude 3.5 Sonnet が持っているカメのイメージ,修正前と修正後


2023年5月28日日曜日

留数計算

GPT-4とBardとPerplexityに実関数の広義積分を複素解析を使って解くようにお願いした。

問題は,$\displaystyle \int_0^\infty \dfrac{\sin x}{x} dx$  というものだ。で,三者全員がそれらしい導出過程を示しながら答えは$\pi$だと返してきた。どうもおかしいなと思って,Mathematicaで検算すると $\dfrac{\pi}{2}$だ。やはり,ちゃんと勉強せずに生成系AIを使うことはできない(何度か試すと正しい答えを返す場合もあった)。

ところが,最近(ここ数十年)留数計算なんかご無沙汰しているので,自分の方が計算の仕方が分からなくなってしまっている。AI以下である。インターネットで復習してから自分で結果を再構成してみた。まだよく理解できていないけれど概ね次のようなものだ。

図:2通りの積分路と極の位置(ChatGPTのtikzコードによる)

複素関数$f(z) = \dfrac{e^{iz}}{z}$の積分を考える。

経路 $C_1 :  \gamma_{-} + \Gamma' + \gamma_{+} + \Gamma$,
経路 $C_2 :  \gamma_{-} + \Gamma'' + \gamma_{+} + \Gamma$,
とする。

$f(z)$がコーシーリーマンの関係式を満たす正則関数であるならば,
$C_1$のように閉じた積分路の中に$f(z)$に極がない場合,$f(z)$の経路積分の値は,$I_1=\oint_{C_1} f(z) dz =0 $になる。
また$C_2$のように閉じた積分路の中に極がある場合は,$f(z)$の経路積分の値は,$I_2=\oint_{C_2} f(z) dz =2 \pi i \ \mathrm{Res} f(z)$になる。

$\oint_{C_1} f(z) dz = \int_{-R}^{-\varepsilon} \dfrac{e^{i x}}{x} dx + \int_{\Gamma'} \dfrac{e^{iz}}{z} dz +  \int_{\varepsilon}^{R} \dfrac{e^{i x}}{x} dx + \int_{\Gamma} \dfrac{e^{iz}}{z} dz =0$

第1項と第3項をまとめて,第2項と第4項は $z=r e^{i \theta}$と極座標表示して,
これから$\varepsilon \rightarrow 0, \ R \rightarrow \infty$の極限をとると,

$\displaystyle 2 i \int_0^{\infty} \dfrac{\sin x}{x} dx - \pi i + 0 = 0$

同様に積分路$C_2$については,$\mathrm{Res}(z=0) f(z) = 1$ なので
これから$\varepsilon \rightarrow 0, \ R \rightarrow \infty$の極限をとると,

$\displaystyle 2 i \int_0^{\infty} \dfrac{\sin x}{x} dx + \pi i + 0 = 2\pi i$

いずれにしても,$\displaystyle \int_0^{\infty} \dfrac{\sin x}{x} dx = \dfrac{\pi}{2}$

2023年3月26日日曜日

へのへのもへじ

ネット上で誰かが,「へのへのもへじ」より「へめへめくつし」がいいねといった。ホウ,そんなものがあったのか,と一瞬思ったけれど,そういえば昔いろいろと試していたような気もする。それほどビックリする話題ではない。

むしろ,テレビで外国人の平熱が37度台であると知ったことの方が驚きだ。これは筋肉が多い人について成り立つらしく,日本のボディビルダーに体温がやはり37度台であることを検証していた。どこまで正しいかわからないけれど。

そこで,へのへのもへじ出力プログラムを作ってみた。最初は,TeXのTikZで書いた。こんな感じ。ベジェ曲線が手軽に使えるのがありがたい。

\begin{tikzpicture}
\draw[gray, step=1, dotted] (0,0) grid (6,6);
\draw (2,5) node[below]{\Huge \${〜}\$};
\draw (2,4) node[below]{\Huge \${め}\$};
\draw (4.2,5) node[below]{\Huge \${〜}\$};
\draw (4.2,4) node[below]{\Huge \${め}\$};
\draw (3,3) node[below]{\Huge \${く}\$};
\draw (3.3,1.9) node[below]{\Huge \${つ}\$};
\draw [ultra thick] (1,5.5) .. controls (0.5,2) and (1.25,0.75)  ..(2,0.5);
\draw [ultra thick] (2,0.5) .. controls (3,0) and (5,0)  ..(5.5,2);
\draw (5.5,3) node[below]{\Huge \${々}\$};
\end{tikzpicture}


図1:LaTeXのTikZで書いたへのへのもへ字

これだと,文字を入れ替えるたびにコードを書き換えることになる。そこで,pythonで作り直そうとしてGPT-4に聞いてみたら,ほぼ1発で正しいコードが得られた。macOSのフォントの場所だけを指定すれば良かった。さらに,コマンドラインからひらがなを入力して文字に分解するところもGPT-4に教えてもらった。これからのプログラミング教育はどうなるのだろう?

問題は,pythonのpillowライブラリにはベジェ曲線がないことだ。おまけに,最初の結果は顔の輪郭は直線4本で表され,顔に被ってしまっていた。GPT-4はそこまで賢いわけではない。仕方がないので,自力でもがいて作った折れ線グラフで代用している。プログラミング教育って絶対にこうなるから。論理的ではない部分が多すぎる。

#! ~/bin/python


from PIL import Image, ImageDraw, ImageFont

import sys


def generate_henohenomoheji(brow: str, eye: str, nose: str, mouth: str, file_name: str):

     

    # 背景画像を作成

    image = Image.new('RGB', (600,600), (255, 255, 255))

    draw = ImageDraw.Draw(image)


    # フォントの設定

    font_size = 80

    font = ImageFont.truetype("/Users/koshi/Library/Fonts/BIZUDGothic-Regular.ttf", font_size)


    # へのへのもへじの要素を描画

    draw.text((160, 120), brow, font=font, fill=(0, 0, 0))  # 眉毛

    draw.text((340, 120), brow, font=font, fill=(0, 0, 0))  # 眉毛

    draw.text((180, 200), eye, font=font, fill=(0, 0, 0))   # 目

    draw.text((330, 200), eye, font=font, fill=(0, 0, 0))   # 目

    draw.text((240, 290), nose, font=font, fill=(0, 0, 0))  # 鼻

    draw.text((250, 380), mouth, font=font, fill=(0, 0, 0)) # 口

    draw.text((480, 240), "〃", font=font, fill=(0, 0, 0))  # 濁点


    # 顔の輪郭(ベジェ曲線ではない)

    contour = [

        (100, 100), (110, 150), (110, 200), (100, 250), (100, 300),

        (110, 340), (120, 380), (140, 410), (160, 440), (180, 460),

        (200, 480), (220, 490), (240, 500), (260, 505), (280, 505),

        (300, 500), (320, 500), (340, 495), (360, 495), (370, 490),

        (390, 480), (410, 470), (430, 460), (450, 440), (470, 410),

        (480, 380), (480, 360), (475, 340), (470, 310), (470, 280),

    ]

    draw.line(contour, width=5, fill=(0, 0, 0), joint="curve")


    # 画像の表示と保存

    image.show()

    image.save(file_name, "PNG")


moji = list(sys.argv[1])

brow = moji[0]

eye = moji[1]

nose = moji[2]

mouth = moji[3]

print(brow,eye,nose,mouth)

generate_henohenomoheji(brow,eye,nose,mouth, "heno-mohe.png")

図2:PythonのPillowによるへのへのもへ字

2022年7月8日金曜日

latexdiff

latexdiffは,texファイルの差分表示ソフトだ。

latexdiff main1.tex main2.tex > diff.tex
pdflatex diff.tex


下の例題に対する結果は次のようになる。
% main1.tex
\documentclass{article}
\title{ld}
\author{me}
\date{July 2021}
\begin{document}
\maketitle
\section{Introduction}
zzz
\end{document}

% main2.tex
\documentclass{article}
\title{latexdiff}
\author{me\and you}
\date{July 2021}
\begin{document}
\maketitle
\section{Introduction}
zzz zzz
\section{Section}
zzz
\end{document}

図:latexdiffの出力サンプル


2022年5月23日月曜日

2次元ルービック

Twitterで@jagarikinさんが,ルービックキューブの2次元表現のアニメーションに成功していた。さっそくこれををTikzで描いてみた。


図:2次元ルービックの概念図

(1) 3重の円を3個配置する。2つの円のひとかたまりの交点群は,9個の色つきマークの1組として表わされる。こうしてできた6つの組がルービックキューブの6面に対応し,各マークはルービックキューブのピースに該当する。ルービックキューブの回転操作はこの円に沿って,マークを組単位で回転移動することに相当する。

(2) 色つきマークの組の中心マークが6個あり,これがルービックキューブの6個のセンターピースに対応する。これらは相対的な配置が固定された不動点になるので,これを通る破線の円は動かす必要がない。外側の円と内側の円に沿っての回転だけを考えればよい。

(3) 実線でつながる3個のマークが8組あり,これが8個のコーナーピースに対応する。破線でつながる2個のマークが12組あり,これが12個のエッジピースに対応する。

(4) 内側の円に沿った回転操作にともなって,回転操作を行った円に囲まれた9個の組もピースの関係を保持するために同じ向きに回転する。外側の円に沿った回転操作にともなって,回転操作を行った円の外側にある9個の組もピースの関係を保持するために逆向きに回転する必要がある。


2022年3月24日木曜日

pandoc(3)

pandoc(2)からの続き

引き続き,markdown ファイル の活用例として,プレゼンテーション用のスライド作成に取り掛かる。見本(英文)は簡単に見つかって実行できたものの,日本語対応が面倒だと書いてある。あれこれ探してみても,出発点が RStudioの R Markdownというものが多いのだ。結局,日本語Markdownからスライド資料を作成する(Rcmdnk's Blog 2015)とBeamerスライドをMarkdownで簡単に作成(Tomokazu NOMURA's Web Page)を参考にした。

% kpsewhich beamerthemeSingapore.sty

% /usr/local/texlive/2021/texmf-dist/tex/latex/beamer/beamerthemeSingapore.sty

beamerのテーマファイルを上記のkpsewhichコマンド探し,これを編集して末尾に, \usepackage{luatexja} を加えることで日本語対応するということだった。設定ファイルに直接手を入れるのは気が進まないが,元のmarkdownファイルの1ページ目の yaml ヘッダで定義すれば十分であり,styファイルの修正は不要だった。その結果,次のコマンドで memo.md から memo.pdf というbeamerによるプレゼンテーションスライドが生成される。

pandoc -t beamer -o memo.pdf memo.md --pdf-engine=lualatex

memo.mdの1ページ目の yaml ヘッダは次のとおりであり,スライドの改ページは --- である。

---
title: "MarkdownからBeamer"
subtitle: "Pandocで変換"
author: "大阪教育大学 越桐國雄"
date: 2022/03/24
output:
beamer_presentation:
keep_tex: yes
latex_engine: lualatex
header-includes:
- \usepackage{bookmark}
- \usepackage{luatexja}
- \usetheme{Singapore}
---


図:mdファイルから生成したbeamerスライド

2022年3月23日水曜日

pandoc(2)

pandoc(1)からの続き

とりあえず,markdown ファイルから pdf ファイルが生成できるようになった。tex ファイルや html ファイルも生成できるので,その手順をまとめてみる。

(1) tex ファイルの場合

pandoc -s test.md -o test.tex

このtexファイルに対して,ドキュメントクラスを日本語対応に変更する。すなわち,\documentclass[]{article} → \documentclass[]{ltjarticle}として,コマンドラインから,lualatex test.tex とすれば,test.pdf が得られる。

置き換えを perl のワンライナーで実行すれば,シェルスクリプトに落とし込むことができる。

perl -pi -e 's/{article}/{ltjarticle}/' test.tex

(2) htmlファイルの場合

pandoc -s test.md -o test.html --mathml

pandoc -s test.md -o test.html --mathjax

どちらでもよいのだが,数式のまわりのhtmlは,mathjaxの方が少しだけスッキリしているかもしれない。

そこで,これらを zsh のスクリプトとしてまとめたものが次である。md.sh input option とすればよい。optionには{pdf, tex, html}のいずれかが入る。入力ファイルは input.md であり,拡張子より前の部分を引数に取ればよい。以下は md.sh の内容である。

#! /bin/zsh
case \$2 in
  "pdf")
    echo "pdf";
    iconv -f UTF-8-MAC -t UTF-8 \$1.md | pandoc -f markdown -o \$1.pdf -V documentclass=ltjarticle --pdf-engine=lualatex
  ;;
  "tex")
    echo "tex";
    pandoc -s \$1.md -o \$1.tex;
    perl -pi -e 's/{article}/{ltjarticle}/' \$1.tex
  ;;
  "html")
    echo "html";
    pandoc -s \$1.md -o \$1.html --mathjax
  ;;
*)
  echo "undefined"
  ;;
esac

2022年3月22日火曜日

pandoc(1)

マークダウン(2)からの続き

マークダウンの使い方をみていると,コマンドラインベースで各種のドキュメントを相互に変換することができる,pandocとの相性が良いらしい。ということで,pandoc をインストールしようとしたら,すでに homebrew で導入済みだった。念のために,brew reinstall pandocで,pandoc 2.17.1.1が入った。

変換できるファイルの種類のカテゴリーは,次のように多岐に渡る。Lightweight markup (.md),HTML (.html),Ebooks (.epub),Documentation,Roff,TeX (.tex),XML,Outline,Word processor (.docx), Interactive notebook (.ipynb),Page layout,Wiki markup (MediaWiki),Slide show (beamer),Data (.csv),Custom,PDF (.pdf)

厄介なことにマークダウンに関しては微妙に異なった方言が存在するのでなんだか意図した結果が出てこないと思っていたが,記法のミスだった。(1) 見出し,(2) 箇条書き,(3) 番号付き箇条書き,(4) 書体,(5) コード,(6) 数式,(7) 表,(8) 画像,(9) リンク,(10) 脚注 などが概ね機能している。見出しのレベルがまだはっきりわからない。番号付きリストの半角空白は3個にした。

iconv -f UTF-8-MAC -t UTF-8 test.md | pandoc -f markdown -o test.pdf -V documentclass=ltjarticle --pdf-engine=lualatex

上記が,macOS での pandoc の使用例である。入力ファイルは test.md,出力ファイルは test.pdf である。pdf 出力のためには lualatex を通す必要があることと,ファイルは標準の(macOS標準ではなく)UTF-8 形式にしておく必要があるのでiconvで漢字変換したものをpandocに食わせている(pdfファイルで濁点が分離してしまうのを防ぐらしい)。

.zshrcにパスを通して,md2pdf.sh という実行可能なシェルスクリプトを作ったので,引数を1つ指定すると,md2pdf.sh test1 のようにmdファイルからpdfファイルが生成できるようになった。

以下が,マークダウンファイル,test1.md の内容である。

# 見出し1(Title)
ここが段落の文章になる改行しても無視される 
空行があるためこの文章は第二段落となる

## 見出し2(Chapter)
これでは
あれでは

### 見出し3(Section)

#### 見出し4(Subsection)

- リストA
- リストB
  - 子リストB-a
    - 孫リストB-a-a
- リストC

- リストの文章1です。

  行の頭に半角スペースが二つあるので,
  リストの内部要素です。

- リストの文章2です。

行の頭に半角スペースがないので新しい段落です。

1. 番号付きリスト A
   1. 番号付き子リスト A-a
   1. 番号付き子リスト A-b
      1. 番号付き孫リスト A-b-α
      1. 番号付き孫リスト A-b-β
      1. 番号付き孫リスト A-b-γ
   1. 番号付き子リスト A-c
1. 番号付きリスト B

*italic* **bold** ***italic+bold***

\`inline_code\`

\`\`\`
display style code block
function test(a,b) {
return a+b;
}
\`\`\`
\$\int_{-\infty}^\infty e^{-\alpha x^2}dx = \sqrt{\frac{\pi}{\alpha}}\$

\$\$
\int_{-\infty}^\infty e^{-\alpha x^2}dx = \sqrt{\frac{\pi}{\alpha}}
\$\$

|項目1|項目2|項目3|
|---|---|---|
|りんご| 10円| 3個|
|みかん| 50円|10個|
|いちご| |売り切れ|
|バナナ|100円| 2本|

[リンク先 https://pandoc.org/ をクリック](https://pandoc.org/)

画像![ALT これはアイコンです](sample.png)も表示させられます。

Markdown エディタ NowType は Ito によって作られ た。 [^1]

NowTypeにおいては、次のような入力支援を行います。

[^1]: Atsushi M. Ito, プラズマ・核融合学会誌, vol. X, No. Y, 2020.

2021年11月20日土曜日

ギリシャ文字の斜体

統計力学のテキストつながりで,冨田博之先生のウェブサイトを見ていると,2021年度の大学入試共通テストの「物理」「物理基礎」の話題が出てきた。

数年前の阪大・京大の個別学力検査の物理で,波動(音)の問題の出題ミスが話題になった。その当時,日本物理教育学会の近畿支部長だったので,あれやこれやの対応に追われたような,それほどでもなかったような。

その出題ミスを指摘した人の一人が予備校講師の吉田弘幸さんであり,これが契機となって,入試制度や社会問題などにも関わって広く発言されている。

その吉田さんが,2021年度の共通テストの物理の問題の問題点を指摘した。特に,薄膜干渉の問題が出題ミスであると指摘しているのだが,これに対して冨田さんが反論している。これは,冨田さんの方に分があるわ。

ところで,吉田さんの些細な指摘の方が気になった。「数学や物理では変数 $X$ の変化を $\varDelta X$ で表します。$\varDelta$ はギリシャ文字の $\Delta$ を斜体で表したものです。ところが,この問題(第1日程)では斜体でない $\Delta$ を使っています」

これまで,自分がLaTeXで $\Delta$を出力する際は,斜体かどうかなんて気にしていなかったのだ。この点は吉田さんが正しいかもしれない。ということで,確かめてみると,ちょっと面倒なことになっていた。

\begin{equation} \alpha \ \beta \ \gamma \ \delta \ \epsilon (\varepsilon) \ \zeta \ \eta \ \theta (\vartheta) \ \iota \ \kappa \ \lambda \ \mu (\umu) \ \nu \ \xi \ o \ \pi \ \rho (\varrho) \ \sigma (\varsigma) \ \tau \ \upsilon \ \phi (\varphi) \ \chi \ \psi \ \omega (\varpi)\end{equation}

\begin{equation} {\rm A} \ {\rm B} \ \Gamma \ \Delta (\varDelta) \ {\rm E} \ {\rm Z} \ {\rm H} \ \Theta \ {\rm I} \ {\rm K} \ \Lambda \ {\rm M} \ {\rm N} \ \Xi \ {\rm O} \ \Pi \ {\rm P} \ \Sigma \ {\rm T} \ \Upsilon \ \Phi \ {\rm X} \ \Psi \ \Omega \end{equation}

\begin{equation} A \ B \ \mathit{\Gamma} \ \ \mathit{\Delta} \ \ E \ Z \ H \ \mathit{\Theta} \ \ I \ K \ \mathit{\Lambda} \ \ M \ N \ \mathit{\Xi} \ \ O \ \mathit{\Pi} \ \ P \ \mathit{\Sigma} \ \ T \ \mathit{\Upsilon} \ \ \mathit{\Phi} \ \ X \ \mathit{\Psi} \ \ \mathit{\Omega} \end{equation}

P. S. \umu は,単位のミクロン(μ)で使うための立体のミュー(オイラーフォント)であるが,blogspotの環境では出力できない。

2021年11月4日木曜日

TikZの反復と分岐

数理的なモデルと関連した 図を書くのにPowerPointはちょっと使いにくい。MathematicaJuliaでも表現力の自由度が足りない。そこで,PGF/TikZの登場となる。その機能を十分に生かそうとすると,TikZ環境でのプログラミングが必要であり,変数の処理や反復・分岐などが求められる。

PGF/TikZについては,Tantauの1300pを超えるマニュアルがあるのだけれど,これがまた詳しすぎて読みにくい。そんなわけで,日本語の適当な解説書を探すのだけれどこれがまたないのだった。そんなわけで,ボルツマン分布の概念図を作図しようとしていきなりつまづいた。

反復の方は\foreachを使うというところまではいいのだが,これに条件分岐を入れるとなんだかやヤコしい。しかも,堪え性のない老人は,最近の大学生のように真面目に調べずにネット情報を漁ってつまみ食いしようとするものだから,訳がわからない状態になるのであった。

小学生からのプログラミング教育は,いっそのことLaTeX+PGF/TikZにしたらいいのではないかとしみじみ思う今日この頃です。Pictogrammingと合体できないものか。まあグダグダ言いながらなんとか,解決方法の1つが見つかった。

/begin{tikzpicture}
\draw[step=2, dotted] (0,0) grid (13,2);
\foreach \x [count=\i]in {1,3,...,13}
{
\draw (\x,-0.5) node{\$(n_\i,u_\i)\$};
\foreach \y in {1,...,8}
\pgfmathsetmacro{\col}{ifthenelse(rnd*8 > \y,"white",ifthenelse(rnd*8 <\y,"gray","white"))}
\draw[fill,\col] (\x+rnd*1.6-0.8, rnd*1.6+0.2) circle(0.05);
}
\end{tikzpicture}

少し違うタイプの問題が出ても対応できる自信はまったくない,勉強不足なのであった。


図:TikZの例,\foreachとifthenelseとrndを組み合わせたもの


2021年9月19日日曜日

Detexify

たまに TeXの記号を探すのに苦労することがある。それを解決するのが Detexifyである。手書き入力したシンボルに似た形のTeXコマンドのリストを出してくれる。アプリとしてダウンロードすることもできる。シンボルの一覧もスクロールで一気に閲覧できるのでそれはそれでよいかもしれない。


図:Detexifyアプリ版のアイコンより

2021年9月3日金曜日

箇条書き

LaTeXの箇条書きで,起点の番号や記号を変更する必要がでてきたので調べた。
 
¥begin{enumerate}
\setcounter{enumi}{9}
\item い
¥begin{enumerate}
\setcounter{enumii}{13}
\item ろ
¥begin{enumerate}
\setcounter{enumiii}{1001}
\item は
¥begin{enumerate}
\setcounter{enumiv}{25}
\item に
%¥begin{enumerate}
%\item ほ
%\end{enumerate}
\end{enumerate}
\end{enumerate}
\end{enumerate}
\end{enumerate}

図:latexのenumerateサンプルの出力結果


標準では四重のネストが可能であり,アラビア数字,英小文字,ローマ数字,英大文字の準になっている。起点変更には \setcounter{}を使うが,ネストの階層に応じて,enumi,enumii,enumiii,enumiv を用いれば良い。

なお,アルファベットは26文字までに制限されるが,アラビア数字やローマ数字に制限はないように見える。


2021年3月12日金曜日

TikZの円弧

 TikZの円弧の描画方法が微妙だったので,まとめておく。

昨日のレンズの作図で苦労したのであった。\draw circle で,中心と半径を指定した状態ではは開始角度と終了角度の指定ができない。\draw arcを使うことになるが,このときは,中心座標$(x_0,\ y_0)$ではなく,開始点座標 $(x_i,\ y_i)$をいれることになる。中心座標はこれから,次式で計算される位置になる。一般的な楕円に拡張して半径を$(a,\ b)$とすると,

\begin{equation} \begin{aligned} x_0 &= x_i - a \cos \theta_i \\ y_0 &= y_i - b \sin \theta_i \end{aligned}\end{equation}

これが簡単な場合もあるだろうが,始点や終点や中心を決めたい場合は面倒ではないのか。

\ begin{tikzpicture}
\tikzstyle{every node}=[font = \large];
\draw (0,0) node[below left]{O};
\draw[->] (-4,0) -- (4,0) node[right]{$x$};
\draw[->] (0,-4) -- (0,4) node[above]{$y$};
\draw[step=1.0, dotted] (-4,-4) grid (4,4);
\draw (0,1) circle(1);
\draw (1,2) circle(1 and 2);
\draw (2,3) ellipse(2 and 1);
\filldraw[orange!50!white,semitransparent] (-2,-1) arc (135:-30:2);
\filldraw[cyan!50!white,semitransparent] (-2,-1) arc (135:210:2);
\filldraw[gray] (-0.59,-2.41) circle(1pt);
\filldraw (-2,-1) circle(1pt);
\draw[red, thick] (-3,-2) arc (135:-30:2 and 1);
\draw[blue, thick] (-3,-2) arc (135:210:2 and 1);
\filldraw[gray] (-1.59,-2.71) circle(1pt);
\filldraw (-3,-2) circle(1pt);
\node at (-2.5,3.5) {$x_0 = x_i - a \cos \theta_i$};
\node at (-2.5,2.5) {$y_0 = y_i - b \sin \theta_i$};
\ end{tikzpicture}


図 TikZでの円弧の描画方法


2020年7月14日火曜日

Tikz-FeynHand

奥村さんがtwitterで,TeXでファインマン・ダイアグラムをかくパッケージを紹介していた。TikZ-FeynmanTikZ-FeynHandだ。前者はLuaTeXが必要だったが,後者ではその制限がないために,より使いやすくなっている。LuaTeXがなくてもコンパイルはできたのだが,Error when using TikZ-Feynman package のような図になってしまうのだった。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

\documentclass[uplatex,a4j,10pt]{jsarticle}

\usepackage{fancybox,boxedminipage,ascmac}

\usepackage{amsmath,amsthm,amssymb,bm}

\usepackage{amsfonts,amscd,mathrsfs}

\usepackage{cases,physics}

\usepackage[dvipdfmx]{graphicx}

\usepackage[all]{xy}

\usepackage{tikz,tikz-cd}

\usetikzlibrary{shadows}

\usepackage{multicol}

\usepackage[version=3]{mhchem}

\usepackage{tcolorbox}

\tcbuselibrary{raster,skins}

\usepackage[compat=1.1.0]{tikz-feynhand} 

%\usepackage{tikz-feynman} 

%\tikzfeynmanset{compat=1.1.0}


\renewcommand{\labelenumi}{[\ \arabic{enumi}\ ]\ \ }


\setlength{\textwidth}{15cm}

\setlength{\oddsidemargin}{-1.0cm}

\setlength{\evensidemargin}{-1.0cm}

\setlength{\topmargin}{-2cm}

\setlength{\textheight}{24cm}


\begin{document}


\begin{center}

\textbf{tikz-feynman の使い方}\ (2020/07/12) \\

\end{center}


\begin{align*}

\int dx\; f(x) = \alpha 

\begin{tikzpicture}[baseline=(o.base)]

\begin{feynhand}

\vertex (a) at (-1,-1); \vertex (b) at (1,-1); \vertex (c) at (0,1);

\vertex [dot, blue] (o) at (0,0) {}; \propag [fermion, blue] (a) to (o);

\propag [anti fermion, blue] (b) to (o); \propag [fermion, blue] (c) to (o);

\end{feynhand}

\end{tikzpicture}

- 2i\,e 

\begin{tikzpicture}[baseline=-0.3cm]

\begin{feynhand}

\vertex (a) at (-1,-1); \vertex (b) at (1,-1); \vertex (c) at (0,1);

\vertex [dot, orange] (o) at (0,0) {}; 

\propag [photon, orange] (a) to (o); 

\propag [photon, orange] (b) to (o); 

\propag [photon, orange] (c) to (o);

\end{feynhand}

\end{tikzpicture}

\end{align*}


\vspace{1cm}


\begin{center}

\begin{tikzpicture}

\begin{feynhand}

\vertex [particle] (a) at (0,0) {e$^-$};

\vertex [dot] (b) at (2,0) {}; 

\vertex (c1) at (4,0.5); 

\vertex (c2) at (4,-0.5); 

\propag [fer] (a) to (b);

\propag [chasca] (b) to (c1);

\propag [chabos] (b) to (c2);

\end{feynhand}

\end{tikzpicture}

\end{center}

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 



図 tikz-feynhandの例


2020年7月6日月曜日

tikz-cd

Xy-picが世の中の標準であってこれでよいのかと思っていたら,tikz-cdがあった。TikZはよく使っているので,こちらのほうが自分にとっては便利かもしれない。早速 {tikzcd}Commutative diagrams with TikZ のサンプルコードを試してみると,ほとんど同じように使えた。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

\documentclass[uplatex,a4j,10pt]{jsarticle}

\usepackage{fancybox,boxedminipage,ascmac}

\usepackage{amsmath,amsthm,amssymb,bm}

\usepackage{amsfonts,amscd,mathrsfs}

\usepackage{cases,physics}

\usepackage[dvipdfmx]{graphicx}

\usepackage[all]{xy}

\usepackage{tikz,tikz-cd}

\usetikzlibrary{shadows}

\usepackage{multicol}

\usepackage[version=3]{mhchem}

\usepackage{tcolorbox}

\tcbuselibrary{raster,skins}


\renewcommand{\labelenumi}{[\ \arabic{enumi}\ ]\ \ }


\setlength{\textwidth}{15cm}

\setlength{\oddsidemargin}{-1.0cm}

\setlength{\evensidemargin}{-1.0cm}

\setlength{\topmargin}{-2cm}

\setlength{\textheight}{24cm}

 


\begin{document}


\begin{center}

\textbf{tikz-cdの使い方}\ (2020/07/05) \\

\end{center}



\begin{tikzcd}

  A \arrow[rd] \arrow[r, "\phi"] & B \\

  & C

\end{tikzcd}


\begin{tikzcd}

  A \arrow[r, "\phi"] \arrow[d, red]

  & B \arrow[d, "\psi" red] \\ C \arrow[r, red, "\eta" blue]

  & D 

\end{tikzcd}


\begin{tikzcd}

  A \arrow[r, "\phi" near start, "\psi"', "\eta" near end] & B

\end{tikzcd}


\begin{tikzcd}

  T

\arrow[drr, bend left, "x"]

\arrow[ddr, bend right, "y"]

\arrow[dr, dotted, "{(x,y)}" description] & & \\

& X \times_Z Y \arrow[r, "p"] \arrow[d, "q"] & X \arrow[d, "f"] \\

& Y \arrow[r, "g"] &Z

\end{tikzcd}


\begin{tikzcd}[column sep=tiny]

  & \pi_1(U_1) \ar[dr] \ar[drr, "j_1", bend left=20]

  &

  &[1.5em] \\

  \pi_1(U_1\cap U_2) \ar[ur, "i_1"] \ar[dr, "i_2"']

  &

  & \pi_1(U_1) \ast_{ \pi_1(U_1\cap U_2)} \pi_1(U_2) \ar[r, dashed, "\simeq"]

  & \pi_1(X) \\

  & \pi_1(U_2) \ar[ur]\ar[urr, "j_2"', bend right=20]

  &

  &

\end{tikzcd}


\begin{tikzcd}[row sep=scriptsize, column sep=scriptsize]

  & f^* E_V \arrow[dl] \arrow[rr] \arrow[dd] & & E_V \arrow[dl] \arrow[dd] \\

  f^* E \arrow[rr,     crossing over] \arrow[dd] & & E \\

  & U \arrow[dl] \arrow[rr] & & V \arrow[dl] \\

  M \arrow[rr] & & N \arrow[from=uu, crossing over]\\

\end{tikzcd}


\begin{tikzcd}

  A \arrow[r]

  & B \arrow[r]

  \arrow[d, phantom, ""{coordinate, name=Z}]

  & C \arrow[dll, "\delta",

  rounded corners,

  to path={ -- ([xshift=2ex]\tikztostart.east)

    |- (Z) [near end]\tikztonodes

     -| ([xshift=-2ex]\tikztotarget.west) -- (\tikztotarget)}] \\

    D \arrow[r]

     & E \arrow[r]

      & F

\end{tikzcd}


\end{document}


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

図 tikz-cdのサンプル

2020年7月5日日曜日

Xy-pic

現代思想の7月号の「圈論の世界」を買おうと思った。先週の土曜日に3ヶ月ぶりに,大阪上本町(県外)に出る用事があって,近鉄百貨店上本町店11階のジュンク堂をのぞいたところ,バックナンバーはあるけれど残念ながら当該号はなかった。発売日直後だったのが敗因か。

いろいろ評判はあるのだけれど,丸山善宏さんの記事も読みたいかなと思っていた。アマゾンでさくっと注文すればよいのだが,ぐずぐずしているうちに,谷村省吾さんの「物理学者のための圈論入門」とか森田真生さんの「哲学者のための圈論入門」がファイル置き場から出てきた。とりあえずこれを予習してからと考えて読み始めたところ,谷村さんのおすすめの,TeXで圈論のダイヤグラムがかける Xy-pic にたどりついた。

早速,みつかったサンプル(XY-pic(主に xymatrix)の使い方)を代入してみたら,さくっと動きました。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

\documentclass[uplatex,a4j,10pt]{jsarticle}

\usepackage{fancybox,boxedminipage,ascmac}

\usepackage{amsmath,amsthm,amssymb,bm}

\usepackage{amsfonts,amscd,mathrsfs}

\usepackage{cases,physics}

\usepackage[dvipdfmx]{graphicx}

\usepackage[all]{xy}

\usepackage{tikz}

\usetikzlibrary{shadows}

\usepackage{multicol}

\usepackage[version=3]{mhchem}

\usepackage{tcolorbox}

\tcbuselibrary{raster,skins}


\renewcommand{\labelenumi}{[\ \arabic{enumi}\ ]\ \ }


\setlength{\textwidth}{15cm}

\setlength{\oddsidemargin}{-1.0cm}

\setlength{\evensidemargin}{-1.0cm}

\setlength{\topmargin}{-2cm}

\setlength{\textheight}{24cm}

 


\begin{document}


\begin{center}

\textbf{xy-picの使い方}\ (2020/07/05) \\

\end{center}


\[

 \xymatrix{

  A \ar[r]^f & BCD \quad \quad

  A \ar[r]^-f & BCD \quad \quad

  A \ar[r]^(0.6)f_(0.65)g & BCD

} \]


\[

 \xymatrix{

  A \ar[r]^f & B \ar[d]^f

             & A \ar[r]_{g_1} & B \ar[d]_{g_1} & A \ar[r]|h & B \ar[d]|h \\

  D \ar[u]^f & C \ar[l]^f

             & D \ar[u]_{g_1} & C \ar[l]_{g_1} & D \ar[u]|h & C \ar[l]|h

} \]


\[

 \xymatrix{

  A \ar[r] \ar[d] \ar[rrd]

  & B \ar[rrd]|f \ar[d]|\hole \ar[rdd]|(.33)\hole & & \\

  C \ar[r] \ar[rrd] & D \ar[rrd]|(.33)\hole|\hole

  & A’ \ar[r] \ar[d] & B’ \ar[d] \\

  & & C’ \ar[r] & D’

} \]


\[

 \xymatrix{

  A \ar[r]^-f

  & B \ar@<-0.5ex>[r]_-f

  & C \ar@<1ex>[r]^-f

  & D \ar@<0.5ex>[d]^-f \\

  E \ar@<-0.3ex>@{^{(}->}[r]^-f

  & F \ar@{_{(}->}@<0.3ex>[r]^-f

  & G \ar@<0.5ex>[r]^-f \ar@<-0.5ex>[r]_-g & H \ar@<0.5ex>[u]^-g

} \]


\[

 \xymatrix{

  A \ar@/^18pt/[r]^f \ar@/_/[r]_g

  \ar@/_3pt/[d] \ar@/_12pt/[d] \ar@/_24pt/[d] \ar@/_48pt/[d] 

  & B \ar@/^/[d] \ar@/^54pt/[rd] & C \ar[l] \ar[d] \\

  D \ar@/_10pt/@{.>}[rr]_{\exists h} & E \ar[r] \ar[l] & F

} \]


\[

 \xymatrix@ur{

  A \ar[r]^f \ar[d] & B \ar[d] \\

  C \ar[r] & D & }

\]


\begin{equation}

\vcenter{

  \xymatrix{

   A \ar[r] \ar[d] & B \ar[d] \\

   C \ar[r] & D \ar@{}[lu]|{\circlearrowright}

} }

\hspace{2cm} \vspace{-1cm}

\fbox{

  \xymatrix@=5pt{

   \bullet \ar@{-} `d[dr] '[rrrd] `[rrrr] [rrrr] & &

   \bullet \ar@{-} '[d] [dd] \ar@{-}[rrdd] & & \bullet \\

   & & & & \\

   \bullet \ar@{-} `r[ruu] '[ru] `[rruu] [rruu]

   &  & \bullet &  & \bullet

   }

}

\end{equation}


\end{document}

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

図 Xy-picのサンプル