当前位置: 首页 > news >正文

【Typst】6.布局函数

概述

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

系列目录

  • 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.xdnf.cn/news/790147.html

相关文章:

  • c# 显示正在运行的线程数
  • lsinitramfs命令
  • 新德通科技:以创新驱动光通信一体化发展,赋能全球智能互联
  • Vue3.5 企业级管理系统实战(二十二):动态菜单
  • 代码随想录60期day56
  • 海盗64位GameServer的使用体验
  • 【自动思考记忆系统】demo (Java版)
  • 记一次sql按经纬度计算距离
  • 市面上有真正的静态住宅ip吗?
  • android NDK 的 -> 是什么意思
  • LRC and VIP
  • mac环境下的python、pycharm和pip安装使用
  • C++核心编程_ 函数调用运算符重载
  • PPO: Proximal Policy Optimization Algorithms
  • 全面解析 Windows CE 定制流程:从内核到设备部署
  • 基于MATLAB的FTN调制和硬判决的实现
  • 手把手教你用Appsmith打造企业级低代码平台:从部署到性能调优实战
  • PPO和GRPO算法
  • 大模型的外围关键技术
  • 【面试】音视频面试
  • 亮数据网页解锁器:让数据触手探索亮数据解锁工具:打破网页数据采集的局限
  • GPIO的内部结构与功能解析
  • Spring Boot Actuator未授权访问漏洞修复
  • RS232/RS485 光电隔离转换器DAM-3210A
  • 学习STC51单片机26(芯片为STC89C52RCRC)
  • Python训练营打卡Day42
  • Java-IO流之字节输入流详解
  • Spring AOP 和 AspectJ 有什么区别
  • Unity ARPG战斗系统 _ RootMotion相关知识点
  • 如何构建自适应架构的镜像