HN 日本語サマリー

← 一覧へ戻る
プログラミング

Typstが大きな進歩を遂げる

Typst makes big strides (lwn.net)

132 pointsby leephillips33 コメント

要約

Typstは、PDF、SVG、PNG、そして開発中のHTMLなどの様々なフォーマットで文書を組版するためのシステムであり、LaTeXの代替として期待されています。最新のバージョン0.15では、バリアブルフォント、MathML、複数参考文献リストなどの新機能が追加されました。特に、HTMLエクスポート機能の進歩により、JavaScriptライブラリなしでWebブラウザ上で高品質な数式表示が可能になりました。

全文翻訳

2026年9月9日 この記事はLee Phillips氏の寄稿によるものですTypstは、PDF、SVG、PNG、そして開発中のHTMLなどの様々なフォーマットで文書を組版するためのシステムです。技術的な素材の扱いに長けており、しばしばLaTeXの将来的な代替と見なされています。Typstを取り上げるのは約1年ぶりで、その際はバージョン0.13に達していました。新しいバージョン0.15が6月にリリースされ、バリアブルフォント、MathML、複数参考文献リストなど、多くの新機能が追加されました。Typstは無料のApache-2.0ライセンスのソフトウェアで、Rustでプログラミングされています。 バリアブルフォント Typstは現在、バリアブルフォントをサポートしています。ほとんどのフォントは、グリフを異なるウェイトで、イタリック体やボールド体などのバリエーションで含む一連のファイルとして配布されます。タイポグラフィの世界における最近の進歩は、バリアブルフォントの登場です。これは、単一のファイルにすべてのバリエーションを含めることができます。これにより、スペースが節約されるだけでなく、著者やデザイナーの柔軟性も高まります。フォントの機能やバリエーションは、「軸」の値を設定することで選択されます。通常、離散的な値を持つ複数の軸があり、さまざまな機能をオン/オフしたり、2つの値の間の連続値を取ったりすることができます。後者は、例えば、フォントのウェイトを連続的に選択するために使用できます。 この新しいTypst機能をテストするために、2つのオープンソースのバリアブルフォントをダウンロードしました。Roboto Flexは13の軸を持つ汎用フォントで、Zyconは文字を含まず17個の小さな装飾的な絵を含むフォントです。Zyconの6つの連続軸は、絵のさまざまな側面をスムーズに変更し、フォントをアニメーションで使いやすくします。これら2つのフォントを使用し、それぞれに軸を1つずつ変更するTypstドキュメントを以下に示します。 #set text(font:"Roboto Flex") #for n in (-305, -200, -98) { set text(variations:("YTDE": n)) [A penguin jumped quietly.] } #set text(font:"Zycon") #for n in array.range(0, 10, inclusive:true) { set text(variations:("M1 ": n/10)) str.from-unicode(127773) } Typstでは、「#」記号がドキュメントを「コードモード」にし、その行またはブロックの残りがTypstの組み込み言語のコードとして解釈されます。コードモード内では、角括弧で囲まれた内容は「テキストモード」、つまり組版されるテキストとして解釈されます。上記のコードには、text()関数のオプションの1つを使用してフォント名を指定するコマンドが2つ含まれています。次に、通常の期待通りに動作するforループがあります。ループ内で、text()関数を呼び出してvariations変数を設定します。Roboto Flexフォントで使用されるテキストは直接入力されますが、Zyconフォントを使用した出力は、str.from-unicode()関数で指定された単一の文字です。直接入力することもできましたが、読者がブラウザのフォントカバレッジによっては表示できない可能性がありました。Roboto Flexで操作する軸はYTDEと呼ばれます。以下の図に示すように、この軸はフォントの下げ足を決定しますが、他の特性は変更しません。これは、例えば、テーブルのセル境界との衝突を避けるために、テーブルの組版に役立つ可能性があります。Zyconの6つの軸の1つ(名前は "M1 "で、末尾の2つのスペースも名前に含まれます。すべての軸名は4文字です)は、文字ごとに異なることを行います。月のグリフへの影響は、月の満ち欠けを変更することです。このドキュメントをtypst compile vfont.typでコンパイルすると、vfont.pdfというPDFが生成され、以下のスクリーンショットに示されています。 MathML HTMLエクスポートはTypstの実験的な機能ですが、このリリースでは大きな進歩が見られます。主な新しいHTML機能は、数学のMathMLへの翻訳です。以前のTypstに関する記事では、特定の定積分を示すマークアップと、TypstによってPDFにレンダリングされたときのその出力を表示しました。同じTypstコードをHTMLにレンダリングすると、ほとんどの現在のWebブラウザが解釈できる長いMathMLマークアップ文字列が生成されます。結果は次のようになります。 ∫01(arcsin𝑥)2d𝑥𝑥21−𝑥2=𝜋ln2 上記に数式が表示されない場合は、お使いのブラウザはMathMLをサポートしていません。表示された場合は、以前の記事の組版された数式との比較により、PDFとHTMLの結果は本質的に同一であることがわかります。JavaScriptライブラリ(MathJaxなど)を必要とせず、画像に頼ることもなく、WebブラウザでTeX品質の数学を使用できる機能は、科学コミュニケーションにとって大きな恩恵です。実験的なHTML出力を有効にするには、Typstは特別なフラグが必要です。typst c --features html integral.typ integral.htmlこれは、integral.typというファイルに数式マークアップを組版してHTMLにするために使用されるコマンドです。 "バンドル"出力 Typstのようなソフトウェアの典型的なユースケースは、通常PDF形式の単一のファイル(論文や書籍など)を作成することです。「バンドル」機能により、著者は単一のソースファイルで、Typstがサポートする任意のフォーマットで、出力ファイルのコレクションを指定できます。これらのファイルはデータを共有でき、ドキュメント内およびドキュメント間のリンクを含めることができます。この機能は、HTMLファイルの相互接続されたネットワークで構成されるWebサイトの作成に理想的です。また、単一のソースファイルから会議での講演用のスライドデッキと関連するプレプリントを生成したい学術関係者にも関心があるはずです。以下は、3つの相互リンクされたドキュメント(2つのHTMLページと1つのPDF)を作成し、テキストの断片を共有する簡単なTypstファイルの例です。 #let text = ['Twas brillig, and the slithy toves Did gyre and gimble in the wabe:] #document("poems.html", title: [Famous Poems])[ #link(<jabberwocky>)[Here] is a famous nonsense poem. ]<home> #document("jabberwocky.html", title: [Jabberwocky by Lewis Carroll])[ This famous poem begins like this: #text The #link(<jabberwockyPDF>)[rest] of the poem. Go #link(<home>)[home]. ]<jabberwocky> #document("jabberwocky.pdf", title: [Jabberwocky: the Complete Poem])[ #text .... Go #link(<home>)[home]. ]<jabberwockyPDF> このコードをbundle.typというファイルに保存した場合の処理コマンドは次のとおりです。 typst c --features html,bundle --format bundle bundle.typ 私のテストでは、バンドル機能は宣伝どおりに機能しましたが、HTML出力と同様にまだ開発中の機能と見なされているため、コンパイラは--featuresフラグを必要とします。上記のコマンドは、「bundle」という新しいディレクトリを作成し、その中に#document()関数で定義された3つのファイルが含まれます。それらはすべて、text変数に保存された詩の最初の2行を含んでいます。HTMLページ間、それらのうちの1つからPDFへ、そして後者から2ページ構成のウェブサイトへハイパーリンクがあります。リンクは、各ドキュメント関数の後に含まれるラベルを使用してターゲット指定されます。 複数参考文献リスト Typstは現在、単一のドキュメントで複数の参考文献リストを許可しており、これは熱望されていた機能でした。その標準的な応用は、各章に個別の参考文献セクションが必要になる可能性のある書籍です。この機能は、おもちゃの例で紹介するのが最適です。 #show bibliography: set text(size: 8pt) = Chapter I According to @smith, Smith is uncommonly smart. #bibliography("works.bib", title: "References for Chapter I", group: none) = Chapter II Jones@jones has a different view. The issue was finally put to rest in the following year in @mergutroid. #bibliography("works.bib", title: "References for Chapter II", group: none) ここでは、最初の行は参考文献リストがデフォルトのテキストサイズよりも小さいフォントサイズを使用することを示しています。そのテキストでは、「@」プレフィックスがデフォルトの番号付きリストスタイルを使用して引用を作成します。各章の終わりに、bibliography()関数が呼び出されます。その最初の引数は、参考文献情報に使用するデータベースを指定します。各参考文献セクションは、必要に応じて異なるデータベースまたはデータベースのコレクションを使用できます(これらのテキストファイルデータベースの説明については、最近のPandocに関する記事を参照してください)。group引数は制御