高度なスタイリング
このチュートリアルの前の2つの章では、Typstで文書を書く方法とその書式を変更する方法を学びました。 それらの章を通して書いたレポートが優れた評価を得たため、指導教員はそれを基に学会論文を書いてほしいと考えています! もちろん、論文は学会のスタイルガイドに従わなければなりません。 どうすればそれを達成できるか見てみましょう。
始める前に、チームを作成して、そのチームに教員を招待して追加しましょう。 まず、エディターの左上にある戻るアイコンでアプリのダッシュボードに戻ります。 次に、左のツールバーのプラスアイコンを選択し、チームを作成します。 最後に、新しいチームをクリックし、チーム名の横にあるmanage teamをクリックして設定に進みます。 これで教員をメールで招待することができます。
次に、プロジェクトをチームに移動します。 プロジェクトを開き、左のツールバーの歯車アイコンを選んで設定に行き、Ownerのドロップダウンから新しいチームを選択します。 変更を保存するのを忘れないでください!
あなたの教員もプロジェクトを編集することができ、お互いにリアルタイムで変更を確認できます。 公式のDiscordサーバーに参加して他のユーザーを見つけ、一緒にチームを組んでみることも可能です!
学会ガイドライン
レイアウトのガイドラインは学会ウェブサイトに掲載されております。 ここでは以下の条件であった場合を考えましょう。
- フォントは11ptのセリフ体
- タイトルは17ptで太字
- アブストラクトは1段組みで本文は2段組み
- アブストラクトは中央揃え
- 本文は両端揃え
- 第1レベルのセクションの見出しは13ptで中央に配置し、小さな大文字で表示
- 第2レベルの見出しは斜体で、本文と同じ大きさ
- ページはUSレターサイズとし、下中央にページ番号を付け、各ページの右上に論文のタイトルを記載
これらのうち、多くの項目については既に対応方法を知っていますが、いくつかについては新しい記法を学ぶ必要があります。
setルール
まず、文書のsetルールを書くことから始めましょう。
#set page(
paper: "us-letter",
header: align(right)[
A fluid dynamic model for
glacier flow
],
numbering: "1",
)
#set par(justify: true)
#set text(
font: "Libertinus Serif",
size: 11pt,
)
#lorem(600)
ここで行われていることの大半は、すでに分かりでしょう。
テキストサイズを11pt
に、フォントをLibertinus Serifに設定しています。
また、段落の両端揃えを有効にし、ページサイズをUSレターとしています。
ここで、header
は新しい引数で、各ページの上部の余白に置くコンテンツを設定できます。
ヘッダーには、学会のスタイルガイドで要求されているように、論文のタイトルを指定します。
align
関数を用いてそのテキストを右寄せにします。
最後に numbering
引数について説明します。
ここでは、ページ番号の付け方を定義するnumbering patternを指定できます。
例えば"1"
と設定すると、Typstは素のページ番号のみを表示します。
また"(1/1)"
と設定すると、カッコで囲まれた現在のページと総ページ数が表示されるでしょう。
さらに、カスタム関数を用意して完全に好みの書式にすることも可能です。
タイトルとアブストラクトの作成
それでは、タイトルとアブストラクトを追加しましょう。
まずはタイトルを中央揃えにし、*stars*
で囲んでフォントを太文字にします。
#align(center, text(17pt)[
*A fluid dynamic model
for glacier flow*
])
正しく動作していることが確認できます。
text
関数を使って、前のテキストのsetルールをローカルで上書きし、関数の引数で文字サイズを17ptに大きくしました。
次に、著者リストも追加しましょう。
指導教員と一緒にこの論文を書いているため、自分の名前と教員の名前を追加します。
#grid(
columns: (1fr, 1fr),
align(center)[
Therese Tungsten \
Artos Institute \
#link("mailto:tung@artos.edu")
],
align(center)[
Dr. John Doe \
Artos Institute \
#link("mailto:doe@artos.edu")
]
)
著者情報が記載された2つのブロックが隣り合わせにレイアウトされています。
このレイアウトを作るためにgrid
関数を使っています。
これにより、各列の大きさや、どのコンテンツをどのセルに入れるかを正確に制御することができます。
columns
引数には、相対長さまたは割合の配列を渡します。
この場合、2つの等しい割合のサイズを渡し、使用可能なスペースを2つの等しい列に分割するように指示します。
次に、grid関数に2つの内容引数を渡しました。
ひとつは主著者であるあなたの情報で、もうひとつは指導教員の情報です。
ここでも align
関数を使用して、コンテンツを列の中央に配置しています。
grid関数はセルを指定するcontent引数を任意の数で受け取れます。
行は自動的に追加されますが、rows
引数で手動でサイズを指定することも可能です。
それでは、アブストラクトを追加しましょう。 学会は、アブストラクトを中央に配置することを望んでいることを忘れないでください。
...
#align(center)[
#set par(justify: false)
*Abstract* \
#lorem(80)
]
できました!特筆すべき点は、align
のcontent引数の中にあるsetルールを使って、アブストラクトの両端揃えをオフにしたことです。
これは、最初のsetルールの後に指定されたにもかかわらず、文書の残りの部分には影響しません。
コンテンツ・ブロック内で設定されたものは、そのブロック内のコンテンツにのみ影響します。
ヘッダーとタイトルの2回入力する必要がないように、論文タイトルを変数に保存することも可能です。
変数の宣言にはlet
を使用します。
#let title = [
A fluid dynamic model
for glacier flow
]
...
#set page(
header: align(
right + horizon,
title
),
...
)
#align(center, text(17pt)[
*#title*
])
...
title
変数にコンテンツを設定した後は、関数内やマークアップ内(関数のように接頭辞に#
をつける)で使用できます。
こうすることで、別のタイトルに決めた場合、一箇所で簡単に変更することができます。
段組みと見出しの追加
上の論文は、残念ながら文字が単調にぎっしり詰まっていて読みにくい見た目をしています。
これを修正するために、見出しを追加し、2段組のレイアウトに変更してみましょう。
幸いなことに、setルールでpage
にcolumn
引数を追加することで簡単に行えます。
引数リストにcolumns: 2
を加えることで、文書全体を2段組みとなります。
しかし、これではタイトルと著者、アブストラクトにも影響が出てしまいます。
それらを1段組みのままに維持するためには、place
関数を呼び出して囲みましょう。
place関数は引数として配置とコンテンツを受け取ります。
オプション引数であるscope
引数を使えば、現在の段組みとその親(ページ)のどちらに対して配置するかを決めることが可能です。
これらに加えて、もうひとつ設定することがあります。
オプション引数がない場合、place
はそのコンテンツを文書の流れから外し、他のレイアウトに影響を与えることなく、他のコンテンツの上に配置します。
#place(
top + center,
rect(fill: black),
)
#lorem(30)
もしここでplace
を使わなければ、黒塗りの長方形は独立した行になるはずですが、
place
を使うと、それに続く数行のテキストの上に重なります。
同様に、テキスト側もこの長方形がないかのように振る舞います。
この動作を変更するには、引数float: true
を渡してください。
これによりplace
でページの上部または下部に配置されたアイテムが、他のコンテンツと重ならないように設定できます。
#set page(
paper: "us-letter",
header: align(
right + horizon,
title
),
numbering: "1",
columns: 2,
)
#place(
top + center,
float: true,
scope: "parent",
clearance: 2em,
)[
...
#par(justify: false)[
*Abstract* \
#lorem(80)
]
]
= Introduction
#lorem(300)
= Related Work
#lorem(200)
この例では、place
関数の clearance
引数も使用しています。
これにより、v
関数を使用する代わりに、本文との間にスペースを設けています。
また、コンテンツはcenter引数を継承しているため、各パーツごとに行っていた明示的な align(center, ...)
呼び出しも削除できます。
最後に見出しのスタイルの設定をしましょう。
ガイドラインに従うために、見出しは中央揃えにして、小さな大文字を使わなければなりません。
heading
関数はそのような設定を提供していないため、独自の見出しshowルールを書く必要があります。
#show heading: it => [
#set align(center)
#set text(13pt, weight: "regular")
#block(smallcaps(it.body))
]
...
うまくできました!
すべての見出しに適用されるshowルールを使用しました。
この関数にパラメータとして見出しを渡します。
このパラメータはコンテンツとして使用することもできますが、title
、numbers
、level
といったフィールドも持っているため、そこから独自の書式を構成することも可能です。
ここではセンター揃えにし、見出しはデフォルトで太字なのでフォントのウェイトを "regular"
に設定し、smallcaps
関数を使って見出しのタイトルを小さな大文字でレンダリングしています。
残る唯一の問題は、すべての見出しが同じように見えることです。
MotivationとProblem Statementはサブセクションであり、イタリック体であるべきですが、今はセクションの見出しと見分けがつきません。
この問題は、setルールにwhere
セレクターを使うことで解決できます。
これは、見出し(および他の要素)に対して呼び出せるメソッドで、レベルごとにフィルタリングすることが可能です。
これによりセクションとサブセクションの見出しを区別できます。
#show heading.where(
level: 1
): it => block(width: 100%)[
#set align(center)
#set text(13pt, weight: "regular")
#smallcaps(it.body)
]
#show heading.where(
level: 2
): it => text(
size: 11pt,
weight: "regular",
style: "italic",
it.body + [.],
)
これは素晴らしい!
第1レベルと第2レベルの見出しにそれぞれ選択的に適用される2つのshowルールを書きました。
where
セレクタを使用して、見出しをレベルでフィルタリングしました。
そして、サブセクションの見出しを本文と改行せずにレンダリングしました。
また、サブセクションの見出しの最後にピリオドを自動的に追加してます。
ここで、学会のスタイルガイドを確認しましょう。
- フォントは11ptのセリフ体 ✓
- タイトルは17ptで太字 ✓
- アブストラクトは1段組みで本文は2段組み ✓
- アブストラクトは中央揃え ✓
- 本文は両端揃え ✓
- 第1レベルのセクションの見出しは13ptで中央に配置し、小さな大文字で表示 ✓
- 第2レベルの見出しは斜体で、本文と同じ大きさ ✓
- ページはUSレターサイズとし、下中央にページ番号を付け、各ページの右上に論文のタイトルを記載 ✓
これで、すべてのスタイルに準拠し、論文を学会に提出できます!完成した論文は次のようになっています。
まとめ
このセクションでは、ヘッダーとフッターの作成方法、関数とスコープを使用してローカルにスタイルをオーバーライドする方法、grid
関数を使用してより複雑なレイアウトを作成する方法、個々の関数と文書全体のshowルールを記述する方法を学びました。
また、where
セレクタを使用して、見出しをそのレベルによってフィルタリングする方法も学びました。
結果として論文は大成功でした! あなたはその学会にて同じ志を持つ研究者にたくさん出会い、来年同じ学会で発表したいプロジェクトを計画しています。 その際に、同じスタイルガイドを使って新しい論文を書く必要があるため、あなたやあなたのチームのために、時間を節約できるテンプレートを作りたいと思うのではないでしょうか?
次のセクションでは、複数の文書で再利用できるテンプレートの作成方法を学びます。 これはより高度なトピックですので、今すぐには手が出せないという方は、後ほどお気軽にお越しください。