TeXの覚え書き
BusyTeXすごい!
https://busytex.github.io/
SwiftLaTeXも良かったけど、これにはLuaTeXもあって将来性がありそう。
書体もアップロードから自分のものを使える。
画像はBusyTex上のXeLaTeX。

\afterasignment
\器 あいう\終
あ\器 いう\終
あい\器 う\終
あいう\器\終
あいう
こんなふうに字句(トークン)を一つずつ処理する自動器(オートマトン)を作る時、寸法がじゃまになる。
\器 あい\hskip10ptう\終
こういう時\afterasignment が使えるのかも。
ひとまず深入りはやめておこう・・・
「3匹の小TeX」の構想
TeXは一回の処理で多くの役割をこなす。
これは大きすぎて扱いづらいので、TeXを3回に分けて使うことにしよう。
・開TeXまたは展TeX
命令を展開した.texを出力
実現器:テコテフなど
・行TeX(未開発・未着手)
\break (改行命令)を入れた.texを出力
TeXの記録を解析すれば分かるはず。記録では動的計画法による行分割の候補位置が見れる。
・組TeX
PDFやDVIなどを出力
これをすれば、下線や割注がよい方法で出来るかも。
縦組みや2段組でのぶら下げ組などもより易しくうまく出来るかも。
そのうち自分が作るかもしれないけど誰かが作ってくれても嬉しい。
kpsewhichが古いフォルダを探してしまう
warning: kpathsea: configuration file texmf.cnf not found in these directories: /usr/local/texlive/2022/bin/universal-darwin:......
原因
brewのdvisvgmが干渉している
which kpsewhich
/usr/local/dvisvgm/bin/kpsewhich
解決法
sudo mv /usr/local/dvisvgm/bin/kpsewhich /usr/local/dvisvgm/bin/kpsewhich.bak
解決
which kpsewhich
/Library/TeX/texbin/kpsewhich
@mod_poppo さんのTeX言語Haskell移植と解説書はとても役立つ!
「Haskell プログラムとして動作させても、疑似コードとして読んで他の言語に移植しても構いません。」3頁
夢が広がる✨
注意点は\afterassignment などがない
でも十分使えそう!
@mod_poppo さんのTeX言語Haskell版は、TeX言語への理解のみならず、TeX言語処理器として実用的にも使えそうだと思っている。
例えばHaskellからWASM構築すればウェブ上でもTeX言語できて面白そう。
TeXLiveのminimalスキームがあるのに気づかずいつもbasicを使っていた。
minimalなら最小限の構成にできていい感じ。
ほとんど使わないものがたくさん詰まって導入に半日もかかるフルスキームは誰にもおすすめできない。
#テフライブ !
MiKTeXは、最小構成のTeX環境という思想的に優れたTeX配布体。
ただし今のところインテル用で、アップルシリコン機ではロゼッタ2が要る。ロゼッタ2が廃止となる2026年以降がやや心配。
tlenvが有ったんだ!やっぱりみんな考えることは同じ。
Nix、TeXLiveの運べる導入、tlenv。好みに応じて、どれもいい感じだ。
〇〇env系ツールtlenvでTeX Liveもインストールしてみた https://qiita.com/munepi/items/d632745f4fa311ecbde5 #Qiita @munepixyzより
plainTeXで使える\cfrac (連分数)
\def\cfrac#1#2{{\strut#1\over\displaystyle#2}}
(TeXブック(日本語版)199頁を参考に命令化したもの)
\pdfsaveposを使った線の行分割(デイビッドカーライルさん作)
各文字や糊に引くのではなく、組んだ後に\rlap,\llapで一気に引く。
2回処理が必要だけど、線の引き方としてはある意味最も正しい。
3行以上には非対応(手動なら\vadjust{\vskip1pt\hrule}とか)

miniltx は graphics-pln に入っている。
なぜか miniltx は tlmgr で入れられないが、graphics-pln を入れれば良い。
tikzなどの図も、表も、(時には数式も、)TeX文書内に直接書くのではなく、ページ番号無しの単体TeX文書にしてpdfcrop(やstandalone文書類)で独立したpdfにしておいたほうがいい。TeX文書ではpdfを図として読み込む。
そのほうが他の媒体で再利用しやすい。
依存関係も整理できる。
促音拗音の連続が詰まる日本語TeXがあり、これはアスキー版⽇本語TeXのjfmに由来する仕様だが、正しくは詰めない方がよいとされる。
参考文献:藤田眞作『LaTeX本づくりの八衢』67頁
luatexja, BXjscls, uplatex + ujarticle など(あまり正しく把握していないので適当に書いている)の最近の日本語 TeX 環境では、詰めずに正しく組まれるような気がするけれど、どの環境かで、詰まってしまうのかも知れない。
zrさんが教えてくれて、platex の文書類型(docmentclass)環境では今でも古い仕組みが使われて詰まった出力になるようです。
(https://x.com/zr_tex8r/status/1978446375839801422)
(https://x.com/zr_tex8r/status/1978447932555673669)
p(la)texは古すぎるようなので、少なくともup(la)tex、またはその他に移行するのが良さそうです。
Yusuke Terada さんが教えてくれて、platex で jarticle.cls を使った場合にの現象だと分かりました。
jarticle.cls で呼び出される min10.tfm の設計によるそうです。
文書類型なども詳しく分かってよかったです。
platex でも jsarticle.cls を使う場合は促音拗音の連続は詰まったりしないそうです。
fontspecで場所指定で書体を使う例
{\fontspec[Path = ./場所/]{書体.ttf}あいうえお}
LuaLaTeXやXeLaTeXで使える
LuaTeXなどで出てくる用語 TLT, TRT, RTT, LTL などは、ページ(または段落)、行、文字の各始まり位置(上:Top, 右:Right, 左:Left)を並べたもの。
英語はTLT、アラビア語はTRT、日本語はRTT、モンゴル語はLTL。
\discretionary{\rlap{。}}{}{。}のようにすると、ぶら下げできるみたいだ。
この間ひらいた本がぶら下げベタ組みで、この組み方も美しいなと思った。

%xetex
\font\ミン十="IPAexMincho" at 10pt\ミン十
\def\閉糊{\penalty0}%または\hskip0emなど
\parindent=0pt\hsize=50pt
あ\閉糊 い\閉糊 う\閉糊 え\閉糊 お\discretionary{\rlap{。}}{}{。}\閉糊 か\閉糊 菊\閉糊 け\閉糊 こ\discretionary{\rlap{。}}{}{。}\閉糊 さ\閉糊 し\閉糊 す\閉糊 せ\閉糊 そ\閉糊 さ\閉糊 し\閉糊 す\閉糊 せ\閉糊 そ
\bye
または、\rlap{。}\hskip10pt\penalty0などか。ただし段落末は\penalty0無しか。
難しい。
9 個を超える引数を取る命令を定義する方法
転載:stackexchangeのユーザー10274さんによる命令
\documentclass{article}
\def\NineteenArgs#1#2#3#4#5#6#7#8#9{%
\def\ArgsTenAndFurther##1##2##3##4##5##6##7##8##9{%
\def\ArgNineteen####1{%
####1##9##8##7##6##5##4##3##2##1#9#8#7#6#5#4#3#2#1%
}%
\ArgNineteen%
}%
\ArgsTenAndFurther%
}
\begin{document}
%1234567890123456789
\NineteenArgs abcdefghijklmnopqrs
\end{document}
前処理(Python)を伴うTeX日本語組版の例
これも一種の正しい方法だ。
元の日本語文内でTeXの命令を使いたい場合は更に工夫が必要になりそう。
#TeX #TeXLaTeX
ConTeXtでよく使われる\startナントカ \stopナントカ という命令の使い方は、とても理にかなっている気がしてきた。
{}を必要としないので字類番号(catcode)を複雑にしなくて済む。
{}を文字として直接入力する環境に移行しやすい書き方なんだ。
あれ、pdfcrop って pdftexに依存しているんだね。
PDFCROP 1.42, 2023/04/15
Can't exec "pdftex": No such file or directory at /nix/store...
scheme-infraonly では pdfcrop pdftex としよう。
