Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions docs/FAQ/continued-table.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ tags: [code, table]
---
# 跨页的表格如何显示“续表”?

## 手动方法

```typst
#let xubiao = state("xubiao")
#set table(stroke: (x, y) => {
Expand All @@ -28,3 +30,85 @@ tags: [code, table]
}
)
```

## 包起来

```typst
#import "@preview/pointless-size:0.1.2": zh

#set page(paper: "a8")

#let continue-table-state = state("continue-table")

#let header-attach-cell(columns) = table.cell(colspan: columns, {
context if continue-table-state.get() != false {
place(right + top, dy: -1.4em)[
#set text(size: zh("五号"))
续表
]
v(-0.9em)
} else {
v(-0.9em)
continue-table-state.update(true)
}
})

#let continued-table = it => continue-table-state.update(false) + context {
if it.children.any(c => c.func() == table.header) {
return it
}

let meta = it.fields()
meta.remove("children")

let header = it.children.filter(c => c.func() == table.header)
let cells = it.children.filter(c => c.func() != table.header)
if header.len() == 0 {
let columns = meta.columns.len()
header = table.header(
header-attach-cell(columns),
..cells.slice(0, columns),
)
cells = cells.slice(columns)
} else {
let columns = meta.columns.len()
let children = if type(header) != array { header.children } else {
header.map(h => h.children).flatten()
}
header = table.header(
header-attach-cell(columns),
..children,
)
}

return table(
..meta,
header,
..cells,
)
}

#show table: continued-table

#show figure: set block(breakable: true)

#set figure(numbering: "1-1")

#figure(table(
columns: 4,
stroke: red,
..range(50).map(str),
))

#figure(table(
columns: 4,
// table.header(),
..range(50).map(str),
))

#figure(table(
columns: 4,
// table.header(),
..range(50).map(str),
))
```
Loading