Skip to content

Commit

Permalink
Feature ref sections (#12)
Browse files Browse the repository at this point in the history
* feat: add spacing size for headings

Signed-off-by: Shunsuke Kimura <[email protected]>

* fix: heading fonts depending on levles

Signed-off-by: Shunsuke Kimura <[email protected]>

* feat: ref sections

Signed-off-by: Shunsuke Kimura <[email protected]>

---------

Signed-off-by: Shunsuke Kimura <[email protected]>
  • Loading branch information
kimushun1101 authored Jan 5, 2025
1 parent 4ae4ec4 commit 4c3d977
Show file tree
Hide file tree
Showing 4 changed files with 118 additions and 65 deletions.
54 changes: 36 additions & 18 deletions libs/mscs/lib.typ
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
#let conference-name = "制御部門マルチシンポジウム"
#let font-size-default = 10pt
#let font-size-heading = 11pt
#let state-font-gothic = state("gothic", ("BIZ UDPGothic", "MS PGothic", "Hiragino Kaku Gothic Pro", "IPAexGothic", "Noto Sans CJK JP"))
#let spacing-size-heading = 12pt
#let appendix-numbering = "A.1"
#let state-font-gothic = state("gothic", (:))

// import third-party packages
#import "@preview/ctheorems:1.1.3": thmplain, thmproof, thmrules
Expand Down Expand Up @@ -51,14 +53,35 @@
set math.equation(numbering: "(1)")
show math.equation: set block(spacing: 0.55em)

// Configure appearance of equation references
// See https://typst.app/docs/reference/model/ref/
// Configure appearance of references
show ref: it => {
if it.element != none and it.element.func() == math.equation {
link(it.element.location(), numbering(
it.element.numbering,
..counter(math.equation).at(it.element.location())
// Equation -> (n).
// See https://typst.app/docs/reference/model/ref/
let eq = math.equation
let el = it.element
if el != none and el.func() == eq {
link(el.location(), numbering(
el.numbering,
..counter(eq).at(el.location())
))
}
// Sections -> n章m節l項.
// Appendix -> 付録A.
else if el != none and el.func() == heading {
let sec-cnt = counter(heading).at(el.location())
if el.numbering != appendix-numbering{
if el.depth == 1 {
link(el.location(), [#sec-cnt.at(0)章])
} else if el.depth == 2{
link(el.location(), [#sec-cnt.at(0)章#sec-cnt.at(1)節])
} else if el.depth == 3{
link(el.location(), [#sec-cnt.at(0)章#sec-cnt.at(1)節#sec-cnt.at(2)項])
}
} else {
link(el.location(), [
付録#numbering(el.numbering, ..sec-cnt)
])
}
} else {
it
}
Expand All @@ -71,23 +94,18 @@
// Configure headings.
set heading(numbering: "1.1")
show heading: it => {
// Find out the final number of the heading counter.
set par(first-line-indent: 0em, spacing: spacing-size-heading)
let levels = counter(heading).get()
if it.level == 1 {
// We don't want to number of the acknowledgment section.
set par(first-line-indent: 0pt)
set text(font-size-heading, font: font-gothic)
v(10pt)
// Acknowledgment sections are not numbered.
if it.numbering != none and not it.body in ([謝辞], [Acknowledgment], [Acknowledgement]) {
numbering(it.numbering, ..levels)
h(1em)
}
it.body
} else {
// The other level headings are run-ins.
set par(first-line-indent: 0pt)
} else {
set text(font-size-default, font: font-gothic)
v(5pt)
if it.numbering != none {
numbering(it.numbering, ..levels)
h(1em)
Expand Down Expand Up @@ -125,7 +143,7 @@
[],
[
#set text(10pt, font: font-latin)
#set par(first-line-indent: 0pt)
#set par(first-line-indent: 0em)
*Abstract--* #h(0.5em) #abstract
#v(1em)
*Key Words:* #h(0.5em) #keywords.join(", ")
Expand All @@ -152,14 +170,14 @@

// Appendix
#let appendix(body) = {
set heading(numbering: "A.1", supplement: [付録])
set heading(numbering: appendix-numbering)
counter(heading).update(0)
counter(figure.where(kind: image)).update(0)
counter(figure.where(kind: table)).update(0)
set figure(numbering: it => {
[#numbering("A", counter(heading).get().at(0)).#it]
})
v(20pt, weak: true)
v(spacing-size-heading)
context(text(font-size-heading, font: state-font-gothic.get(), weight: "bold")[付録])
body
}
53 changes: 36 additions & 17 deletions libs/rengo/lib.typ
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
#let conference-name = "自動制御連合講演会"
#let font-size-default = 10pt
#let font-size-heading = 11pt
#let state-font-gothic = state("gothic", ("BIZ UDPGothic", "MS PGothic", "Hiragino Kaku Gothic Pro", "IPAexGothic", "Noto Sans CJK JP"))
#let spacing-size-heading = 15pt
#let appendix-numbering = "A.1"
#let state-font-gothic = state("gothic", (:))

// import third-party packages
#import "@preview/ctheorems:1.1.3": thmplain, thmproof, thmrules
Expand Down Expand Up @@ -51,43 +53,60 @@
set math.equation(numbering: "(1)")
show math.equation: set block(spacing: 0.55em)

// Configure appearance of equation references
// See https://typst.app/docs/reference/model/ref/
// Configure appearance of references
show ref: it => {
if it.element != none and it.element.func() == math.equation {
link(it.element.location(), numbering(
it.element.numbering,
..counter(math.equation).at(it.element.location())
// Equation -> (n).
// See https://typst.app/docs/reference/model/ref/
let eq = math.equation
let el = it.element
if el != none and el.func() == eq {
link(el.location(), numbering(
el.numbering,
..counter(eq).at(el.location())
))
}
// Sections -> n章m節l項.
// Appendix -> 付録A.
else if el != none and el.func() == heading {
let sec-cnt = counter(heading).at(el.location())
if el.numbering != appendix-numbering{
if el.depth == 1 {
link(el.location(), [#sec-cnt.at(0)章])
} else if el.depth == 2{
link(el.location(), [#sec-cnt.at(0)章#sec-cnt.at(1)節])
} else if el.depth == 3{
link(el.location(), [#sec-cnt.at(0)章#sec-cnt.at(1)節#sec-cnt.at(2)項])
}
} else {
link(el.location(), [
付録#numbering(el.numbering, ..sec-cnt)
])
}
} else {
it
}
}


// Configure lists.
set enum(indent: 1em)
set list(indent: 1em)

// Configure headings.
set heading(numbering: "1.1")
show heading: it => {
// Find out the final number of the heading counter.
set par(first-line-indent: 0em, spacing: spacing-size-heading)
let levels = counter(heading).get()
if it.level == 1 {
// We don't want to number of the acknowledgment section.
set par(first-line-indent: 0pt)
set text(font-size-heading, font: font-gothic)
v(10pt)
// Acknowledgment sections are not numbered.
if it.numbering != none and not it.body in ([謝辞], [Acknowledgment], [Acknowledgement]) {
numbering(it.numbering, ..levels)
h(1em)
}
it.body
} else {
// The other level headings are run-ins.
set par(first-line-indent: 0pt)
} else {
set text(font-size-default, font: font-gothic)
v(5pt)
if it.numbering != none {
numbering(it.numbering, ..levels)
h(1em)
Expand Down Expand Up @@ -152,14 +171,14 @@

// Appendix
#let appendix(body) = {
set heading(numbering: "A.1", supplement: [付録])
set heading(numbering: appendix-numbering)
counter(heading).update(0)
counter(figure.where(kind: image)).update(0)
counter(figure.where(kind: table)).update(0)
set figure(numbering: it => {
[#numbering("A", counter(heading).get().at(0)).#it]
})
v(20pt, weak: true)
v(spacing-size-heading)
context(text(font-size-heading, font: state-font-gothic.get(), weight: "bold")[付録])
body
}
54 changes: 36 additions & 18 deletions libs/rsj-conf/lib.typ
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
#let conference-name = "日本ロボット学会学術講演会"
#let font-size-default = 10pt
#let font-size-heading = 11pt
#let state-font-gothic = state("gothic", ("BIZ UDPGothic", "MS PGothic", "Hiragino Kaku Gothic Pro", "IPAexGothic", "Noto Sans CJK JP"))
#let spacing-size-heading = 5pt
#let appendix-numbering = "A.1."
#let state-font-gothic = state("gothic", (:))

// import third-party packages
#import "@preview/ctheorems:1.1.3": thmplain, thmproof, thmrules
Expand Down Expand Up @@ -52,14 +54,35 @@
set math.equation(numbering: "(1)")
show math.equation: set block(spacing: 0.55em)

// Configure appearance of equation references
// See https://typst.app/docs/reference/model/ref/
// Configure appearance of references
show ref: it => {
if it.element != none and it.element.func() == math.equation {
link(it.element.location(), numbering(
it.element.numbering,
..counter(math.equation).at(it.element.location())
// Equation -> (n).
// See https://typst.app/docs/reference/model/ref/
let eq = math.equation
let el = it.element
if el != none and el.func() == eq {
link(el.location(), numbering(
el.numbering,
..counter(eq).at(el.location())
))
}
// Sections -> n章m節l項.
// Appendix -> 付録A.
else if el != none and el.func() == heading {
let sec-cnt = counter(heading).at(el.location())
if el.numbering != appendix-numbering{
if el.depth == 1 {
link(el.location(), [#sec-cnt.at(0)章])
} else if el.depth == 2{
link(el.location(), [#sec-cnt.at(0)章#sec-cnt.at(1)節])
} else if el.depth == 3{
link(el.location(), [#sec-cnt.at(0)章#sec-cnt.at(1)節#sec-cnt.at(2)項])
}
} else {
link(el.location(), [
付録#numbering(el.numbering, ..sec-cnt)
])
}
} else {
it
}
Expand All @@ -70,25 +93,20 @@
set list(indent: 1em)

// Configure headings.
set heading(numbering: "1.")
set heading(numbering: "1.1.")
show heading: it => {
// Find out the final number of the heading counter.
set par(first-line-indent: 0em, spacing: spacing-size-heading)
let levels = counter(heading).get()
if it.level == 1 {
// We don't want to number of the acknowledgment section.
set par(first-line-indent: 0pt)
set text(font-size-heading, font: font-gothic)
v(10pt)
// Acknowledgment sections are not numbered.
if it.numbering != none and not it.body in ([謝辞], [Acknowledgment], [Acknowledgement]) {
numbering(it.numbering, ..levels)
h(1em)
}
it.body
} else {
// The other level headings are run-ins.
set par(first-line-indent: 0pt)
} else {
set text(font-size-default, font: font-gothic)
v(5pt)
if it.numbering != none {
numbering(it.numbering, ..levels)
h(1em)
Expand Down Expand Up @@ -141,14 +159,14 @@

// Appendix
#let appendix(body) = {
set heading(numbering: "A.1", supplement: [付録])
set heading(numbering: appendix-numbering, supplement: [付録])
counter(heading).update(0)
counter(figure.where(kind: image)).update(0)
counter(figure.where(kind: table)).update(0)
set figure(numbering: it => {
[#numbering("A", counter(heading).get().at(0)).#it]
})
v(20pt, weak: true)
v(spacing-size-heading)
context(text(font-size-heading, font: state-font-gothic.get(), weight: "bold")[付  録])
body
}
22 changes: 10 additions & 12 deletions main.typ
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
// Copyright 2024 Shunsuke Kimura

// Select the Template
// #import "libs/mscs/lib.typ": mscs as temp, definition, lemma, theorem, corollary, proof, appendix, conference-name
#import "libs/rengo/lib.typ": rengo as temp, definition, lemma, theorem, corollary, proof, appendix, conference-name
#import "libs/mscs/lib.typ": mscs as temp, definition, lemma, theorem, corollary, proof, appendix, conference-name
// #import "libs/rengo/lib.typ": rengo as temp, definition, lemma, theorem, corollary, proof, appendix, conference-name
// #import "libs/rsj-conf/lib.typ": rsj-conf as temp, definition, lemma, theorem, corollary, proof, appendix, conference-name

#show: temp.with(
Expand All @@ -23,9 +23,9 @@
// font-latin: ("Times New Roman", "New Computer Modern")
)

= はじめに
= はじめに <sec:info>
これは#conference-name;のサンプルを参考に作成しています。
#text([使用の際には適宜投稿先の規定を必ずご確認ください。]
#text([実用の際には適宜投稿先の規定を必ずご確認ください。]
, fill: rgb(red), weight: "bold")
発表論文原稿をPDFでご執筆いただき、学会のホームページにアップロードしてください。
このファイルはこのテンプレートの使い方を示しており、同時に発表論文の見本でもあります。
Expand All @@ -34,6 +34,7 @@
というような説明が書かれるであろうテンプレートを作ってみました。
本稿では、このテンプレートファイルの使い方および Typst による執筆作業の概要について解説します。
この原稿のソースコードは https://github.com/kimushun1101/typst-jp-conf-template で公開しております。
ご要望や修正の提案があれば、Issue や Pull Request でお知らせください。筆者に届く形であればSNSなど他の手段でも構いません。
Typst の概要についてお知りになりたい方は、https://github.com/kimushun1101/How-to-use-typst-for-paper-jp にもスライド形式の資料を用意しておりますので、ぜひこちらもご覧ください。

= テンプレートファイルの使い方 <sec:usage>
Expand Down Expand Up @@ -64,7 +65,7 @@ Typst appのページ https://typst.app/ から`Sign up`でアカウントを作
ターミナルでのコマンド操作でコンパイルする方法もあります。
何か不具合があるときには、こちらでのコンパイルが一番確実です。

=== インストール
=== インストール <sec:typst-install>
- Windows の場合\ Windows PowerShell から以下のコマンドでインストールできます。
```powershell
winget install --id Typst.Typst
Expand Down Expand Up @@ -96,9 +97,6 @@ typst watch main.typ
```
というコマンドもあります。

== このパッケージが使えない場合
コンパイルができない場合などのトラブルがございましたら、https://github.com/kimushun1101/typst-jp-conf-template/issues でご相談ください。

= 原稿の体裁 <sec:format>
このテンプレートのソースコードはcharge-ieeeとabiding-ifacconfなどのテンプレートを参考にして作成しました。
テンプレートの検索はTypst Universe https://typst.app/universe ででき、そこで掲載されているテンプレートのソースコードは https://github.com/typst/packages/tree/main/packages/preview で見ることができます。
Expand All @@ -117,7 +115,7 @@ typst watch main.typ
アブストラクトは左右に 0.7 cm 余白を取っています。

フォントの設定は @tab:fonts の通りです。
ここで、ゴシック体や明朝体の具体的なフォントファミリーは @sec:info のコード内で設定しています。
ここで、ゴシック体や明朝体の具体的なフォントファミリーは @sec:paper-info のコード内で設定しています。

#figure(
placement: bottom,
Expand Down Expand Up @@ -173,7 +171,7 @@ typst watch main.typ

= 編集の仕方 <sec:edit>

== 論文情報の編集 <sec:info>
== 論文情報の編集 <sec:paper-info>
main.typ の文頭にある以下のコードを解説します。
```typ
// Select the Template
Expand Down Expand Up @@ -210,7 +208,7 @@ typst fonts
また、使用したいフォントがない場合には、フォントをインストールしてください。

== 基本的な文法
章は `=`、節は `==`小節は `===` で始めます。
章は `=`、節は `==`項は `===` で始めます。
改段落は LaTeX と同じく改行を 2 つ以上挟みます。
数字つき箇条書きは `+` で、数字なしの箇条書きは `-` を文頭につけて書くことができます。
テキストの装飾は text 関数で行えます。
Expand Down Expand Up @@ -342,7 +340,7 @@ CSLファイルは著者が編集する必要はありませんが、詳細が
完成原稿では推奨されませんが、引用されていない論文も記載したい場合には full: true にすれば、すべての文献が出力されます。

== 引用
引用は "\@label" と記述することで、数式であれば@eq:system、図であれば@fig:quadratic、表であれば@tab:fonts、セクションであれば@sec:edit、付録セクションであれば@appendix:edit、参考文献であれば@kimura2015asymptotic のように表示されます。
引用は "\@label" と記述することで、数式であれば@eq:system、図であれば@fig:quadratic、表であれば@tab:fonts、セクションであれば@sec:edit、節や項があるセクションであれば@sec:typst-install、付録セクションであれば@appendix:edit、参考文献であれば@kimura2015asymptotic のように表示されます。
参考文献は連続して引用すると@kimura2017state @kimura2021control @kimura2020facility @khalil2002control @sugie1999feedback @shimz2022visually と繋げられて表示されます。
文法上では特に規則はありませんが、個人的にはラベルの命名規則として、数式の場合には "eq:" から、図の場合には "fig:" から、表の場合には"tab:" から、セクションの場合には "sec:" から、付録セクションであれば "appendix:" から始めるようにラベル名を設定しており、参考文献のラベルは "著者名発行年タイトルの最初の単語"で名付けております。

Expand Down

0 comments on commit 4c3d977

Please sign in to comment.