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

2024年6月30日日曜日

TikZのカメ

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

去年,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のサンプル

2020年6月22日月曜日

Griffithsのr

デヴィッド・J・グリフィスはポートランドにあるリード大学の物理の名誉教授。1964年にハーバードの物理の B. A. をとっている(修士も博士もハーバード)のでそろそろ80歳くらいだろうか。電磁気学や量子力学や素粒子物理学の教科書で有名だ。電磁気学の教科書といえば,J.D.ジャクソンが定番だとおもっていたが,ちょっとやさしめのグリフィスの教科書がよく使われているようだ。グリフィスの教科書では,電磁気学で多用される' をスクリプトの r を使って表している。確かにこれによって,式の見通しがだいぶよくなる。教科書をみると,MS WordユーザはKaufmann フォントを使え,TeXユーザは自分のホームページを参照せよとあった。見本をちょっと直して使えるようになった。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

\documentclass{report}


\usepackage[dvipdfmx]{graphicx}


\def\rcurs{{\mbox{\$\resizebox{.16in}{.08in}{\includegraphics{ScriptR}}\$}}}

\def\brcurs{{\mbox{\$\resizebox{.16in}{.08in}{\includegraphics{BoldR}}\$}}}

\def\hrcurs{{\mbox{\$\hat \brcurs\$}}}


\begin{document}


Here's a sample:


\$\resizebox{.16in}{.08in}{\includegraphics{BoldR}}\$


\begin{equation}

{\bf E} = {1\over 4\pi\epsilon_0}\int {\rho\over \rcurs^2}{\hrcurs}\,d\tau.

\end{equation}


\end{document}

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

図 スクリプトのTeXサンプル


2020年5月24日日曜日

LaTeX.css

LaTeX.cssというのは,MathJaxみたいなものかと思っていたが,よく考えるとそんなわけはないのであって,LaTeXの出力風のデザインをするスタイルシートなのであった。

図 LaTeX.cssによるスタイルの例

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://latex.now.sh/style.css" />
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
<header>
<h1>LaTeX.css</h1>
<p class="author">コシギリ クニオ <br> 2020年 5月 25日</p>
</header>

<div class="abstract">
<h5>概要</h5>
<p>そうなんです。これは,mathjax の類縁ではありませんでした。</p>
</div>

<nav role="navigation" class="toc">
<h3>目次</h3>
<ol>
  <li><a href="#getting-started">はじめに</a> </li>
  <li><a href="#conclusions">おしまい</a>
</ol>
</nav>

<main>
  <article>
    <h3 id="getting-started">はじめに</h2>

<br/>

<div>
$$(x+y)^{n}=\sum_{k=0}^{n}\left(\begin{array}{l}n \\ k\end{array}\right) x^{n-k}
y^{k}=\sum_{k=0}^{n}\left(\begin{array}{l}n \\ k\end{array}\right) x^{k} y^{n-k}$$
</div>
  </article>
</main>

</body>
</html>

2019年3月22日金曜日

MathJaxで数式表示(2)

MathJaxの数式表示で行番号がでないのがどうなのかを調べて試しているうちに,調子が悪くなってしまった。古い設定がどこかに残っているためなのか,Safariで数式が小さく表示される現象が生じている。再起動で回復しても,そのページを閲覧した後にはどこでも発症してしまう。どうしたものか。FirefoxやChromeでは問題ない。

今のヘッダーの設定では,標準で連番あり,"¥begin{equation*}"はだめ,"¥[ ¥]"で行番号なし,"¥tag{n}" で番号指定可になっている(¥はバックスラッシュを表す)。

\begin{equation}
\begin{aligned}
\sqrt{x}+\cos{y}\\
\dfrac{\log(x)}{e^x}
\end{aligned}
\end{equation}
\[
\sqrt{\dfrac{z^2+y^2}{x^2}}
\]
\begin{equation}
y= a x^2 + b x + c \tag{4}
\end{equation}
\begin{equation}
m \ddot{\bm{r}} = \bm{F}
\end{equation}

これで"¥bm{}"も使えるようになったのは次のヘッダーである。
参考にしたのは以下のサイトである。
Mathjaxを使ってBloggerで数式を書く
おもちゃ箱:Bloggerで数式を表示する
MathJaxの使い方(黒木玄)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
<script async='async' src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML' type='text/javascript'/>
<script type='text/x-mathjax-config'>
    MathJax.Hub.Config({
        HTML: [&quot;input/TeX&quot;,&quot;output/HTML-CSS&quot;],
        TeX: {
               Macros: {
                        bm: [&quot;\\boldsymbol{#1}&quot;, 1],
                        argmax: [&quot;\\mathop{\\rm arg\\,max}\\limits&quot;],
                        argmin: [&quot;\\mathop{\\rm arg\\,min}\\limits&quot;]},
               extensions: [&quot;AMSmath.js&quot;,&quot;AMSsymbols.js&quot;],
               equationNumbers: { autoNumber: &quot;AMS&quot; } },
        extensions: [&quot;tex2jax.js&quot;],
        jax: [&quot;input/TeX&quot;,&quot;output/HTML-CSS&quot;],
        tex2jax: { inlineMath: [ [&#39;$&#39;,&#39;$&#39;], [&quot;\\(&quot;,&quot;\\)&quot;] ],
                   displayMath: [ [&#39;$$&#39;,&#39;$$&#39;], [&quot;\\[&quot;,&quot;\\]&quot;] ],
                   processEscapes: true },
        &quot;HTML-CSS&quot;: { availableFonts: [&quot;TeX&quot;],
                      linebreaks: { automatic: true } }
    });
</script>
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -