3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Typst】特定の種類のrefだけsupplementを変える

Posted at

問題例

画像のすぐ下には"Figure 1"などと表示するが、それを文中で引用する場合は"Fig. 1"などと、別の表記のsupplementにしたい。

つぎのように、何も考えずにTypstを作ると

#set page(columns: 2, fill: red.lighten(99%))
#set heading(numbering: "1.")
#set table(align: left, stroke: none)
#show figure.where(kind:table):set figure.caption(position: top)

= My Diary <MyDiary>
#figure(image("Shukugawara.jpeg"),
  caption: [Shukugawara #emoji.flower.pink]
)<Shukugawara>

#figure(image("Owakidani.jpeg"),
  caption: [Owakidani #emoji.chicken.egg]
)<Owakudani>

#figure(table(
  columns: 3,
  table.hline(),
  table.header([Name],[Age],[Birth]),
  table.hline(),
  [Sawara],[19],[4/1],
  [Kajika],[14],[2/14],
  [Shinju],[10],[8/28],
  table.hline()
),
caption: "Characters of Sanbon-Ribbon") <SR>

#colbreak()

= Refs
- @MyDiary
- @Shukugawara
- @Owakudani
- @SR

@Shukugawara@Owakudaniなどの、画像のrefを見てみると、supplementが"Figure "となっている。ここを"Fig. "としたい。
test.png

解決策

次のコードを追加する。

#set ref(supplement: it=>{
  let body-func = it.body.func()
  if body-func == image{
    [Fig. ]
  }else{
    it.supplement
  }
})

ref.supplementには関数を指定することができる。その関数は、参照対象にあるオブジェクトを受け取り、それに対するsupplementを返すことが期待されている。
そこで、参照対象の内容の関数を取り出し、それがimageであった場合に"Fig. "を、それ以外は参照対象デフォルトのsupplementをそのまま返す関数を当てはめる。
image.png
文中の画像の参照のみ"Fig. "というsupplementになった。

NG例

次のようなものを書いてしまうと・・・

#set ref(supplement: "Fig. ")

image.png
図以外の表や見出しのsupplementも書き換えられてしまうため、正しくない。

3
4
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
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?