0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LaTeXコマンド補完の回帰を5つの公開テストで防ぐ

0
Posted at

TeX64の現行Blocksドキュメント

図1:TeX64の現行Blocksドキュメント。2026年8月31日取得。画面が裏付けるのは入力機能の所在であり、回帰テストの合格状態は公開JSONと実行結果で確認する。

LaTeXの補完辞書を直すとき、追加した候補だけを見ると既存コマンドの退行を見落とす。\mathrmを最後まで入力したら候補が消える、sinよりsinhが先に出る、pmatrixが環境テンプレートへ進まない。どれも候補数だけでは検出できない。

TeX64でsinを入力したときの補完候補

図2:現行TeX64を隔離プロファイルで起動し、実Electron BrowserWindowを2026年9月1日に取得した。分数の分子へsinを入力した状態で、候補欄はsinを先頭、sinhを次点に表示している。この画像が裏付けるのは当該入力時の表示順位だけであり、5分類全体の合格状態は公開JSONとテスト結果で確認する。

そこでTeX64では、現在の実装に対して5分類の入力契約を固定している。公開する根拠は大規模なコーパスの数字ではなく、候補生成の実装テスト本体、実行コマンド、テストファイルのSHA-256、合格状態を結んだ回帰記録である。

先頭候補を取り出す最小の検査

候補配列の先頭だけを読む関数を置くと、入力と期待値の対応を短く書ける。

import assert from "node:assert/strict";
import { buildRankedWordCandidates } from "../Resources/web/math/wysiwyg/math-wysiwyg-candidates.js";

const topLatex = (token) =>
  buildRankedWordCandidates(token)[0]?.candidate.key.latex ?? "";

assert.equal(topLatex("sin"), "\\sin");
assert.equal(topLatex("mathrm"), "\\mathrm{#?}");
assert.ok(topLatex("pmatrix").includes("\\begin{pmatrix}"));

完全入力時の候補を直接見るため、入力トークンからバックスラッシュを外すかどうかをテスト途中で変えない。環境名は通常コマンドと同じ文字列比較にせず、\begin{...}を含むテンプレートへ進むことを検査する。

5分類を別々に落とす

検査 代表入力 失敗時に疑う箇所
正式名 sinfracmathrmoperatorname 完全一致時の順位と正式名の登録
dots派生 dotscdotsb 描画可能な \ldots\cdots への対応
環境名 pmatrixbmatrixcases 環境テンプレートの候補キー
候補ゼロ 標準コマンド名51件 完全入力した正式名の辞書登録
共有プレフィックス texdotssin 短い中核コマンドの優先規則

一つの巨大な合格率にまとめないことで、どの契約が壊れたかを出力から直接判断できる。たとえばdotscだけが落ちればdots派生の対応、texだけが落ちれば共有プレフィックスの順位へ調査範囲を絞れる。

5つの契約を回帰テストに固定する

辞書変更のたびに同じ入力を再実行できるよう、失敗の性質を次の五つのテストへ分けた。

  1. 正式なコマンド名では、そのコマンド自身が先頭になる。
  2. dots系は実際に描画できる対応へ解決する。
  3. 環境名は正しいテンプレートへ進む。
  4. 標準コマンド名で候補ゼロを返さない。
  5. 共有プレフィックスでは短い中核コマンドを不自然に押し下げない。

2026年8月31日にNode.js v24.8.0で次のコマンドを再実行し、5件すべて成功した。

LaTeXコマンド補完の5件の回帰テスト結果

図3:現行コードで再実行した5件の結果。5件成功・失敗0件で、テストファイルのSHA-256は公開記録と一致した。実行ログを読みやすく整形した自作図であり、候補命中率や入力時間は示さない。

node --test tests/math-suggest-command-names.test.mjs

公開記録には実装コミット 163a7ca12d0bed2f5bb7db6261057c5153fb90e8とテストファイルのSHA-256 6c89f53efb16035d9eebe0d368914a578031285412d081962adfa0e357d6c8a2もある。コミット固定のテスト本体を取得してハッシュを照合すれば、同名の別テストを走らせた誤認を避けられる。

5件の成功から言えないこと

5件が成功しても、LaTeX入力全体の性能値にはならない。

  • 実際の利用者が各コマンドを入力する頻度は測っていない。
  • 候補選択にかかる時間や打鍵数は測っていない。
  • 著者定義マクロの候補順位は対象外である。
  • OCR、AI生成、数式の数学的な正しさは測っていない。
  • 文書全体のコンパイル成功率は測っていない。

この記事で評価根拠にするのは公開された5件の回帰条件だけであり、第三者ソースのコーパスや集計値は扱わない。

製品機能へ戻すときの見方

回帰テストの目的は数字を飾ることではなく、入力中に詰まる箇所を変更のたびに検出することにある。TeX64の現在の入力面は数式ブロックの説明で確認できる。導入判断では、自分が頻繁に使うコマンドを完全入力し、候補順位と確定後のソースを確かめる方がよい。

再現できない挙動があれば、TeX64サポートへ入力トークン、実際の先頭候補、実装コミットを送ってほしい。テストを更新するときは、公開記録の実行コマンドとSHA-256も同時に更新する。

5分類の説明と更新履歴は、TeX64公式のLaTeX数式入力ベンチマークに集約している。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?