【Typst】6.布局函数

article/2025/6/7 15:24:53

概述

上节我们介绍了文档结构元素的函数,本节介绍一些控制布局使用的函数,掌握他们之后你可以更进一步的控制页面元素的布局。

系列目录

  • 1.Typst概述
  • 2.Typst标记语法和基础样式
  • 3.Typst脚本语法
  • 4.导入、包含和读取
  • 5.文档结构元素与函数
  • 6.布局函数

对齐

align(alignment, // 沿两个轴的对齐方式。默认:start + topcontent,   // 要对齐的内容。
) -> content

alignment可能的值为:

  • start:在文本方向的开头对齐。
  • end:在文本方向的末尾对齐。
  • left:向左对齐。
  • center:水平对齐。
  • right:在右侧对齐。
  • top:在顶部对齐。
  • horizon:垂直对齐。
  • bottom:在底部对齐。

整体使用:

#set align(center)
这是第一段 \
这是第二段 \
这是第三段 \

#align(left)[左对齐]
#align(center)[居中对齐]
#align(right)[右对齐]

#rect(width: 100%,height: 200pt
)[#align(left+top)[left+top]#align(center+horizon)[center+horizon]#align(right+bottom)[right+bottom]
]

旋转与角度

rotate(angle,   		    // 旋转量,角度或弧度,默认为0degorigin: alignment,  // 旋转的中心点,默认center + horizoncontent,            // 要旋转的内容
) -> content

angle可以赋予:

  • 角度值:如120deg,代表120°
  • 弧度值:如1.57rad,代表1/2弧度,也就是90°
// 以默认旋转中心,顺时针旋转45°
#rotate(45deg)[#rect()[旋转的内容]
]

// 以默认旋转中心,逆时针旋转45°
#rotate(-45deg)[#rect()[旋转的内容]
]

// 以默认旋转中心,顺时针旋转1.57弧度
#rotate(1.57rad)[#rect()[旋转的内容]
]

// 以左上角为旋转中心,顺时针旋转30°
#rotate(30deg,origin: top+left)[#rect()[旋转的内容]
]

缩放和翻转(镜像)

scale(x: ratio,   		// 水平缩放因子,默认:100%y: ratio,			// 垂直缩放因子,默认:100%origin: alignment,  // 缩放变换的原点,默认:center + horizoncontent,			// 要缩放的内容
) -> content
#rect(width:100%,
)[#set align(center)这里是原始效果// 水平翻转#scale(x:50%)[这里是水平压缩50%]#scale(x:150%)[这里是水平拉伸150%]#scale(x:-100%)[这里是水平翻转]// 垂直翻转#scale(y:50%)[这里是垂直压缩50%]#scale(y:450%)[这里是垂直拉伸450%]#scale(y:-100%)[这里是垂直翻转]
]

移动

move(dx: relative,  // 水平位移dy: relative,  // 垂直位移content,       // 要移动的内容
) -> content
#rect(inset: 0pt, move(dx: 6pt, dy: 6pt,rect(inset: 8pt,fill: white,stroke: black,[这里是内容])
))

block和box

block和box都可以看作是一个容器,只不过:

  • block是块级元素,无论宽度是否撑满页面宽度,始终是独占一行
  • box是行内元素,可以在行内与文字进行混排
block(width: auto relative,height: auto relative,breakable: bool,fill: none color gradient pattern,stroke: none length color gradient stroke pattern dictionary,radius: relative dictionary,inset: relative dictionary,outset: relative dictionary,spacing: relative fraction,above: relative fraction,below: relative fraction,clip: bool,nonecontent,
) -> content
box(width: auto relative fraction,height: auto relative,baseline: relative,fill: none color gradient pattern,stroke: none length color gradient stroke pattern dictionary,radius: relative dictionary,inset: relative dictionary,outset: relative dictionary,clip: bool,nonecontent,
) -> content

分栏

columns(int,                // 列数,默认为2gutter: relative,   // 列间距,默认:4%content,            // 分栏的内容
) -> content

强制换行可以用colbreak():

colbreak(weak:bool   //如果为 true,则如果当前列已为空,则跳过列分隔符。默认:false
) -> content

局部分栏

#columns()[  //默认分两栏#("这里是一段重复文本" * 20)#colbreak() //强制分栏#("这里是一段重复文本" * 20)
]

整页分栏

#set page(columns: 2)   // 设置当前页面整体分为两栏== 分栏#("这里是一段重复文本" * 20)
#colbreak() //强制分栏
#("这里是一段重复文本" * 20)

水平和垂直分布

stack(dir: direction,                  // 内容的排列方向,默认:ttbspacing: none relative fraction, // 内容间距relative fraction content,       // 要排列二点内容
) -> content

dir可能的值为:

  • ltr:从左到右。
  • rtl:从右到左。
  • ttb:从上到下。
  • btt:从下到上。
#stack(rect[1],rect[2],rect[3],
)

#stack(dir:direction.ltr,   // 由左向右排列rect[1],rect[2],rect[3],
)

#stack(dir:direction.ltr,spacing: 5pt,         // 设定水平间距rect[1],rect[2],rect[3],
)

水平和垂直间距

// 水平间距
h(relative fraction,   // 间距值weak: bool,
) -> content
// 垂直间距
v(relativefraction,    // 间距值weak: bool,
) -> content
随便写点什么 #h(2em) 后续的内容。

随便写点什么 #h(1fr) 后续的内容。\
随便写点什么2 #h(1fr) 后续的内容。

随便写点什么3 #v(1em) 后续的内容。

网格布局

grid(columns: auto int relative fraction array, // 列数或列设置rows: auto int relative fraction array,    // 行数或行设置gutter: auto int relati vefraction array,  // 行列间距column-gutter: auto int relative fraction array,  // 列间距,优先于 gutterrow-gutter: auto int relative fraction array,     // 行间距,优先于 guttercontent,    // 布局的子项
) -> content
#grid(columns: 2,rect[12],rect[12],rect[12],rect[12]
)
// 统一设置rect的样式
#set rect(width: 100%,height: 100pt
)#grid(columns: (100pt,1fr),  // 左侧宽100pt,右侧为页面剩余宽度rect[1],rect[2],rect[3],rect[4]
)

#set rect(width: 100%,height: 100pt
)#grid(columns: (100pt,1fr),gutter: 5pt,           // 统一设置行列间距rect[1],rect[2],rect[3],rect[4]
)

绝对定位

place()用于将内容绝对定位。

place(auto alignment,    // 位置,默认:startfloat: bool,       // 是否浮动布局,默认:falseclearance: length, // 放置的元素在浮动布局中的间隙量。默认:1.5emdx: relative,      // 水平位移dy: relative,      // 垂直位移content,           // 定位的内容
) -> content

隐藏

hide(content    // 要隐藏的内容
) -> content

重复

repeat(content    // 要重复的内容
) -> content

内容边距

pad(left: relative,   top: relative,right: relative,bottom: relative,x: relative,y: relative,rest: relative,content,
) -> content
#rect()[    // 外部矩形#pad(     left:100pt,     // 左侧边距100ptrect(           // 内部矩形width: 100%,height: 100pt,fill: rgb("#eee"),[左侧边距100pt]))
]

#rect()[    // 外部矩形#pad(     rest:100pt,     // 统一边距100ptrect(           // 内部矩形width: 100%,height: 100pt,fill: rgb("#eee"),[统一边距100pt]))
]

#rect()[    // 外部矩形#pad(     x:100pt,        // 左右边距100ptrect(           // 内部矩形width: 100%,height: 100pt,fill: rgb("#eee"),[左右边距100pt]))
]


http://www.hkcw.cn/article/NCURCOjKCi.shtml

相关文章

初识高通camx

一、chi和camx之间如何通信: Chi对Camx的操作,需要通过 ExtensionModule 进行操作,因此,CamX对外提供的接口扩展需要通过ExtensionModule进行,里面一个重要的变量就是g_chiContextOps。 Camx对Chi的操作,是…

NebulaAI V2.6.0发布:工作流功能正式上线!

2025年5月30日,NebulaAI V2.6.0版本正式上线! 在V2.6.0版本中,NBAI团队对工作流功能进行了重磅升级,用户可以通过创建工作流来与大模型交互: 支持选择常用大模型进行工作流的交互; 支持文件上传&#…

Flowith,有一种Agent叫无限

大家好,我是羊仔,专注AI工具、智能体、编程。 今天羊仔要和大家聊聊一个最近发现的超级实用的Agent平台,名字叫Flowith。 这篇文章会带你从零了解到实战体验,搞清楚Flowith是如何让工作效率飙升好几倍,甚至重新定义未…

【Linux系统编程】库制作与原理

目录 理解软硬链接 动态库与静态库 手动制作静态库并使用 制作静态库 使用静态库方法一 使用静态库方法二 使用静态库方法三 手动制作动态库并使用 制作动态库 使用动态库方法一 使用动态库方法二 使用动态库方法三 动静态库同时使用的细节说明 动态库的理解、动…

SAP学习笔记 - 开发20 - 前端Fiori开发 Nest View(嵌套视图) ,Fragment(片段)

上一章讲了Page和Panel,Shell Control(信箱效果),Margin / Padding,自定义CSS。 SAP学习笔记 - 开发19 - 前端Fiori开发 Page和Panel,Shell Control(信箱效果),Margin / Padding,自定义CSS-CSDN博客 本章…

选择正确的电平转换解决方案

1. 简介 在目前大多数电子系统中,对电压电平转换的需求非常普遍。 例如, ASIC可能在电源电压 VCCA 下工作,而 I/O器件可能在电源电压VCCB下工作。 为了使这些器件间能够互相通信,需要如下图所示的电平转换解决方案。   电子器件…

OpenLayers:通过自动布局调整解决Overlay重叠问题

一、解决Overlay重叠问题的尝试 我在最近的开发工作中遇到了一个问题。我开发的项目需要给地图上的站点添加Tooltip提示框(即Overlay),但是由于地图上的部分站点比较密集,导致Tooltip的重叠比较严重,部分Tooltip的内容…

7.5- Loading a pretrained LLM

Chapter 7-Fine-tuning to follow instructions 7.5- Loading a pretrained LLM 开始微调前,我们先加载GPT2模型,加载 3.55 亿参数的中型版本,因为 1.24 亿模型太小,无法通过指令微调获得定性合理的结果 ​ 加载 gpt2-medium (…

C++:内存管理

一.深入理解C/C的内存分布 以上是一张C/C 程序内存分区示意图: 栈区 存放内容:局部变量(如函数内部定义的普通变量 int a 10; )、函数的形式参数 。其特点是由编译器自动分配和释放,遵循先进后出原则,…

【结构型模式】装饰器模式

文章目录 装饰器模式装饰器模式当中的角色和职责装饰器模式的代码实现装饰器模式与代理模式有何不同?装饰器模式的优缺点适用场景 装饰器模式 装饰器模式(Decorator Pattern):动态地给一个对象增加一些额外的职责,对于…

Ubuntu 挂载新盘

1.磁盘分区 rootljz:/# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 4K 1 loop /snap/bare/5 loop1 7:1 0 104.2M 1 loop /snap/core/17200 loop2 7:2 0 73.9M 1 loop /snap/core22/1908 loop3 7:3 0 104.6M 1 loo…

Flink03-学习-套接字分词流自动写入工具

上一节中通过如下命令启动服务摸来模拟Socket流。 现在我们写一个ServerSocket来模拟让流自动写入不用手动操作。 pom.xml和上一节一致不需要修改 编写代码 同样适用Socket流 // 使用socket流创建一个从 socket 读取文本的数据流,以换行符 \n 作为分隔符DataStre…

2022年 国内税务年鉴PDF电子版Excel

2022年 国内税务年鉴PDF电子版Excelhttps://download.csdn.net/download/2401_84585615/89784658 https://download.csdn.net/download/2401_84585615/89784658 2022年国内税务年鉴是对中国税收政策、税制改革和税务管理实践的全面总结。这份年鉴详细记录了中国税收系统的整体状…

Gitee Wiki:以知识管理赋能 DevSecOps,推动关键领域软件自主演进

关键领域软件研发中的知识管理困境 传统文档管理模式问题显著 关键领域软件研发领域,传统文档管理模式问题显著:文档存储无系统,查找困难,降低效率;更新不及时,与实际脱节,误导开发&#xff1…

Hadoop 3.x 伪分布式 8088端口无法访问问题处理

【Hadoop】YARN ResourceManager 启动后 8088 端口无法访问问题排查与解决(伪分布式启动Hadoop) 在配置和启动 Hadoop YARN 模块时,发现虽然 ResourceManager 正常启动,JPS 进程中也显示无误,但通过浏览器访问 http://主机IP:8088 时却无法打…

【最小生成树】P2573 [SCOI2012] 滑雪

题目 洛谷:P2573 [SCOI2012] 滑雪 分析 题目条件要点分析: 这道题要求 i 能到达 j 的前提是 i 、j 之间有一条连通的边并且i 的高度比 j 高。这意味着本题给出的是一个有向图。时间胶囊可以返回到上一个景点,可以无限使用,意…

2.2.2 06年T2

Stratford的两大对立力量:令人讽刺的居民与令人同情的公司 - 2006年考研英语Text 2精析 本文解析2006年考研英语Text 2,揭示Stratford小镇居民与皇家莎士比亚剧团(RSC)的深层矛盾。 一、原文与翻译 Paragraph 1:对立双方的形成 L1: Stratfor…

基于人工智能算法实现的AI五子棋博弈

1. 项目概述 本项目实现了一个完整的五子棋游戏系统,包含游戏界面、交互逻辑和人工智能对战功能。 系统采用Python语言开发,使用Pygame库进行图形界面渲染,实现了三种游戏模式:人人对战、人机对战和AI对战。 AI算法基于博弈树搜…

在 Ubuntu 系统上使用 Python 的 Matplotlib 库时遇到的字体缺失问题

报错问题 findfont: Font family [SimHei] not found. Falling back to DejaVu Sans. 在现实图片时尝试显示中文字符命令行报错,在图片中显示方框。 最终解决方案 在尝试了各种方法之后,在代码中添加下图中选中行,问题直接解决。

webstrom中git插件勾选提交部分文件时却出现提交全部问题怎么解决

原因是我有个.husky的文件制定了执行提交的时候就是提交所有的文件 修改.husky/pre-commit文件就可以啦 #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh"# 获取通过 WebStorm 提交的暂存文件(仅勾选的部分) STAGED_FILES$(gi…