fc2ブログ

Online.tex 2020 #TeX野望 の伏線回収(くずし字連綿をやってみた話ほか)

これは,TeX & LaTeX Advent Calendar 2020の15日目の記事です。14日目はCareleSmith9さんでした。16日目はT.Streamさんです。
また,TSG Advent Calendar 2020の15日目の記事も兼ねています。14日目は昆布さんでした。16日目はうらさんです。

目次



1. Online.texで発表をした話

こんにちは,東大TeX愛好会Twitter)前代表のdomperorといいます。先日開催されたOnline.tex 2020で発表『ついに6年!東大TeX愛好会がお送りする「楽しむTeX/LaTeX」』をしました。




TeXはチューリング完全なプログラミング言語なので,だいたいのことはできる(雑),その楽しさをお伝えできたかと思っています。「だいたいのことはできる」と大判風呂敷を広げてしまったからには漢気を見せようということで,「TeXでこんなこと出来たらいいな」をハッシュタグ #TeX野望 で募集し,できそうなものはこのAdvent Calendarで実装する!,と発表しました。そこで,この記事を執筆している2020年12月15日朝9時までの段階で集まった #TeX野望 を,とりあえず集計していこうと思います(次節にて)。


さて,世の中には「できる」と「できない」の間に「できるけどかなり大変」という領域があります。#TeX野望 というハッシュタグのネーミングのおかげか,野心的な,「できるけどかなり大変」な需要を多数掘り起こすことができました。全部を実装するのは諦めました(目前に控えた医師国家試験の勉強をせねばなるまい……)が,ハッシュタグ #TeX野望 にご協力くださった全ての皆様にこの場を借りて感謝したいと思います。実装を期待されてハッシュタグを使ってくださったのに,私の力が及ばなかった皆様におかれましては,ご期待に添えず申し訳ございません。


2. #TeX野望 の集計

古い方から集計していきます。2020年12月15日朝9時までに次の18件の野望を書いていただきました。誠に感謝申し上げます。
・齋藤修三郎先生の将棋スタイルファイルで,.kifを直接張り込めるようにする
これは,いうても自作自演なので,また今度やる気がでたときにでもやろうと思います。

・もうすこし簡素に数式フォントを指定したい
0〜9の数字部分の指定だけでもまとめられるといいんですけどね。ベタですが,こんな感じで\DeclareMathNumbers をスタイルファイルにあらかじめ定義しておくと,
\def\DeclareMathNumbers#1{%
\DeclareMathSymbol{0}{\mathalpha}{#1}{`0}
\DeclareMathSymbol{1}{\mathalpha}{#1}{`1}
\DeclareMathSymbol{2}{\mathalpha}{#1}{`2}
\DeclareMathSymbol{3}{\mathalpha}{#1}{`3}
\DeclareMathSymbol{4}{\mathalpha}{#1}{`4}
\DeclareMathSymbol{5}{\mathalpha}{#1}{`5}
\DeclareMathSymbol{6}{\mathalpha}{#1}{`6}
\DeclareMathSymbol{7}{\mathalpha}{#1}{`7}
\DeclareMathSymbol{8}{\mathalpha}{#1}{`8}
\DeclareMathSymbol{9}{\mathalpha}{#1}{`9}
}
本文には
\DeclareMathNumbers{numbers}
とだけ書けばよくて,スッキリしそうです。

・TeXでRDBMS
東大TeX愛好会のゼミでTeX言語でデータベースを扱う話をしたことがあるのですが(→資料リンク),まともな速度で扱えるのは100行程度が限界で,戦意を喪失しました(普段自分は数百万行のデータベースを使っているので……)。この時使用したのは,datatoolパッケージというやつです。なお,ドキュメントによれば,コードの改善の結果datatoolはそれでも以前よりは高速化されたようです。もっと改善すれば使い物になるかもしれないです。

・ビジネスにする
ややっ,ご謙遜を,ラムダノート社さんはもう実現されているのではないでしょうか!?

・版面内での現在参照位置を取得する
\pdfsavepos は,nomagかつpapersizeオプションが必要だという「闇」がいつぞやのAdvent Calendarで話題でした(VoDさんの記事)。きえだ先生が書かれているということは,多分,mag入りでもチャント取得できるようにとか,そういう,もっとレベルの高い話なんだろうと想像します。ひえ〜

・表と図の位置をもう少し分かりやすくいじれるようになる
個人的には,hereパッケージとか,emathのmawarikomi環境とかがオススメだったりします。mawarikomi環境はemathマニュアルの6章に記載があります。

・MathJaxの勉強会
ちょうど良いくらいのテーマですし,東大TeX愛好会の月例会で今度扱ってみようと思います。サジェスチョン誠に有難うございます。

・TeXで3Dゆきだるま
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.8}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot3[surf,colormap/cool,samples=20,domain=0:2*pi,y domain=0:2*pi,z buffer=sort]
({(0.5+cos(deg(x)))*cos(deg(y+pi/2))},
{(0.5+cos(deg(x)))*sin(deg(y+pi/2))},
{sin(deg(x))-1});
\addplot3[surf,colormap/cool,samples=20,domain=0:2*pi,y domain=0:2*pi,z buffer=sort]
({(cos(deg(x)))*cos(deg(y+pi/2))},
{(cos(deg(x)))*sin(deg(y+pi/2))},
{sin(deg(x))+1}
);
\end{axis}
\end{tikzpicture}
\end{document}
PGFPLOTSは便利ですね!

・展開制御デバッガ
確かに,\tracingmacros の出力結果,読みにくいですよね……
どうやったら読みやすくなるんだろう

・#TeXグッバイ
私は来年から医者,つまり毎日待ち受けている電子カルテはMS Wordベースなわけですが,科研費の申請くらいはLaTeXでやって#TeXグッバイ しないように心がけようと思います。

・expl3 linter
expl3だとシンタックスハイライトとカッコの対応とりがやりやすそうです。
TeX言語だと\bgroup とか\begingroup とかのせいでカッコの対応とりすら困難ですから。
とはいえ,linterとなるとガッツリな開発になりそうですね

・LuaTeXの次の世代として、WebAssembly処理系を組み込んだもの
勉強不足で,WebAssemblyについてはじめて知りましたが,どうやら速そう。--shell-escapeで使っちゃおう

・CamlTeX-ja
SATySFiでよさそう?→SATySFi Advent Calendar 2020

・TeX/LaTeXと互換性の高いWeb向け文書システム
OverleafもCloud LaTeXも好きです。

・Erlang-on-TeX
これ,実装しようとしたのですが,Erlangの文法自体を理解・習得するのが今日までに間に合わなそうだったので,また今度やってみようと思います。

・くずし字連綿体組版(プロポーショナルでも嵯峨本形式でも)
「幸せなLaTeX者」として,LuaLaTeXを使ってやってみました。次節で扱います。

・XeLaTeXでちゃんと日本語
次節で扱いますが,XeLaTeX縦書きはとてもアレなので,現状リガチャの実現が……

・LaTeXで年賀状
3Dゆきだるまを載せて作りましょうかね!半月後にでも。


3. くずし字連綿を組んでみた話

くずし字連綿体は,ここからダウンロードできます。「嵯峨本フォントプロトタイプ」といって,「伊勢物語の一段と九段の全文を組むために必要と考えられる文字を選抜し,字游工房の協力を得て試作したもの」だそうです。連綿ってよく考えたらすごいですよね。日本語のリガチャですよ。今まで自分は,日本語でリガチャしている印刷物をみたことがありませんでした。まあ,実装してみたくもなるわけです。

とりあえず,
  • TeXの闇:skull:に突っ込みたい人:scream:は、(u)pLaTeXしましょう!
  • 欅坂46とかで盛り上がりたい人:relaxed:は、とにかくLuaLaTeXしましょう!
の格言(出典はこちら)に従って,LuaLaTeXすることにします。SagabonPrototype.otfを.texファイルと同じ階層に置いて,次のTeXファイルをコンパイルしてみます。
\documentclass[tate,a5paper,12pt,landscape]{jlreq}
\usepackage{luatexja-fontspec}
\setmainfont{SagabonPrototype}
\setmainjfont{SagabonPrototype}
\pagestyle{empty}
\begin{document}
昔、男、うひかうぶりして、ならの京、かすがの里に、しるよしして、かりにいにけり。その里に、いとなまめいたる女はらからすみけり。

この男、かいまみてけり。思ほえず、ふるさとにいとはした なくてありければ、ここちまどひにけり。

男のきたりけるかりぎぬのすそをきりて、うたをかきてやる。その男、しのぶずりのかりぎぬをなむきたりける。

かすがののわかむらさきのすり衣しのぶのみだれかぎりしられずとなむおひつきていひやりける。ついで\ \ おもしろ\ \ きことともや思ひけむ。

\ 

みちのくのしのぶもぢずりたれゆゑにみだれそめにしわれならなくに

\ 

といふうたの心ばへなり。昔人は、かくいちはやきみやびをなむしける。
\end{document}
すると,なんとリガチャ(連綿)はうまくいっていることがわかります。LuaLaTeX,スゴイ!
renmen_naive.png
しかし,デフォルトのJFMを使った結果,リガチャ(連綿)したところで文字が重なってしまっています。そこで,プロポーショナル対応のJFMを使うことにします。プリアンブルを次のようにチョットだけ変更します。
\documentclass[tate,a5paper,12pt,landscape]{jlreq}
\usepackage{luatexja-fontspec}
\setmainfont{SagabonPrototype}
\setmainjfont[YokoFeatures={JFM=prop},TateFeatures={JFM=propv}]{SagabonPrototype}
\pagestyle{empty}
これで,プロポーショナル組になります。すると,文字の重なりが解消され,次のように綺麗に出力されます。
素敵!JFMってなんぞや?という方はこちらの記事をご参照ください。

さて,「XeLaTeXでちゃんと日本語」も#TeX野望 に入っていたので,こちらも連綿が組めるかを検証してみましょう。しかし,
XeLaTeXでは,大まかには「文字を左に90度回転させた状態で横書きをして,用紙全体を右に90度回転させる」という仕組みにより,擬似的に縦書きを実現する。縦書き用クラスを指定するわけではない。(出典:xelatexhanaminvertical.sty
なので,どうやら厳しそうです。
\documentclass[a5paper,12pt]{article}
\usepackage[AutoFallBack]{xeCJK}
\usepackage{atbegshi}
\AtBeginShipout{%
  \global\setbox\AtBeginShipoutBox\vbox{%
    \special{pdf: put @thispage <>}%
    \box\AtBeginShipoutBox
  }%
}%
\setCJKmainfont[RawFeature={vertical}]{SagabonPrototype.otf}
\begin{document}
昔、男、うひかうぶりして、ならの京、...
\end{document}
上のコードで組んでみると,やっぱりリガチャされません。
「ちゃんと縦書き」はXeLaTeXのこれからの課題,ですかね。既に普通の縦書きが実在していて,私が見落としているだけだったら怖いので,もしあったら,教えてくださると喜びます。

今年もみんなで,Happy TeXing!
スポンサーサイト



コメントの投稿

Secret

プロフィール

domperor

Author:domperor
前東大TeX愛好会代表
オンコロジストの卵,ウクレレ,化学科,水泳,落語,beatbox,科学コミュニケーション,だより

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR