自己顕示欲の開放治療所

erg, programming and something.

別名:Laughing and Grief 雑記

Latin and Greekは習ったこともない

真面目な記事の他、特定の方には不快と思われる事柄に関して言及を行うことがあります。ちょっと頑張りますが、Blog内で解決できなかった場合要望があれば別ページに技術記事は書き直します

fewerfloatpagesパッケージの概略

この記事は TeXLaTeX Advent Calendar 2020の19日目の記事です。

adventar.org

18日目はtamuratakさんでした。

Github Actions 上の Windows に TeX Live をインストールする · GitHub

自動組版に3つの最適化有り。1つは段落内の行バランス最適化、1つはページネーションの最適化、1つは……とまあそんなそんな感じで、フロートの配置アルゴリズムというのは結構な方が関心を持つトピックですね。

www.latex-project.org

MittelBach氏は16年の『Alice goes floating』や17年の『Through The Looking Glass — and what Alice found there …』など、ページネーションとフロート配置についての研究を行ってきました。『Effective Floating Strategies』とか学術向け資料感の強い題のものもありますが、まあ長いこと取り組まれているということです。14年とかのfigureやtableについて言及したものもそうかもしれないけれど私は追い切れていないです。

そんな氏の成果物として2020年fewerfloatpagesパッケージが登場しました。TUGBoat41号にも載っています。というかパッケージのドキュメントPDFがまんまか?

このドキュメントはtexdoc fewerfloatpagesとかで読めると思うので、興味が出たら↑のpublicationsと合わせて読むとよい、というかここ以後の文を読むよりオススメします。

まずはフロートについて軽く。

図表などを配置するときに「htb」のように「できればこの位置に配置してほしいな」順を書いたことがありますか? なくてもいいんですが、フロート要素が書かれた記述位置、この位置をアンカーとして、置ける場所に置かれる、それがフロートです。変な指定をすると容易にぶっとんだ位置にいきますが、とりあえず組版システムはアンカー位置を基準に、指定場所に置けるかどうかチャレンジをしながら最終的な位置を決定します。このアルゴリズムによっては、本来挿入されて欲しい位置に入らず、次のページにデデンと配置されてページ数が増え、論文の規定ページ数に収まらなくなり、……ということも起こり得るワケです。

軽く例が出ましたが、フロート配置アルゴリズムへの要望の多くは、「もっとページ数が少なくて済むように置いてほしい」という方向になります。ページ数がたっぷり使える富豪組版方針ならとりあえず次のページにフロートも本文も送ってしまえば良いケースが多いでしょうし、それはそう。

アルゴリズムとして、まず置こうとして、ダメなら待機リストみたいのに突っこんで待機リストから放出できる位置まで保持、みたいな方法が素朴である程度は上手くいくんですが、待機リストにどんどん待機が貯まっていくと放出時に大変そうというのは直感で感じませんか? 素朴だとどんなことが起こるかというと、待機リストの先頭にあるヤツが条件1をのフロート候補位置に求めるとして、待機リスト2番目のヤツが条件2をフロート位置に求めるとします。フロート候補位置が条件2を満たすけれども待機リスト先頭は条件1待ちだからスルー、とかそんなことも起こるかもしれません。

この辺はちゃんとパッケージの説明読みましょう。ひだるまはざっとしか読んでいないので。

ざっくりとしたユースケースとして「これ以上フロートページは増やせないとき、前の位置に戻ってねじこめないか、すでに置き終わっているフロート含めて探索しなおす」ようなことを行います。

うっかり、フロートが大量な文書などは用意できなかったのでbefore-afterはないですが。

\usepackage{fewerfloatpages}

パラメータ指定

このパッケージはあらかじめ指定したパラメータを基に、「この範囲内だからヨシ!」「超えてるので再計算や!」みたいにフロート位置を考えるパッケージなので、とりあえずビルドしてみて気に入らなかったらこれを弄ることでユーザは調整を行う。

\setcounter{floatpagedeferlimit}{<number>}

\setcounter{floatpagekeeplimit}{<number>}

\renewcommand\floatpagekeepfraction{<decimal>}

floatpagedeferlimitはフロート待機列に置いておける期限ですね。1を指定してあると、1ページ以上は待機リストを持ち越せずフロートページを作成します。フロートを記述した場所から離れられる限界ページですね。

floatpagekeeplimitfloatpagedeferlimitの逆というか、待機リストに置いて最適な配置を伺うページ数の期限です。deferlimitがこの値より少ないと意味見られることもない、という解釈でいいのかな。あと、p指定のフロートが来た時点でこの値に関係なく置かれるっぽい。

一個だけrenewcommand\floatpagekeepfraction。まあまず、ナンチャラfractionという「その要素がページに占めてよい割合」みたいな数字がイロイロあって。あとtopnumberとか置いていい数の上限を決める数値もあります。\floatpagekeepfractionはデフォルトで\textfraction、これはテキストを置いていい最小割合とオソロです。テキストを置ける領域も置けないならフロートも置けないよね的な理解でいいんだろうか。まあ再定義できます。

floatpagedeferlimitが1のときは優先順位低まるはず。

pitfallの避け方と書いてある。

\usepackage[checktb]{fewerfloatpages}

再配置のときの挿入箇所とフロートのサイズが合わない(けど入れる)とき警告が出たりする。

\usepackage[addbang]{fewerfloatpages}

!によるちょっと強制力高めな位置指定があるんですが、こいつが効くようになる、でいいんだろうか。

完全に理解しているので自動チェックをしなくても手動でフロートのパラメータを置ける人

\usepackage[nocheck]{fewerfloatpages}

挙動のトレース

\usepackage[trace]{fewerfloatpages}

オプション付きで呼ぶと、文書のビルド時にベロベロっと動作を教えてくれます。


「いかがでしたか?」ってつけたくなるくらい何も理解できていない概略になった気がするので、ちゃんとドキュメント読もうね。

明日はwtsnjpさんです。

GPDWINMAX購入と環境整備

この記事はWORDIAN Advent Calendar 2020 17日目の記事ということにします。

adventar.org


GPDWIN2が、リボンケーブルが切れてヒンジが破損したため、コーディングやくりえいてぃぶしないお遊び環境の移行先としてGPDWINMAXを購入した。他候補として、OneGXPro、GPDWIN3があったが、最低確保したい画面サイズ、ストレージの容量を鑑みてGPDWINMAXにした。加えてLANポートがある。

www.gpd.hk

SSDは自前でNVMeストレージを交換できる(保証シールを剥がすことになる)ので、WesternDegitalのSN750を 別途購入。片面実装なら大体大丈夫のようだが、速度よりもコストと容量、あと他の人間の動作確認記事があったので。

ハードウェアいじいじ

早速開封してキーボードをチェック。数字、記号の列がめっちゃ細い。GPDWINや2ではもっと小さかったが、本体サイズが小さいのであんまり気にならなかった。全部親指でアクセスできる距離だったし。 ただ、このサイズになるとラップトップ的用途が望まれ、そうすると気になりどころ。 それはまあギリギリ良いとして、チルダとタブキーの小ささよ。US配列系で日本語モードは大体Alt+~なわけで、これはやりづらい。シンプルなかな漢字変換システムの出番ですよ。

画面保護シール貼りは失敗した。風呂でやらなかったのが敗因か。

さて、こいつ。マウスに使えるジョイパッドの他にマウスパッドがある。タッチパネルディスプレイと合わせて3種の移動、クリック手段があることに。なんだコイツ。

ジョイパッドの位置はGPDWIN、GPDWIN2での位置逆転の果て、アナログスティックがマウスパッドを挟み左に並ぶ構造に。実際両手で使ってみるとしっくりきた。こういうとこは本体サイズによってよいポジションが変わるので感動した。

じゃ、クリーンインストールしよっか

ポチポチ押しながらWindowsの設定。コルタナくん忘れたころにこういうところで見かけて吃驚するよね。

GPDのサイトからドライバ一式を落としてきて適当なストレージなりに保存して、マシンの認証を済ませ、Windowsのユーザ紐付けも一応済ませ、Windows Updateをかける。20H2か。まあ大丈夫やろ。

アプデと再起動を行い、Windows(C:)を右クリック。「ツール」でデフラグを行う。ついでに「スケジュールされた最適化」は切る。

「設定」から「更新とセキュリティ」、右側の「回復」、そして「このPCを初期状態に戻す」、ここまで流れるようにやる。

キレイになったWindowsの起動、設定を確認したらスイッチオフ。

NVMe換装

GPDWINMAXをひっくり返し裏面のネジを外していく。シールされてる真ん中部分も外す。さらば保証。 側面の2つも外す。

爪を溝につっこみ、頑張って一周。パコっと外れるかと思ったが、バッテリが筐体カバー側に貼り付けてある。まあ作業には支障なさそうだったのでそのまま。

SSDは結構見やすい位置にあった。NVMe固定ネジの他、ファンにも挟まれていやがる。一応ファンもカパっとあける。

微妙に横からスライドさせるように入れないと差さらない。まあ何とかなったんでヨシ!

再起動とソフトウェア類導入

問題なく起動確認。容量はちゃんと1.81TB。やったぜ。 「ディスク」を開いて空いている領域をCドライブに統合。Dとかにしたいところなんですが、インストール可能なのがCドライブ限定のソフトをやる予定があるからね……。

先ずはFirefoxを入れます。……ちゃうねん。Chromium Edgeがかなり良くできてることは分かってんねん。 ただFirefoxでアカウント紐付けているサービスが結構あるんで。

ところで、「Alt+~」が打ちにくいって話しましたね。ええっそんなキーボード事情からでもシンプルにかな漢字変換ができる入力システムがあるんですか?

ということで、SKKのインストール。 SKK FEPを入れました。「Ctrl+j」や「l」、「q」はそこそこ普通に打てるんで、これは勝ちです。

Free Wi-Fiしかない環境で起動することも考え、WARPもインストール。CloudflareとFree Wi-Fiどっちが信じられるっていったらCloudflareだよなあ。

そしてNotoFontをフルセットで入れる。いつ何語のフォントが無くって困るか分からないからね。

個人で契約しているGoogle Workspace EnterpriseのGoogle Driveをシームレスに利用するため、Google Drive File Streamもインストール。Windowsはこの辺楽ですね。

cppcryptfsもインストール。Google Driveに上げるファイルは、すごくどうでもいいのを除いて暗号化して上げているので。

ゲーミング(主にADV用)PCとしてのセットアップが大体終了。

My DocumentsはOneDriveに紐付いているのでセーブデータの移行はゲームによるがあまり考えなくて良かった。着実にゲーム機に向かってないか?Windows

個人でAH Formatterを買いました

ついでなのでXSL Advent Calender 2020の10日目の記事ということにしておこう。技術的な話はしません。

adventar.org

XML-FO&CSS組版ソフトAH Formatter V7.0の改訂6版が出ました。

別に待ってたワケではないんですが、この度購入しました。デスクトップのスタンドアロン版です。流石に。 普通に買ったし、マーケティング行為かと言われると難しいところ。まあ業務で使っているから他より習熟しているという利点があります。

とはいえ、それでも中々趣味で買うには敷居が高いお値段。私も金銭的に余裕があるかと言われれば、大学時代の後輩に真剣に心配される程度の自転車操業。とはいえ、ただちに死ぬレベルではないので、誰かのブログ記事ではありませんが脳を騙せばポチッとできてしまった。

何らかの方法でドキュメントをページドメディア化して出力する趣味を持っているという前提です。 あまり得意でないソフトウェアをいじくりまわしながらイベントでの頒布に間に合わせるコストを考えてみます。東京都の最低賃金、まあブレるし計算も面倒なので仮に時給1000円としましょう。 準備期間は3ヶ月ほど、そのうち執筆やPDF生成に使える時間は、そうですね、平日は帰宅後1時間、休日は4時間として、1h*5+4h+4h=13hが週、52hが月、3ヶ月では156hです。技能職ではない時給1000円でも156000円。これはそこそこお値段のする組版ソフトを買えてしまう値段です。時間をお金で買って、トントンくらいの結果が得られる。これは買うしかないですね。

勿論現実には執筆時間と組版時間がまるまる削減できるワケがなく、組版ソフトを買ったところで別の言語で云々唸っていることは変わらなかったりする。ただまあ、「ソフトが合わないなら別の代替を探すことにコストを割いた方が互いに有益なケースもある」ということは忘れないようにしたいですね。そして何らかの方法でドキュメントをページドメディア化して出力する趣味を持っている人間はどんなソフトを使っていてもドキュメントをページドメディア化して出力するのにコストを費やすんだな。

唐突にBGM10個紹介するやつ

唐突に。

成人向けWindowsゲームサウンドラック縛り。嫌悪感を感じたり対象年齢に達していない人は作品タイトルで調べないようにしませう。

別にこれが私的ベスト10とかそういうのではない。例えば、『Quartett!』 の「咲き誇る季節」をここで紹介するのはちょっと違うかな、とかそういう感じ。『Clover Day's』タイトル画面の「Clover Day's suite」ではクリアごとに音が増えるが何番目が好みとかあるけどOPアレンジだから今回は無しとか。持っている中からなので偏りはあるが、バラけるように選んでみた。

「幻影」

作曲 編曲 作品名 収録
水月陵 水月陵 Peace@Pieces! Peace@Pieces! ORIGINAL SOUNDTRACK

杏EDテーマですが、まあボーカル曲でないし。ゲームプレイによる評価の補正もありますが、ゲームBGMなんだからゲームと含めてなんぼ、とも思う。幸せいっぱいのというよりは最悪の自体は避けられて良かったねという感じの空気で流れるのもあり、非常にしっとりとしている。それでええんかお前、それがお前の幸せでええんかと。伸ばした手が空を切る感じが出た曲だと思います。

サントラを買うようになり、ピアノメイン曲だと低ビットレートでは露骨に割れることが分かり、DAPに入れていた全楽曲の保存音質を上げることを決意させた。

「ふと口ずさんでいた故郷の歌」

作曲 編曲 作品名 収録
樋口秀樹 樋口秀樹 天使の羽根を踏まないでっ 天使の歌声 天使の羽根を踏まないでっ オリジナルサウンドトラック

天使の羽根を踏まないでっ』、「中二が大人しい朱門作品」として有名な作品ですね。 日常シーンBGMの1つ。「どこでかかっていたか思い出せないけど耳に覚えがある」というのも良いBGMの1つだと思う。

声優として出演されている子太明さんのメッセージが「俺が出てるぜ」なのは笑った。もう新らしい作品で聴けないのだと思うと本当に寂しい。

WHITE-LIPSの主題歌はこの前WHITELIPS VOCAL COLLECTION3が出るまでこの初回特典サントラでしか入手できなかったはず、多分*1

「Granfia」

| 作曲 | 編曲 | 作品名 | 収録 | |-------------|--------|-----------|--------l| |神保伸太郎 |神保伸太郎 |月光のカルネヴァーレ | 御伽の国の綺想曲 月光のカルネヴァーレ Original Soundtrack |

勝ち確BGMとして名高い(勝てるとは言っていない)。バトルBGMですが、緊迫感とかは感じさせず、「ゾーンに入った」、そんな感じ。

これは贔屓目ですが、他のNitro作品サントラと比べ頭1つ抜けた完成度を誇る。ゲームやってなくても聴けば「面白いゲームだったよね」って記憶を捏造できるレベル。実際にやると戦闘描写のところでプレイ続行できる人とそうでない人がでるっぽいですが。

夏の大三角

作曲 編曲 作品名 収録
ryo ryo 素晴らしき日々〜不連続存在〜 素晴らしき日々〜不連続存在〜 サウンドトラックCD

終ノ空楽しみですね。サクラノt……いえ、止めておきましょう。 「夜の向日葵」は敢えて選曲からは外しています。

ryoさんの作曲。 序章の雰囲気とかにとてもあっている、爽やかかつ一抹の寂寥感を感じさせる曲です。

すば日々、ニコニコ動画なネタもちょこちょこある。モンどう見てたっぽい。

すば日々のサントラは作曲者クレジットあるんですが、サクラノ詩には無くて作曲者当てゲームをしなければならないんですよね。『春ノ雪』段階では多分ryoさんがBGM担当になってると思うんで、春ノ雪で聴ける曲はryoさんじゃないかな。確証はないんで信用はしないでください。

また若干入手しにくくなってきている『しゅぷれ〜むキャンディ』のOP曲のオリジナル版はあの人が歌っていますね。

「orz〜真・失意体前屈〜」

作曲 編曲 作品名 収録
井原恒平 しゅきしゅきだいしゅき!! しゅきしゅきだいしゅき!! Olriginal Sound Track

作品名を『好き好き大好き』と間違えてはならない。どっちが業が深いかは難しそうだが。

脱力系BGM。割と直球のタイトルで、聴いてみると情景がバッチリはまっている。「真」でない方よりがっくり来ている感じがある、

EDテーマ曲「しゅきしゅきだいしゅき!! 愛のテーマ」はオマージュ曲としての完成度がかなり高い。オリジナリティとの配分がいいんですよ。

あと、Irisの別作品『ちいちゃくないもんっ!』のOP曲も凄い完成度の曲なので是非聴いてみてほしい。

「Dynamic equilibrium」

作曲 編曲 作品名 収録
藤田淳平 藤田淳平 猫撫ディストーション 猫撫ディストーション コンプリートサウンドトラック

この曲のタイトルがこれであることは考えさせられる。曲自体は落ち着いていて軽やか、

猫撫のサントラは大体どの曲を選んでも好きの値があまり変わらなかったりする。

友人は「World eyes」が最推し。この作品におけるWorld Eyeってアレだよな……って思いながら聴くと違った味のある曲です。

Exodus追加楽曲を除いた世界観とのマッチ具合が高いサントラ。いや、世界からの脱出をするのだからあれも合っていると言えなくもないか。

ギャングスタ・リパブリカ』はもっと明らかに作りの違う曲があって、サントラのクレジット見たら藤田さん以外にも載っていて納得があった。

「Glass dust」

作曲 編曲 作品名 収録
PKタートルズ PKタートルズ イブニクル ALICE SOUND ALBUM Vol.27 Evenicle

作品内では砂漠あたりのマップBGM。砂漠にも色々あるわけですが「ああ、こういう砂漠か」とイメージの助けをしてくれる曲。

どうでもいいですが、ボーカルアレンジ最初に聴いたときは「解釈違いだな」と思いました。 別の曲だと思うと普通に好き。

「Party time!」

作曲 編曲 作品名 収録
ms-jacky&QUARITY ms-Jacky&QUARITY キラ☆キラ Cross The Music キラ☆キラ&DEARDROPS Original Soundtrack

OVERDRIVEの、BGM楽曲から抜き出して選ぶのは私にはハードルが高くて、作品に練り込まれてしまった曲を取り出して捉えるのは難しい。他の作品がそうではないとかの話ではなくって。

よく分からない焦燥を裏に抱えたままの開放感のある曲というか、追い立てられるようなハイテンションの曲。

特典小説届いてしまったしいい加減『MUSICUS!』をやらなければ。でも怖いんですよ。しかしこれ以上何かが終わってしまう前にやらなければならない。

「ともしびのうた」

作曲 編曲 作品名 収録
ファクトリーノイズ&AG ファクトリーノイズ&AG 遥かに仰ぎ、麗しの 遥かに仰ぎ、麗しの 初回特典サウンドトラック

BGMの出来と楽曲の音質は分けて考える必要はありますし、時代としての要求スペックも踏まえる必要がありますが、非常に勿体無い。ばっちし切なくなれるはずのメロディで別の意味で悲しくなる。BGMというよりボーカルなしの楽曲に近い。というか後にボーカル付きが出るし。

「街角のドーナツ屋さん」

作曲 編曲 作品名 収録
BURTON BURTON しゅがてん!-sugarful tempering- しゅがてん! -sugarful tempering- Original Soundtrack

ちょっと仰々しい感じもあるものの、石畳な町並みの活発な通りとかそんな感じがある曲。 一応書いておくと作品の舞台はケーキ屋。喫茶店でもないよ。 CLEARRAVEはサントラ販売機会をもっと増やしてほしい。

*1:まあ初回特典サントラにもWHITE-LIPS曲は入っていなかった『シュガーコート・フリークス』なんかよりは入手可能性はあったけども。

Inkscapeのバージョン1.0で引数が変わりMakefileを書き換える必要がありそう

ドキュメントで、SVG画像をInkscapeで変換処理を噛ませるようにしていて、それをmakeでやっているプロジェクトはちらほらあるらしい。

Inkscapeは2020年5月7日に.0となり、旧バージョンから引数が整理されているらしい。普段触らないアプリケーションなので違っていたら記述は直します。 とりあえず、Makefileに書かれている引数設定が inkscape --help で出てくるものと違っていたので多分メジャーバージョンアップデートによる整理だと思う。

雑にGistにモンキーパッチを書いてみた。

そもそもInkscapeとmakeでSVG処理するのはそろそろ切り換えるタイミングかもしれない。

LwDITAのDITAVALの書き方

Creating Intelligent Content with Lightweight DITAをPODで購入したので読んでいる。 いや、電子書籍版を前に買ったのだが(Kindleでない)、実用に耐えないデスクトップアプリからしか読めなかったので あらためてAmazon PODから買った。

ChairのCarlos氏が書いているので、内容の正確性は信用してよいだろう。 DITA-OTなどの実装側の挙動はまた別の話として。

記事タイトルの内容より雑感の方が多い。

www.oasis-open.org

LwDITAについては塩漬けしている同人誌でそれなりに詳しく書く予定なので、ここではざっくりと書く。 DITAについては「DITA 超入門」なんかを見て。 で、「XMLナウでヤングな世代はあんまり扱わない」 「DITAは構造化文書初学者がこれから取り組むには仕組みも要素の数もヘヴィ」 「(GFM程度の)Markdown+−\alphaの表現力で書けるくらいの入門セット」大体そういう感じ *1

で、+\alphaな要素である、DITA機能リミテッド版の1つにフィルタリングがある。 通常のDITAでは、<p product="<任意>" ></p>のように書くところ、 XDITA(XML版LwDITA)では次のように書く。

<p props="<任意>"></p>

MDITA(Markdown版LwDITA)とHDITA(HTML5版LwDITA)では次のように書く。

~~~html

フィルタリングされる文章......

~~~

フィルタリング処理はDITAと同じくDITAVAL(XML)ファイルに書いていくのだが、通常DITAではここは

<val>
<prop att=product"  val="<任意>" action="exclude"  />
</val>

のように書く。で、LwDITAでは次のようになるワケだが。

<val>
<prop att="props"  val="<任意>" action="exclude"  /> <!-- XDITA -->
<prop att="data-props"  val="<任意>" action="exclude"  /> <!-- MDITA, HDITA -->
</val>

Creating Intelligent Content with Lightweight DITAで出てくるまで、フィルタリング機能をLwDITAで使うことは考えていなかった。 (Fullweight )DITAと併用できるという特性を考えればこういう書き方になるのは「それはそう」という感じだが、 「Lightweight DITA SC | OASIS」ではtopicとmap以外の書き方についてはほどんどなく、 「DITAのこれは制限されたこれが使えるよ」のような書き方なので、LwDITAからのDITA初学者が学ぶには大分厳しい。 lntroductionとは書いてあるが、DITAを知っている人間に向けたLwDITA Introductionのように感じた。LwDITAのコンセプトが 「DITA沼の浅いところを作ってそこからひきずりこみたいわね」であることを考えると*2どうなんだそれは。 DITA機能で特徴的なconref, keyref, フィルタリングといったものを使わない場合、Markdownのドキュメントツールとして GitBookやPandocより優位な点をLwDITAに見出すのは苦労すると思う。

2018年にLwDITAの仕様が1.0になったのだが、まとまった資料はCreating Intelligent Content with Lightweight DITAと、 DITA on Diet くらいに感じてしまう。DITAっぽい機能については Creating Intelligent Content with Lightweight DITA の方を読む必要があるが、 個人が学習をはじめる本としては5000円弱はちょっと躊躇らうのではなかろうか。

github.com

まあ、コミュニティ内部では色々回っているのかもしれないが。

DITAオーサリング対応ソフトやDITA対応のCCMSなどではLwDITA対応もされているようだが、 LwDITAから学ぼうとする人間がいきなりOxygenを買うかというと微妙なところでは。 XMLを書かない手段としてのMarkdownの話の延長でXMLエディタを買うだろうか。

P.S. DITA on Dietは私訳版を作成している。今進捗半分くらいだけど。CC-BY-SA 4.0なので公開は可能なはず。でもOje Mediaというところ、Twitterアカウントは活動している様子だけれど、WebsiteはGoDaddyのやつが出てくるんだが、どうなっているんだ。

P.S. もうちょっと直接的なサンプル群が公開されているな。

github.com

LwDITAの流れについての資料は「インテリジェントコンテンツにおけるAXの役割と考察 (関根, 2016)」もある。

ipsj.ixsq.nii.ac.jp

*1:XMLの直接記述をちょっと避けられてもXSLTなどは既存資産を活用するには必須になってくるから、 ライティングはともかくオーサリングの人間の負担はそこまで減らない気もする。

*2:[要出典]

ライトウエイト構造化と記法の種類数

この記事はEWBアドベントカレンダー2019の23日目の記事です。

adventar.org

EWBとRe:VIEWの記法の数

書籍用マークアップEWBとその影響を受けて作られたRe:VIEWは、軽量マークアップとしてはかなり記法の数は少ないものとなります。

組版トリガ或いはプリプロセッサマークアップを外すと、そのほぼ全てが2種類程度に収まってしまいます。EWBでは

//トリガ[オプション]{値 //トリガ}

//トリガ[オプション] 値

なので実質1つですし、Re:VIEWでは

@<inline>{値}


//block[オプション]{
値
//}

と、リスト記法程度です。テーブルは、ここではテーブルブロック内での独自の話とさせてください。

例えば強調のインラインは

It is //g{Emphasis//g}.

It is @<em>{Emphasis}.

となります。つまり、専用の記法ではなく汎用の記法となります。

Markdownでは強調は*Emphasis*ですね。Markdownに汎用記法がないという主張ではありません。それこそHTMLタグがそうなってしまうので。

あ、最初に書き損ねましたが、今回はお気持ちだけでエビデンスなしでやっていきます。

easybooks

github.com

Markdownの記法を使いつつ、必要な箇所はRe:VIEWで書いてコンパイルまで持っていけるようにするツールだそうです。 MarkdownでHTMLタグを使うところをRe:VIEWが担うという認識でいいんですかね。

とりあえずRe:VIEWにあった統一性のようなものが失われたとも言えますね。 EWBからRe:VIEWで他のLWMLから記法が追加されている(後継というワケではないので当たり前ですが)のに今更ですが。 即ち、専用シンタックスを持つマークアップ記法と汎用マークアップ記法の混在です。

まあEWBとRe:VIEWで近すぎる関係性ではあるので、もう1つの有名な専用記法と汎用記法を持つdocutils及びSphinxの話も持ってきます。

docutilsとSphinx(reStructuredText)

Pythonという巨大プロジェクトのドキュメントのために生み出されたこれらはreSTという軽量マークアップを使います。 特徴として、強調などには*Emphasis*といったよく見られる専用の記法があり、それに留まらないものを記述できるroleとDirectiveがあります。 多くはインラインとブロックで対応しますが、まあ拡張次第ではあります。

www.sphinx-doc.org

プレーンテキスト上で*Emphasis*//g{Emphasis//g}、どちらが見易いか或いは書き易いかと問えばどちらも前者である人が多いのではないでしょうか。 慣れの問題の側面もありますが、書き易さではまあ合意が得られるはずです。

XMLSGMLは一般的に山括弧を用いる記法で統一されています。\TeX{}も、これは嘘ですが、\{ }があれば文書に必要なマークアップのための記法は調います。 これだけで構成された文書は人間には読みづらく、人は様々な互換記法を生み出してきました。 その多くは頻出する構造に対しショートハンドを与える形です(「そのように変換される」といった方が良いか)。 頻出する構造の全てに専用のマークアップをつける、それに近い試みはあるにはありますが、普及率はイマイチといえます。 人は数十種類の専用記法を覚えるのが苦手なので。 そこを割り切ったからこそのMarkdownの隆盛という見方も よく見掛けるものです。

つまりreSTがライトウエイト構造化だったんだよ!(な、なんだってー

現在easybooksのようなアプリケーションが登場したのは、特定用途のときには統一的記法でよかったもの、 汎用・日常的な用途の延長として書き(見)易い装飾的な記法のバランシングが行き着く形の1つがお気に入りの素材によって再生産されると この辺りのバランスの試みがみられるということかもしれません。 reSTの設計の歴史はちゃんと調べていないので強引ではありますが、文書毎に専用の記述をしたい場合に汎用記法を利用して拡張を行う仕組みという バランスについてなので、この辺りは突っこまれると困る。 Pandocについては、SpanとDivがこの辺りに対応するという見方をすれば似た構造に見えてきます。