如何限制Typst中outline.entry的文本长度?
解决Typst目录(Outline)长标题的换行/截断问题
方法1:强制标题文本换行(限制宽度)
通过解构outline.entry的元组结构,直接对标题文本设置宽度限制,实现自动换行:
show outline.entry: entry => { let (number, title, leader, page) = entry // 根据需求调整宽度值,这里设为15cm let wrapped_title = box(title, width: 15cm) (number, wrapped_title, leader, page) }
方法2:截断过长标题并添加省略号
若不需要换行,直接截断超出长度的标题文本:
show outline.entry: entry => { let (number, title, leader, page) = entry let title_str = str(title) // 设定最大字符数,这里示例为30 let truncated_title = title_str.len() > 30 ? text(title_str[0..30] + "...") : title (number, truncated_title, leader, page) }
方法3:换行+截断混合方案
优先让标题换行,超出指定高度后自动截断并添加省略号:
show outline.entry: entry => { let (number, title, leader, page) = entry let wrapped_title = box( title, width: 15cm, height: 2em, // 限制最大高度(约两行) overflow: "hidden", fill: text("...", align: right) ) (number, wrapped_title, leader, page) }
关键说明
Typst的outline.entry本质是包含章节编号、标题文本、引导线、页码的四元素元组。之前你使用show outline.entry: set box(...)只能修改元组后续元素,通过解构元组可以直接访问并修改标题部分,实现你需要的排版效果。
内容的提问来源于stack exchange,提问作者Henrik
相关产品推荐
相关产品推荐

