- Published on
LaTeX と Typst を比較
- Authors
- Name
- Eito YONEYAMA
- @ynym_8
前回は Typst に入門したが, 今回は実際に類似文書を LaTeX と Typst で作成し, 出力 (PDF) とソースコードを比較してみる.
LaTeX の場合
\documentclass{ltjsarticle}
\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{float}
\usepackage{cleveref}
\crefname{figure}{図}{図}
\crefname{table}{表}{表}
\newcommand{\bhline}[1]{\noalign{\hrule height #1}}
\newcommand{\ccol}[1]{\multicolumn{1}{c}{#1}}
\begin{document}
\section{LaTeXにおける数式}
Burgers方程式は以下で表される:
$$\dfrac{\partial u}{\partial t} + u \dfrac{\partial u}{\partial x} = \nu \dfrac{\partial^{2} u}{\partial x^{2}}$$
ここで, $\nu$は動的粘性率である.
\section{LaTeXにおける図/表}
LaTeXにおける図/表について以下に示す.
\subsection{図}
素敵な雪だるまを\cref{fig01}に示す.
\begin{figure}[H]
\centering
\includegraphics[width=0.5\linewidth]{santa.png}
\caption{素敵な雪だるま}
\label{fig01}
\end{figure}
\subsection{表}
2つのBERTモデルにおけるACCの比較を\cref{tbl01}に示す.
\begin{table}[H]
\centering
\caption{ACCによる評価}
\label{tbl01}
\begin{tabular}{ll}\bhline{1pt}
\ccol{ACC}&\ccol{Model}\\\hline
0.42&tohoku-nlp/bert-base-japanese-char-whole-word-masking\\
\textbf{0.44}&koheiduck/bert-japanese-finetuned-sentimen\\\bhline{1pt}
\end{tabular}
\end{table}
\end{document}

Typst の場合
#import "@preview/indenta:0.0.3": fix-indent
#set text(lang: "ja", font: "TeX Gyre Termes", size: 10pt)
#show regex("[\p{scx:Han}\p{scx:Hira}\p{scx:Kana}]"): set text(lang: "ja", font: "Harano Aji Mincho", size: 10pt)
#set page(
margin: (x: 20mm, y: 30mm),
numbering: "1",
)
#set heading(numbering: (..nums) => {
nums.pos().map(str).join(".") + " "
})
#show heading: set block(above: 1.4em, below: 1em)
#set par(first-line-indent: 1.8em, justify: true, leading: 0.8em)
#show par: set block(spacing: 1.2em)
#show figure.where(kind: table): set figure.caption(position: top)
#let hline = table.hline(stroke: 0.6pt)
#let bhline = table.hline(stroke: 1pt)
#show: fix-indent()
= Typstにおける数式
Burgers方程式は以下で表される:
$ frac(partial u, partial t) + u frac(partial u, partial x) = nu frac(partial^(2) u, partial x^(2)) $
ここで, $nu$ は動的粘性率である.
= Typstにおける図/表
Typstにおける図/表について以下に示す.
== 図
素敵な雪だるまを @fig01 に示す.
#figure(
image("santa.png", width: 50%),
caption: [素敵な雪だるま]
)<fig01>
== 表
2つのBERTモデルにおけるACCの比較を @tbl01 に示す.
#figure(
table(
stroke: none,
columns: 2,
align: (left, left),
bhline,
table.header(
table.cell(align: center)[ACC],
table.cell(align: center)[Model]
),
hline,
[0.42], [tohoku-nlp/bert-base-japanese-char-whole-word-masking],
[*0.44*], [koheiduck/bert-japanese-finetuned-sentimen],
bhline
),
caption: [ACCによる評価]
)<tbl01>

比較
インデントについて
LaTeX では, 段落内で自動的にインデントされる1が, Typst では #set
ルールで #par()
の first-line-indent
にインデント幅を指定する必要がある. しかし, これでは段落の最初の文章にはインデントが適用されない. このことに関して, 様々な議論 (#311) がされているが未だ公式的なサポートは無いため本記事では Indenta を使用している. 一般公開から日が浅いため仕方がないとはいえ, この点に関しては LaTeX の方が便利.
段落番号について
LaTeX では \section
等で段落区切りすると自動的に番号付けされ, \section*
で非表示にできる. Typst では =
等で段落区切りをするがデフォルトでは番号付けされないため, #set
ルールで以下のように設定する必要がある.
#set heading(numbering: (..nums) => {
nums.pos().map(str).join(".") + " "
})
柔軟性はあるが LaTeX でも \renewcommand\thesection
で変更できるため何とも言えない... 記述量は LaTeX の方が少ない? 凝った段落番号を作成したことがないため分からないが, 凝った番号付けをするなら Typst のほうが便利かも?
行間について
Typst ではデフォルトの行間が少し狭いため #set
ルールで #par()
の leading
を 0.8em に指定している. LaTeX でも稀に spacing
環境で行間を調整することはあるが, 大抵はデフォルトで満足している.
ページ番号について
LaTeX ではデフォルトでページ番号が表示され, \pagestyle{empty}
で非表示にできる. Typst ではデフォルトでページ番号が表示されないため, #set
ルールで #page()
の numbering
を指定する必要がある. 例としては以下の通り.
#set page(
numbering: "1"
)
表のキャプション位置について
LaTeX では \caption
の記述位置によって表の上下にキャプションを表示させることができる. Typst ではデフォルトで表の下にキャプションが表示されるため, 表の上にキャプションを表示させるためには以下のようにする必要がある.
#show figure.where(kind: table): set figure.caption(position: top)
まとめ
今回は LaTeX と Typst で類似文書を作成し, 出力のソースコードを比較したが, LaTeX で行えることは大抵できる2ことが分かった. LaTeX では目的に適した文書クラスを指定すれば特にレイアウトを設定し直すことなく高品質な組版が行えるが, Typst には文書クラスは無いため, レイアウトを調整した .typ
を作成し import
するのが良さそう. 組版の質としては LaTeX の方が高品質であるが, Typst の方が構文や関数3が短いため記述はしやすいイメージ4. 個人的には和文フォントへの完全な対応を期待したい5.