如何让Typst表格占满页面100%宽度?
如何让Typst表格占满页面宽度
核心解决思路:通过columns参数定义列宽实现撑满效果
Typst的table函数确实没有直接的width参数,但可以通过自定义列宽的方式让表格占满页面宽度,常用两种实现方式:
1. 用分数单位(fr)设置列宽比例
fr是相对比例单位,所有列的fr值总和会分配整个可用宽度,适合快速按比例分配列宽:
修改你的表格代码,将columns: 2替换为带宽度的数组即可:
#table( columns: (1fr, 3fr), // 第一列占1份,第二列占3份,总宽度自动撑满可用空间 align: left, [Sentence Index], [Text], [1549], [A ++], [362], [2000 Carr Futures], [642], [Slope : 0.1171 ( 0.0022 )], [1089], [Canon sx40 or canon s100 ?] )
如果需要两列均分宽度,直接写columns: (1fr, 1fr)即可。
2. 结合页面宽度计算绝对列宽
如果需要更精准的宽度控制,可以基于page().width计算列宽,扣除表格的inset和gutter后分配:
#let total-available-width = page().width - 2*1.0em // 扣除左右各1em的inset #table( columns: (total-available-width * 0.2, total-available-width * 0.8), // 第一列占20%,第二列占80% align: left, [Sentence Index], [Text], [1549], [A ++], [362], [2000 Carr Futures], [642], [Slope : 0.1171 ( 0.0022 )], [1089], [Canon sx40 or canon s100 ?] )
结合你的自定义表格规则
你的全局set table配置可以原样保留,只需要修改具体表格的columns参数。如果想让所有表格默认撑满宽度,也可以把列宽配置加到全局规则里:
// 全局自定义表格规则,默认两列均分宽度 set table( stroke: none, fill: (x, y) => if calc.even(y) == false { gray.transparentize(80%) }, inset: (x: 1.0em, y: 0.5em), gutter: 0.2em, row-gutter: 0em, column-gutter: 0em, columns: (1fr, 1fr) // 全局设置列宽比例 ) show table.cell.where(y: 0) : set text(weight: "bold") // 后续表格无需再指定columns,自动撑满宽度 #table( align: left, [Sentence Index], [Text], [1549], [A ++], [362], [2000 Carr Futures], [642], [Slope : 0.1171 ( 0.0022 )], [1089], [Canon sx40 or canon s100 ?] )
内容的提问来源于stack exchange,提问作者Hykilpikonna
相关产品推荐
相关产品推荐

