1"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[80],{64123:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>d,contentTitle:()=>r,default:()=>a,frontMatter:()=>l,metadata:()=>o,toc:()=>c});var s=n(85893),t=n(11151);const l={sidebar_position:8},r="Changelog",o={id:"changelog",title:"Changelog",description:"v0.7.4",source:"@site/docs/changelog.md",sourceDirName:".",slug:"/changelog",permalink:"/docs/changelog",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/en/changelog.md",tags:[],version:"current",sidebarPosition:8,frontMatter:{sidebar_position:8},sidebar:"tutorialSidebar",previous:{title:"Typst Preview in Tinymist",permalink:"/docs/external/typst-preview"},next:{title:"API Reference",permalink:"/docs/reference/"}},d={},c=[{value:"v0.7.4",id:"v074",level:2},{value:"Features",id:"features",level:3},{value:"Fixes",id:"fixes",level:3},{value:"v0.7.3",id:"v073",level:2},{value:"Minor Breaking Changes",id:"minor-breaking-changes",level:3},{value:"Migration Guide",id:"migration-guide",level:3},{value:"Features",id:"features-1",level:3},{value:"Documentation",id:"documentation",level:3},{value:"v0.7.1",id:"v071",level:2},{value:"Features",id:"features-2",level:3},{value:"Fixes",id:"fixes-1",level:3},{value:"v0.7.0",id:"v070",level:2},{value:"Features",id:"features-3",level:3},{value:"Fixes",id:"fixes-2",level:3},{value:"v0.6.3",id:"v063",level:2},{value:"Features",id:"features-4",level:3},{value:"Fixes",id:"fixes-3",level:3},{value:"Documentation",id:"documentation-1",level:3},{value:"Theme Migration Guide",id:"theme-migration-guide",level:3},{value:"v0.6.2",id:"v062",level:2},{value:"Features",id:"features-5",level:3},{value:"Fixes",id:"fixes-4",level:3},{value:"Miscellaneous",id:"miscellaneous",level:3},{value:"v0.6.1",id:"v061",level:2},{value:"v0.6.0",id:"v060",level:2},{value:"Features",id:"features-6",level:3},{value:"Fixes",id:"fixes-5",level:3},{value:"v0.5.4 & v0.5.5",id:"v054--v055",level:2},{value:"Features",id:"features-7",level:3},{value:"Fixes",id:"fixes-6",level:3},{value:"v0.5.3",id:"v053",level:2},{value:"Features",id:"features-8",level:3},{value:"Fixes",id:"fixes-7",level:3},{value:"v0.5.1 & v0.5.2",id:"v051--v052",level:2},{value:"v0.5.0",id:"v050",level:2},{value:"v0.4.2",id:"v042",level:2},{value:"v0.4.1",id:"v041",level:2},{value:"Features",id:"features-9",level:3},{value:"Fixes",id:"fixes-8",level:3},{value:"Miscellaneous Improvements",id:"miscellaneous-improvements",level:3},{value:"v0.4.0",id:"v040",level:2},{value:"Features",id:"features-10",level:3},{value:"Fixes",id:"fixes-9",level:3},{value:"Breaking changes",id:"breaking-changes",level:2},{value:"v0.3.3",id:"v033",level:2},{value:"v0.3.2",id:"v032",level:2},{value:"v0.3.1",id:"v031",level:2},{value:"v0.3.0",id:"v030",level:2},{value:"Features",id:"features-11",level:3},{value:"Documentation",id:"documentation-2",level:3},{value:"Refactor",id:"refactor",level:3},{value:"Fix",id:"fix",level:3},{value:"v0.2.1",id:"v021",level:2},{value:"Features",id:"features-12",level:3},{value:"Fix",id:"fix-1",level:3},{value:"v0.2.0",id:"v020",level:2}];function h(e){const i={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.h1,{id:"changelog",children:"Changelog"}),"\n",(0,s.jsx)(i.h2,{id:"v074",children:"v0.7.4"}),"\n",(0,s.jsx)(i.h3,{id:"features",children:"Features"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["feat: adds ",(0,s.jsx)(i.code,{children:"touying-reduce"})," which automatically looks up reducer bindings given a package (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/363",children:"#363"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["feat(i18n): add Polish locale for outline message (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/372",children:"#372"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["feat: Left/Right keyboard navigation support (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/352",children:"#352"}),")"]}
1),"\n",(0,s.jsxs)(i.li,{children:["feat: add ",(0,s.jsx)(i.code,{children:"grid-size"})," parameter to ",(0,s.jsx)(i.code,{children:"lazy-layout"})," for quantized position grouping, improving robustness of column/row detection"]}),"\n",(0,s.jsxs)(i.li,{children:["feat: add ",(0,s.jsx)(i.code,{children:"components.full-width-block"})," component that spans the full page width by cancelling horizontal margins"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"fixes",children:"Fixes"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["fix (minor breaking change): set ",(0,s.jsx)(i.code,{children:"lazy-layout"})," default to ",(0,s.jsx)(i.code,{children:"false"})," for ",(0,s.jsx)(i.code,{children:"cols"})]}),"\n",(0,s.jsxs)(i.li,{children:["fix: handle missing ",(0,s.jsx)(i.code,{children:"fn"})," field in mark warning message gracefully"]}),"\n",(0,s.jsxs)(i.li,{children:["fix: ",(0,s.jsx)(i.code,{children:"hide"})," doing unexpected things to headings (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/366",children:"#366"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["fix: export ",(0,s.jsx)(i.code,{children:"touying-fn-wrapper-raw"})," as part of the public API (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/362",children:"#362"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["fix: improved mark-warning, now also displayed as ",(0,s.jsx)(i.code,{children:"magic.warning"})," when ",(0,s.jsx)(i.code,{children:"enable-mark-warning"})," is ",(0,s.jsx)(i.code,{children:"false"})," (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/348",children:"#348"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["fix: warnings now emitted via ",(0,s.jsx)(i.code,{children:"uniwarn"})," (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/359",children:"#359"}),")"]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"v073",children:"v0.7.3"}),"\n",(0,s.jsx)(i.h3,{id:"minor-breaking-changes",children:"Minor Breaking Changes"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsxs)(i.strong,{children:["feat!: always attach ",(0,s.jsx)(i.code,{children:"#speaker-note[]"})," to the previous slide & default ",(0,s.jsx)(i.code,{children:"receive-body-for-new-*-slide-fn"})," to ",(0,s.jsx)(i.code,{children:"false"})]})," (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/354",children:"#354"}),")","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"#speaker-note[]"})," now always attaches to the ",(0,s.jsx)(i.strong,{children:"slide above it"}),", regardless of how that slide was created (explicit slide calls, heading-triggered section slides, or normal content slides). This eliminates the common pitfall where a ",(0,s.jsx)(i.code,{children:"#speaker-note[]"}),' placed after a slide would silently create an unwanted empty "ghost" slide.']}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"receive-body-for-new-section-slide-fn"})," and its variants are now ",(0,s.jsxs)(i.strong,{children:["defaulted to ",(0,s.jsx)(i.code,{children:"false"})]})," (previously ",(0,s.jsx)(i.code,{children:"true"}),")."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"migration-guide",children:"Migration Guide"}),"\n",(0,s.jsxs)(i.p,{children:["If you relied on content after ",(0,s.jsx)(i.code,{children:"= Section"})," headings being absorbed into the section slide body, explicitly set ",(0,s.jsx)(i.code,{children:"receive-body-for-new-section-slide-fn: true"})," in your ",(0,s.jsx)(i.code,{children:"config-common(...)"}),"."]}),"\n",(0,s.jsx)(i.h3,{id:"features-1",children:"Features"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["feat: ",(0,s.jsx)(i.code,{children:"item-by-item-fn"})," and presets for it (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/347",children:"#347"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["feat: improved ",(0,s.jsx)(i.code,{children:"custom-progressive-outline"})," and new ",(0,s.jsx)(i.code,{children:"section-relationship"})," and some other things (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/345",children:"#345"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["feat: better lazy-layout for mixed layouts (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/355",children:"#355"}),")"]}
1),"\n",(0,s.jsxs)(i.li,{children:["feat: add ",(0,s.jsx)(i.code,{children:"cols"})," as alias of ",(0,s.jsx)(i.code,{children:"side-by-side"})," and export some components ",(0,s.jsx)(i.code,{children:"cols"}),", ",(0,s.jsx)(i.code,{children:"lazy-xxx"})," to outside (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/356",children:"#356"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["theme(metropolis): add outline-slide for metropolis (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/349",children:"#349"}),")"]}),"\n",(0,s.jsx)(i.li,{children:"feat: add warning for empty slide content height detection"}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"documentation",children:"Documentation"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"docs: add multiple columns example and improve docs structure"}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"v071",children:"v0.7.1"}),"\n",(0,s.jsx)(i.h3,{id:"features-2",children:"Features"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["feat(agents): ",(0,s.jsx)(i.code,{children:"breakable"})," and ",(0,s.jsx)(i.code,{children:"clip"})," options to avoid slide overflow (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/336",children:"#336"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["feat(components): add ",(0,s.jsx)(i.code,{children:"lazy-v"})," (",(0,s.jsx)(i.code,{children:"lazy-h"}),") and ",(0,s.jsx)(i.code,{children:"lazy-layout"})," for equalizing multi-column (-row) block heights (widths) (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/339",children:"#339"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["feat: additional ",(0,s.jsx)(i.code,{children:"contact"})," and ",(0,s.jsx)(i.code,{children:"extra"})," field in ",(0,s.jsx)(i.code,{children:"config-info"})," (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/342",children:"#342"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["feat: ",(0,s.jsx)(i.code,{children:"touying-get-config"})," function (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/333",children:"#333"}),")"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"fixes-1",children:"Fixes"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["fix: fix ",(0,s.jsx)(i.code,{children:"fit-to-height"})," and ",(0,s.jsx)(i.code,{children:"size-to-pt"})," and allow text reflow (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/332",children:"#332"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["fix: fix waypoint markers (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/341",children:"#341"}),")"]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"v070",children:"v0.7.0"}),"\n",(0,s.jsx)(i.h3,{id:"features-3",children:"Features"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"major feature:"})," a named waypoint feature (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/298",children:"#298"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["feat(waypoint): start param and Waypoints in handout-subslides (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/304",children:"#304"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:['feat: auto, "h"-here string and inverse function for string subslide-numbers and waypoints (',(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/301",children:"#301"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["feat: implicitly allow fn-wrapper based animation functions via reducer (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/300",children:"#300"}),")"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"fixes-2",children:"Fixes"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["fix: fix cover-with-rect breaking long lines of text when partially hidden and fallback functions for color/alpha cover (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/328",children:"#328"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["fix: using explicit numbering in display-current-heading when style=auto (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/329",children:"#329"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["fix: fix ghost slides with show rules. Fix proper consistent handling of show rules and defer keyword (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/317",children:"#317"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["fix: alert not delayed (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/316",children:"#316"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["fix: remove redundant nested text call (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/324",children:"#324"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["fix: function alternatives-match takes into account parameter stretch (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/320",children:"#320"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["fix: correctly handle page margin merge/precedence (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/322",children:"#322"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["fix: fix cover spacing issues surrounding lists (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/303",children:"#303"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["fix: correctly parses negative subslide indices (ints, arrays) for handout-subslides (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/307",children:"#307"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["fix: slide function does not update via scoped import (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/310",children:"#310"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(i.p,{children:["Thanks for the contributions from ",(0,s.jsx)(i.a,{href:"https://github.com/zral0kh",children:"@zral0kh"}),", ",(0,s.jsx)(i.a,{href:"https://github.com/Andrew15-5",children:"@Andrew15-5"}),", ",(0,s.jsx)(i.a,{href:"https://github.com/navdeeprana",children:"@navdeeprana"}),", and ",(0,s.jsx)(i.a,{href:"https://github.com/Cemoixerestre",children:"@Cemoixerestre"}),"."]}),"\n",(0,s.jsx)(i.h2,{id:"v063",children:"v0.6.3"}),"\n",(0,s.jsx)(i.p,{children:"A major bugfix release, fixing many long-standing bugs and introducing many practical features."}),"\n",(0,s.jsx)(i.h3,{id:"features-4",children:"Features"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsxs)(i.strong,{children:["feat: add ",(0,s.jsx)(i.co
1de,{children:"#jump(n, relative: bool)"})," as unified animation control; redefine ",(0,s.jsx)(i.code,{children:"#pause"}),"/",(0,s.jsx)(i.code,{children:"#meanwhile"})," as sugar"]})}),"\n",(0,s.jsxs)(i.li,{children:["feat: add ",(0,s.jsx)(i.code,{children:"#handout-only"})," for inline content and ",(0,s.jsx)(i.code,{children:"<touying:handout>"})," label for handout-exclusive slides (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/286",children:"#286"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["feat: add ",(0,s.jsx)(i.code,{children:"handout-subslides"})," to control which subslides appear in handout mode (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/288",children:"#288"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["feat: add ",(0,s.jsx)(i.code,{children:"#touying-raw"})," for animated code block reveals (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/283",children:"#283"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["feat: add full-screen speaker notes mode with slide thumbnail (",(0,s.jsx)(i.code,{children:"show-only-notes"}),") (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/281",children:"#281"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["feat: support arbitrary aspect ratios (e.g. 16-10) across all themes and speaker-note second screen (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/280",children:"#280"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["feat: add ",(0,s.jsx)(i.code,{children:"#item-by-item"})," animation for list, enum, and terms (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/278",children:"#278"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["feat(recall): add subslide parameter to ",(0,s.jsx)(i.code,{children:"#touying-recall"})," (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/285",children:"#285"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["feat: add ",(0,s.jsx)(i.code,{children:"default-composer"})," to config-common for global slide layout configuration (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/284",children:"#284"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["feat: add ",(0,s.jsx)(i.code,{children:"cover-fn"})," parameter to ",(0,s.jsx)(i.code,{children:"uncover"})," for external package integration (e.g. Fletcher) (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/267",children:"#267"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["feat: minislides can be displayed inline (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/228",children:"#228"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["theme: improve appearance of long author lists in university and stargazer theme (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/242",children:"#242"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["theme(simple): make simple-theme respect color configuration for deco-format (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/252",children:"#252"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["theme(aqua,stargazer): add extra parameter to title-slide (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/291",children:"#291"}),")"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"fixes-3",children:"Fixes"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["fix: prevent ghost-slide blank pages from ",(0,s.jsx)(i.code,{children:"touying-set-config"})," anchor regression (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/289",children:"#289"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["fix: styled content on first slide no longer creates extra slides (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/287",children:"#287"}),")"]}),"\n",(0,s.jsx)(i.li,{children:"fix: remove unoutlined headings from navigation"}),"\n",(0,s.jsxs)(i.li,{children:["fix: fix ",(0,s.jsx)(i.code,{children:"#meanwhile"})," being ignored inside grid cells, boxes, and other containers (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/274",children:"#274"}),")"]}
1),"\n",(0,s.jsxs)(i.li,{children:["fix: fix ",(0,s.jsx)(i.code,{children:"config: parameter"})," silently ignored across all themes (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/273",children:"#273"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["fix: fix slides after ",(0,s.jsx)(i.code,{children:"#show"}),"/",(0,s.jsx)(i.code,{children:"#set"})," rules not rendering subsequent slides (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/268",children:"#268"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["fix: fix title page PDF page label causing pdfpc presenter notes mismatch (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/277",children:"#277"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["fix: fix duplicate label error for labeled footnotes with ",(0,s.jsx)(i.code,{children:"#pause"})," animations (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/275",children:"#275"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["fix: fix ",(0,s.jsx)(i.code,{children:"#pause"})," inside ",(0,s.jsx)(i.code,{children:"#speaker-note"})," body (nested list items) (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/282",children:"#282"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["theme(dewdrop): fix body content under level-1 heading was silently dropped (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/279",children:"#279"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["theme(stargazer): update stargazer theme margins and fix ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/259",children:"#259"})]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"documentation-1",children:"Documentation"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.strong,{children:"docs(BIG CHANGE): refactor docs website and add references page"})}),"\n",(0,s.jsxs)(i.li,{children:["docs: reduce README noise, improve first impression (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/297",children:"#297"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["docs: restructure docs + add docs-preview CI for PRs (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/296",children:"#296"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["docs: comprehensive docstring improvements across all source files (",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/294",children:"#294"}),")"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"theme-migration-guide",children:"Theme Migration Guide"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"For theme developers upgrading to v0.6.3:"})}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:[(0,s.jsxs)(i.strong,{children:["Move ",(0,s.jsx)(i.code,{children:"config"})," to the last position in ",(0,s.jsx)(i.code,{children:"utils.merge-dicts"})]})," to allow user overrides:"]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-typst",children:"// Before\nself = utils.merge-dicts(self, config, config-page(...))\n\n// After\nself = utils.merge-dicts(self, config-page(...), config)\n"})}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:[(0,s.jsxs)(i.strong,{children:["Replace ",(0,s.jsx)(i.code,{children:"paper"})," with ",(0,s.jsx)(i.code,{children:"utils.page-args-from-aspect-ratio"})]})," to support arbitrary aspect ratios:"]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-typst",children:'// Before\nconfig-page(paper: "presentation-" + aspect-ratio, ...)\n\n// After\nconfig-page(..utils.page-args-from-aspect-ratio(aspect-ratio), ...)\n'})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"v062",children:"v0.6.2"}),"\n",(0,s.jsx)(i.h3,{id:"features-5",children:"Features"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["feat: allow customisation of ",(0,s.jsx)(i.code,{children:"components.checkerboard"})," (#161)"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"fixes-4",children:"Fixes"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"fix: support ratio and relative margins for full-width headers (#256)"}
1),"\n",(0,s.jsxs)(i.li,{children:["fix: fix ",(0,s.jsx)(i.code,{children:"magic.bibliography-as-footnote"})," in Typst 0.14 (#249)"]}),"\n",(0,s.jsx)(i.li,{children:"fix: theorion package is broken with Typst 0.14.0 (#237)"}),"\n",(0,s.jsxs)(i.li,{children:["fix: update ",(0,s.jsx)(i.code,{children:"components.typ"})," and pass named arguments to grid (#207)"]}),"\n",(0,s.jsxs)(i.li,{children:["fix: fix ",(0,s.jsx)(i.code,{children:"#meanwhile"})," in cetz (#205)"]}),"\n",(0,s.jsx)(i.li,{children:"fix: documentation contains unclosed raw text error (#187)"}),"\n",(0,s.jsx)(i.li,{children:"fix: use correct circle symbol (#171)"}),"\n",(0,s.jsx)(i.li,{children:"fix: use regex to override colors of equations (#167)"}),"\n",(0,s.jsxs)(i.li,{children:["fix: ",(0,s.jsx)(i.code,{children:"show-hide-set-list-marker-none"})," with full enum (#157)"]}),"\n",(0,s.jsx)(i.li,{children:"fix: remove dump and label-it function for better cache"}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"miscellaneous",children:"Miscellaneous"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"docs: update README, bump versions of deps, and fix comment docs"}),"\n",(0,s.jsxs)(i.li,{children:["ci: add more tests, bump versions of ",(0,s.jsx)(i.code,{children:"tytanic"}),", and update typstyle workflow (#221, #261)"]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"v061",children:"v0.6.1"}
1),"\n",(0,s.jsxs)(i.p,{children:["Added support for the ",(0,s.jsx)(i.a,{href:"https://github.com/OrangeX4/typst-theorion",children:"theorion"})," package, and used it as the default math theorem environment."]}),"\n",(0,s.jsx)(i.h2,{id:"v060",children:"v0.6.0"}),"\n",(0,s.jsx)(i.p,{children:"It's not a big update, but it's the first touying release since typst 0.13 was released."}),"\n",(0,s.jsx)(i.h3,{id:"features-6",children:"Features"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["feat: add auto style for display-current-heading.","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["For users, you can use ",(0,s.jsx)(i.code,{children:"show heading: set text(blue)"})," to change color for heading in some themes like ",(0,s.jsx)(i.code,{children:"dewdrop"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["For theme creator, you can use syntax like ",(0,s.jsx)(i.code,{children:"utils.display-current-heading(level: 1, style: auto)"})," to achieve the same result."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["feat: apply config-info information to ",(0,s.jsx)(i.code,{children:"set document"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["feat: set ",(0,s.jsx)(i.code,{children:"stretch: false"})," by default for ",(0,s.jsx)(i.code,{children:"alternatives"})," functions. This is ",(0,s.jsx)(i.strong,{children:"a minor breaking change"}),", but I think it would be more intuitive: no auto empty space."]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"fixes-5",children:"Fixes"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"fix: fix error with uncover using semi-transparent-cover"}),"\n",(0,s.jsxs)(i.li,{children:["fix: fix type string comparison ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/153",children:"https://github.com/touying-typ/touying/pull/153"})]}),"\n",(0,s.jsx)(i.li,{children:"fix: fix horizontal-line bug in typst 0.13.0"}),"\n",(0,s.jsx)(i.li,{children:"refactor: fix display-current-short-heading"}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"v054--v055",children:"v0.5.4 & v0.5.5"}),"\n",(0,s.jsx)(i.h3,{id:"features-7",children:"Features"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["docs: improve param documentation and we have better hints for tinymist ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/98",children:"https://github.com/touying-typ/touying/pull/98"})]}),"\n",(0,s.jsxs)(i.li,{children:["feat: fake frozon states support for ",(0,s.jsx)(i.code,{children:"heading"})," ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/124",children:"https://github.com/touying-typ/touying/pull/124"})]}),"\n",(0,s.jsxs)(i.li,{children:["feat: add alpha-changing-cover and color-changing-cover ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/129",children:"https://github.com/touying-typ/touying/pull/129"})]}),"\n",(0,s.jsxs)(i.li,{children:["feat: add effect function ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/issues/111",children:"https://github.com/touying-typ/touying/issues/111"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Example: ",(0,s.jsx)(i.code,{children:'#effect(text.with(fill: red), "2-")[Something]'})," will display ",(0,s.jsx)(i.code,{children:"[Something]"})," if the current slide is 2 or later."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["feat: add argument ",(0,s.jsx)(i.code,{children:"config: (..)"})," for ",(0,s.jsx)(i.code,{children:"xxx-slide"})," functions"]}),"\n",(0,s.jsxs)(i.li,{children:["feat: add ",(0,s.jsx)(i.code,{children:"align"})," argument for university theme"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"fixes-6",children:"Fixes"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["fix: also hide enum numbers with show-hide-set-list-marker-none ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/114",children:"https://github.com/touying-typ/touying/pull/114"})]}),"\n",(0,s.jsxs)(i.li,{children:["fix: fixed progress bar not to break apart when global figure gutter is set nonzero ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/120",children:"https://github.com/touying-typ/touying/pull/120"})]}),"\n",(0,s.jsxs)(i.li,{children:["fix: fixed frozen-counters bug with multiple #pause commands ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/124",children:"https://github.com/touying-typ/touying/pull/124"})]}),"\n",(0,s.jsxs)(i.li,{children:["fix: fixed incorrect page num when draft is true ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/125",children:"https://github.com/touying-typ/touying/pull/125"})]}),"\n",(0,s.jsxs)(i.li,{children:["fix: fix behaviors of fit-to-height and fit-to-width partially ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/131",children:"https://github.com/touying-typ/touying/pull/131"})]}),"\n",(0,s.jsxs)(i.li,{children:["fix: duplicated footnotes in headings ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/132",children:"https://github.com/touying-typ/touying/pull/132"})]}
1),"\n",(0,s.jsxs)(i.li,{children:["fix: do not hardcode page sizes ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/134",children:"https://github.com/touying-typ/touying/pull/134"})]}),"\n",(0,s.jsxs)(i.li,{children:["fix: add default numbering for page ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/issues/100",children:"https://github.com/touying-typ/touying/issues/100"})]}),"\n",(0,s.jsxs)(i.li,{children:["refactor: move show-strong-with-alert to per-slide level ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/issues/123",children:"https://github.com/touying-typ/touying/issues/123"})]}),"\n",(0,s.jsxs)(i.li,{children:["refactor: remove unnecessary ",(0,s.jsx)(i.code,{children:"config-page(fill: ...)"})]}),"\n",(0,s.jsxs)(i.li,{children:["theme(metropolis): fix color of title page and fix ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/issues/103",children:"https://github.com/touying-typ/touying/issues/103"})]}),"\n",(0,s.jsxs)(i.li,{children:["theme(metropolis): fixed metropolis slide's header to return content if title is specified ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/126",children:"https://github.com/touying-typ/touying/pull/126"})]}),"\n",(0,s.jsxs)(i.li,{children:["theme(metropolis): respect colors dict in metropolis theme ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/133",children:"https://github.com/touying-typ/touying/pull/133"})]}),"\n"]}),"\n",(0,s.jsxs)(i.p,{children:["Thanks for the contributions from ",(0,s.jsx)(i.a,{href:"https://github.com/enklht",children:"@enklht"}),"."]}),"\n",(0,s.jsx)(i.h2,{id:"v053",children:"v0.5.3"}),"\n",(0,s.jsx)(i.h3,{id:"features-8",children:"Features"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["feat: add ",(0,s.jsx)(i.code,{children:"stretch"})," parameter for ",(0,s.jsx)(i.code,{children:"#alternatives[]"})," function class. This allows us to handle cases where the internal element is a context expression."]}),"\n",(0,s.jsxs)(i.li,{children:["feat: add ",(0,s.jsx)(i.code,{children:"config-common(align-enum-marker-with-baseline: true)"})," for aligning the enum marker with the baseline."]}),"\n",(0,s.jsxs)(i.li,{children:["feat: add ",(0,s.jsx)(i.code,{children:"linebreaks"})," option to ",(0,s.jsx)(i.code,{children:"components.mini-slides"}),". ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/pull/96",children:"https://github.com/touying-typ/touying/pull/96"})]}),"\n",(0,s.jsxs)(i.li,{children:["feat: add ",(0,s.jsx)(i.code,{children:"<touying:skip>"})," label to skip a new-section-slide."]}),"\n",(0,s.jsxs)(i.li,{children:["feat: add ",(0,s.jsx)(i.code,{children:"config-common(show-hide-set-list-marker-none: true)"})," to make the markers of ",(0,s.jsx)(i.code,{children:"list"})," and ",(0,s.jsx)(i.code,{children:"enum"})," invisible after ",(0,s.jsx)(i.code,{children:"#pause"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["feat: add ",(0,s.jsx)(i.code,{children:'config-common(bibliography-as-footnote: bibliography(title: none, "ref.bib"))'})," to display the bibliography in footnotes."]}),"\n",(0,s.jsxs)(i.li,{children:["refactor: add ",(0,s.jsx)(i.code,{children:"config-common(show-strong-with-alert: true)"})," configuration to display strong text with an alert. (small breaking change for some themes)"]}),"\n",(0,s.jsxs)(i.li,{children:["refactor: refactor ",(0,s.jsx)(i.code,{children:"display-current-heading"})," for preserving heading style in title and subtitle. ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/issues/71",children:"https://github.com/touying-typ/touying/issues/71"})]}),"\n",(0,s.jsxs)(i.li,{children:["refactor: make ",(0,s.jsx)(i.code,{children:"new-section-slide-fn"})," function class can receive ",(0,s.jsx)(i.code,{children:"body"})," parameter. We can use ",(0,s.jsx)(i.code,{children:"receive-body-for-new-section-slide-fn"})," to control it. ",(0,s.jsx)(i.strong,{children:"(Breaking change)"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["For example, you can add ",(0,s.jsx)(i.code,{children:"#speaker-note[]"}
1)," for a new section slide, like ",(0,s.jsx)(i.code,{children:"= Section Title \\ #speaker-note[]"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["If you don't want to append content to the body of the new section slide, you can use ",(0,s.jsx)(i.code,{children:"---"})," after the section title."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"fixes-7",children:"Fixes"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"fix outdated documentation."}),"\n",(0,s.jsxs)(i.li,{children:["fix bug of ",(0,s.jsx)(i.code,{children:"enable-frozen-states-and-counters"})," in handout mode."]}),"\n",(0,s.jsxs)(i.li,{children:["fix unusable ",(0,s.jsx)(i.code,{children:"square()"})," function. ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/issues/73",children:"https://github.com/touying-typ/touying/issues/73"})]}),"\n",(0,s.jsxs)(i.li,{children:["fix hidden footer for ",(0,s.jsx)(i.code,{children:"show-notes-on-second-screen: bottom"}),". ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/issues/89",children:"https://github.com/touying-typ/touying/issues/89"})]}),"\n",(0,s.jsxs)(i.li,{children:["fix metadata element in table cells. ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/issues/77",children:"https://github.com/touying-typ/touying/issues/77"})," ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/issues/95",children:"https://github.com/touying-typ/touying/issues/95"})]}),"\n",(0,s.jsxs)(i.li,{children:["fix ",(0,s.jsx)(i.code,{children:"auto-offset-for-heading"})," to ",(0,s.jsx)(i.code,{children:"false"})," by default."]}),"\n",(0,s.jsxs)(i.li,{children:["fix uncover/only hides more content than it should. ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/issues/85",children:"https://github.com/touying-typ/touying/issues/85"})]}),"\n",(0,s.jsxs)(i.li,{children:["theme(simple): fix wrong title and subtitle. ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/issues/70",children:"https://github.com/touying-typ/touying/issues/70"})]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"v051--v052",children:"v0.5.1 & v0.5.2"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Fix some bugs."}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"v050",children:"v0.5.0"}),"\n",(0,s.jsx)(i.p,{children:"This is a significant disruptive version update. Touying has removed many mistakes that resulted from incorrect decisions. We have redesigned numerous features. The goal of this version is to make Touying more user-friendly, more flexible, and more powerful."}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Major changes include:"})}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Avoiding closures and OOP syntax, which makes Touying's configuration simpler and allows for the use of document comments to provide more auto-completion information for the slide function.","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["The existing ",(0,s.jsx)(i.code,{children:"#let slide(self: none, ..args) = { .. }"})," is now ",(0,s.jsx)(i.code,{children:"#let slide(..args) = touying-slide-wrapper(self => { .. })"}),", where ",(0,s.jsx)(i.code,{children:"self"})," is automatically injected."]}),"\n",(0,s.jsxs)(i.li,{children:["We can use ",(0,s.jsx)(i.code,{children:"config-xxx"})," syntax to configure Touying, for example, ",(0,s.jsx)(i.code,{children:'#show: university-theme.with(aspect-ratio: "16-9", config-colors(primary: blue))'}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["The ",(0,s.jsx)(i.code,{children:"touying-slide"})," function no longer includes parameters like ",(0,s.jsx)(i.code,{children:"section"}),", ",(0,s.jsx)(i.code,{children:"subsection"}),", and ",(0,s.jsx)(i.code,{children:"title"}),". These will be automatically inserted into the slide as invisible level 1, 2, or 3 headings via ",(0,s.jsx)(i.code,{children:"self.headings"})," (controlled by the ",(0,s.jsx)(i.code,{children:"slide-level"})," configuration).","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"We can leverage the powerful headings provided by Typst to supp
1ort numbering, outlines, and bookmarks."}),"\n",(0,s.jsxs)(i.li,{children:["Headings within the ",(0,s.jsx)(i.code,{children:"#slide[= XXX]"})," function will be adjusted to level ",(0,s.jsx)(i.code,{children:"slide-level + 1"})," using the ",(0,s.jsx)(i.code,{children:"offset"})," parameter."]}),"\n",(0,s.jsxs)(i.li,{children:["We can use labels on headings to control many aspects, such as supporting the ",(0,s.jsx)(i.code,{children:"<touying:hidden>"})," and other special labels, implementing short headings, or recalling a slide with ",(0,s.jsx)(i.code,{children:"#touying-recall()"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["Touying now supports the normal use of ",(0,s.jsx)(i.code,{children:"set"})," and ",(0,s.jsx)(i.code,{children:"show"})," rules at any position, without requiring them to be in specific locations."]}),"\n"]}),"\n",(0,s.jsxs)(i.p,{children:["A simple usage example is shown below, and more examples can be found in the ",(0,s.jsx)(i.code,{children:"examples"})," directory:"]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-typst",children:'#import "@preview/touying:0.6.3": *\n#import themes.university: *\n\n#show: university-theme.with(\n aspect-ratio: "16-9",\n config-info(\n title: [Title],\n subtitle: [Subtitle],\n author: [Authors],\n date: datetime.today(),\n institution: [Institution],\n logo: emoji.school,\n ),\n)\n\n#set heading(numbering: "1.1")\n\n#title-slide()\n\n= The Section\n\n== Slide Title\n\n#lorem(40)\n'})}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Theme Migration Guide:"})}),"\n",(0,s.jsxs)(i.p,{children:["For detailed changes to specific themes, you can refer to the ",(0,s.jsx)(i.code,{children:"themes"})," directory. Generally, if you want to migrate an existing theme, you should:"]}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsxs)(i.li,{children:["Rename the ",(0,s.jsx)(i.code,{children:"register"})," function to ",(0,s.jsx)(i.code,{children:"xxx-theme"})," and remove the ",(0,s.jsx)(i.code,{children:"self"})," parameter."]}),"\n",(0,s.jsxs)(i.li,{children:["Add a ",(0,s.jsx)(i.code,{children:"show: touying-slides.with(..)"})," configuration.","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Change ",(0,s.jsx)(i.code,{children:"self.methods.colors"})," to ",(0,s.jsx)(i.code,{children:'config-colors(primary: rgb("#xxxxxx"))'}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["Change ",(0,s.jsx)(i.code,{children:"self.page-args"})," to ",(0,s.jsx)(i.code,{children:"config-page()"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["Change ",(0,s.jsx)(i.code,{children:"self.methods.slide = slide"})," to ",(0,s.jsx)(i.code,{children:"config-methods(slide: slide)"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["Change ",(0,s.jsx)(i.code,{children:"self.methods.new-section-slide = new-section-slide"})," to ",(0,s.jsx)(i.code,{children:"config-methods(new-section-slide: new-section-slide)"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["Change private theme variables like ",(0,s.jsx)(i.code,{children:"self.xxx-footer"})," to ",(0,s.jsx)(i.code,{children:"config-store(footer: [..])"}),", which you can access through ",(0,s.jsx)(i.code,{children:"self.store.footer"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["Move the configuration of headers and footers into the ",(0,s.jsx)(i.code,{children:"slide"})," function rather than in the ",(0,s.jsx)(i.code,{children:"xxx-theme"})," function."]}),"\n",(0,s.jsxs)(i.li,{children:["You can directly use ",(0,s.jsx)(i.code,{children:"set"})," or ",(0,s.jsx)(i.code,{children:"show"})," rules in ",(0,s.jsx)(i.code,{children:"xxx-theme"})," or configure them through ",(0,s.jsx)(i.code,{children:"config-methods(init: (self: none, body) => { .. })"})," to fully utilize the ",(0,s.jsx)(i.code,{children:"self"})," parameter."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["For ",(0,s.jsx)(i.code,{children:"states.current-section-with-numbering"}),", you can use ",(0,s.jsx)(i.code,{children:"utils.display-current-heading(level: 1)"})," instead.","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["If you only need the previous heading regardless of whether it is a section or a subsection, use ",(0,s.jsx)(i.co
1de,{children:"utils.display-current-heading()"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["The ",(0,s.jsx)(i.code,{children:"alert"})," function can be replaced with ",(0,s.jsx)(i.code,{children:"config-methods(alert: utils.alert-with-primary-color)"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["The ",(0,s.jsx)(i.code,{children:"touying-outline()"})," function is no longer needed; you can use ",(0,s.jsx)(i.code,{children:"components.adaptive-columns(outline())"})," instead. Consider using ",(0,s.jsx)(i.code,{children:"components.progressive-outline()"})," or ",(0,s.jsx)(i.code,{children:"components.custom-progressive-outline()"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["Replace ",(0,s.jsx)(i.code,{children:'states.slide-counter.display() + " / " + states.last-slide-number'})," with ",(0,s.jsx)(i.code,{children:'context utils.slide-counter.display() + " / " + utils.last-slide-number'}),". That is, we no longer use ",(0,s.jsx)(i.code,{children:"states"})," but ",(0,s.jsx)(i.code,{children:"utils"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["Remove the ",(0,s.jsx)(i.code,{children:"slides"})," function; we no longer need this function. Instead of implicitly injecting ",(0,s.jsx)(i.code,{children:"title-slide()"}),", explicitly use ",(0,s.jsx)(i.code,{children:"#title-slide()"}),". If necessary, consider adding it in the ",(0,s.jsx)(i.code,{children:"xxx-theme"})," function."]}),"\n",(0,s.jsxs)(i.li,{children:["Change ",(0,s.jsx)(i.code,{children:"#let slide(self: none, ..args) = { .. }"})," to ",(0,s.jsx)(i.code,{children:"#let slide(..args) = touying-slide-wrapper(self => { .. })"}),", where ",(0,s.jsx)(i.code,{children:"self"})," is automatically injected.","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Change specific parameter configurations to ",(0,s.jsx)(i.code,{children:"self = utils.merge-dicts(self, config-page(fill: self.colors.neutral-lightest))"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["Remove ",(0,s.jsx)(i.code,{children:"self = utils.empty-page(self)"})," and use ",(0,s.jsx)(i.code,{children:"config-common(freeze-slide-counter: true)"})," and ",(0,s.jsx)(i.code,{children:"config-page(margin: 0em)"})," instead."]}),"\n",(0,s.jsxs)(i.li,{children:["Change ",(0,s.jsx)(i.code,{children:"(self.methods.touying-slide)()"})," to ",(0,s.jsx)(i.code,{children:"touying-slide()"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["You can insert visible headings into slides by configuring ",(0,s.jsx)(i.code,{children:'config-common(subslide-preamble: self => text(1.2em, weight: "bold", utils.display-current-heading(depth: self.slide-level)))'}),"."]}),"\n",(0,s.jsx)(i.li,{children:"Finally, don't forget to add document comments to your functions so your users can get better auto-completion hints, especially when using the Tinymist plugin."}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"Other Changes:"})}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["theme(stargazer): new stargazer theme modified from ",(0,s.jsx)(i.a,{href:"https://github.com/Coekjan/touying-buaa",children:"Coekjan/touying-buaa"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["feat: implemented fake frozen states support, allowing you to use numbering and ",(0,s.jsx)(i.code,{children:"#pause"})," normally. This behavior can be controlled with ",(0,s.jsx)(i.code,{children:"enable-frozen-states-and-counters"}),", ",(0,s.jsx)(i.code,{children:"frozen-states"}),", and ",(0,s.jsx)(i.code,{children:"frozen-counters"})," in ",(0,s.jsx)(i.code,{children:"config-common()"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["feat: implemented ",(0,s.jsx)(i.code,{children:"label-only-on-last-subslide"})," functionality to prevent non-unique label warnings when working with ",(0,s.jsx)(i.code,{children:"@equation"})," and ",(0,s.jsx)(i.code,{children:"@figure"})," in conjunction with ",(0,s.jsx)(i.code,{children:"#pause"})," animations."]}),"\n",(0,s.jsxs)(i.li,{children:["feat: added the ",(0,s.jsx)(i.code,{children:"touying-recall(<label>)"})," function to replay a specific slide."]}),"\n",(0,s.jsxs)(i.li,{children:["feat: implemented ",(0,s.jsx)(i.co
1de,{children:"nontight-list-enum-and-terms"}),", which defaults to ",(0,s.jsx)(i.code,{children:"true"})," and forces ",(0,s.jsx)(i.code,{children:"list"}),", ",(0,s.jsx)(i.code,{children:"enum"}),", and ",(0,s.jsx)(i.code,{children:"terms"})," to have their ",(0,s.jsx)(i.code,{children:"tight"})," parameter set to ",(0,s.jsx)(i.code,{children:"false"}),". You can control spacing size with ",(0,s.jsx)(i.code,{children:"#set list(spacing: 1em)"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["feat: replaced ",(0,s.jsx)(i.code,{children:"list"})," with ",(0,s.jsx)(i.code,{children:"terms"})," implementation to achieve ",(0,s.jsx)(i.code,{children:"align-list-marker-with-baseline"}),", which is off by default."]}),"\n",(0,s.jsxs)(i.li,{children:["feat: implemented ",(0,s.jsx)(i.code,{children:"scale-list-items"}),", scaling list items by a factor, e.g., ",(0,s.jsx)(i.code,{children:"scale-list-items: 0.8"})," scales list items by 0.8."]}),"\n",(0,s.jsxs)(i.li,{children:["feat: supported direct use of ",(0,s.jsx)(i.code,{children:"#pause"})," and ",(0,s.jsx)(i.code,{children:"#meanwhile"})," in math expressions, such as ",(0,s.jsx)(i.code,{children:"$x + pause y$"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["feat: provided ",(0,s.jsx)(i.code,{children:"#pause"})," and ",(0,s.jsx)(i.code,{children:"#meanwhile"})," support for most layout functions, such as ",(0,s.jsx)(i.code,{children:"grid"})," and ",(0,s.jsx)(i.code,{children:"table"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["feat: added ",(0,s.jsx)(i.code,{children:"#show: appendix"})," support, essentially equivalent to ",(0,s.jsx)(i.code,{children:"#show: touying-set-config.with((appendix: true))"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["feat: Introduced special labels ",(0,s.jsx)(i.code,{children:"<touying:hidden>"}),", ",(0,s.jsx)(i.code,{children:"<touying:unnumbered>"}),", ",(0,s.jsx)(i.code,{children:"<touying:unoutlined>"}),", ",(0,s.jsx)(i.code,{children:"<touying:unbookmarked>"})," to simplify control over heading behavior."]}),"\n",(0,s.jsxs)(i.li,{children:["feat: added basic ",(0,s.jsx)(i.code,{children:"utils.short-heading"})," support to display short headings using labels, such as displaying ",(0,s.jsx)(i.code,{children:"<sec:my-section>"}),' as "My Section".']}),"\n",(0,s.jsxs)(i.li,{children:["feat: added ",(0,s.jsx)(i.code,{children:"#components.adaptive-columns()"})," to achieve adaptive columns that span a page, typically used with the ",(0,s.jsx)(i.code,{children:"outline()"})," function."]}),"\n",(0,s.jsxs)(i.li,{children:["feat: added ",(0,s.jsx)(i.code,{children:'#show: magic.bibliography-as-footnote.with(bibliography("ref.bib"))'})," to display the bibliography in footnotes."]}),"\n",(0,s.jsxs)(i.li,{children:["feat: added components like ",(0,s.jsx)(i.code,{children:"custom-progressive-outline"}),", ",(0,s.jsx)(i.code,{children:"mini-slides"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["feat: removed ",(0,s.jsx)(i.code,{children:"touying-outline()"}),", which can be directly replaced with ",(0,s.jsx)(i.code,{children:"outline()"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["fix: replaced potentially incompatible code, such as ",(0,s.jsx)(i.code,{children:'type(s) == "string"'})," and ",(0,s.jsx)(i.code,{children:"locate(loc => { .. })"}),"."]}),"\n",(0,s.jsx)(i.li,{children:"fix: Fixed some bugs."}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"v042",children:"v0.4.2"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["theme(metropolis): decoupled text color with ",(0,s.jsx)(i.code,{children:"neutral-dark"})," (Breaking change)"]}),"\n",(0,s.jsx)(i.li,{children:"feat: add mark-style uncover, only and alternatives"}),"\n",(0,s.jsx)(i.li,{children:"feat: add warning for styled block for slides"}),"\n",(0,s.jsx)(i.li,{children:"feat: add warning for touying-temporary-mark"}),"\n",(0,s.jsx)(i.li,{children:"feat: add markup-text for speaker-note"}),"\n",(0,s.jsx)(i.li,{children:"fix: fix bug of slides"}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"v041",children:"v0.4.1"}),"\n",(0,s.jsx)(i.h3,{id:"features-9",children:"Features"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"feat: support builtin outline and bookmark"}),"\n",(0,s.jsx)(i.li,{children:"feat: support speaker note for dual-screen"}),"\n",(0,s.jsx)(i.li,{children:"feat: add touying-mitex function"}),"\n",(0,s.jsxs)(i.li,{children:["feat: touying offers ",(0,s.jsx)(i.a,{href:"https://github.com/touying-typ/touying/wiki",children:"a gallery page"})," via wiki"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"fixes-8",children:"Fixes"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"fix: add outline-slide for dewdrop theme"}),"\n",(0,s.jsx)(i.li,{children:'fix: fix regression of default value "auto" for repeat'}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"miscellaneous-improvements",children:"Miscellaneous Improvements"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["feat: add list support for ",(0,s.jsx)(i.co
1de,{children:"touying-outline"})," function"]}),"\n",(0,s.jsx)(i.li,{children:"feat: add auto-reset-footnote"}),"\n",(0,s.jsxs)(i.li,{children:["feat: add ",(0,s.jsx)(i.code,{children:"freeze-in-empty-page"})," for better page counter"]}),"\n",(0,s.jsxs)(i.li,{children:["feat: add ",(0,s.jsx)(i.code,{children:"..args"})," for register method to capture unused arguments"]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"v040",children:"v0.4.0"}),"\n",(0,s.jsx)(i.h3,{id:"features-10",children:"Features"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"feat:"})," support ",(0,s.jsx)(i.code,{children:"#footnote[]"})," for all themes."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"feat:"})," access subslide and repeat in footer and header by ",(0,s.jsx)(i.code,{children:"self => self.subslide"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"feat:"})," support numbered theorem environments by ",(0,s.jsx)(i.a,{href:"https://typst.app/universe/package/ctheorems",children:"ctheorems"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"feat:"})," support numbering for sections and subsections."]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"fixes-9",children:"Fixes"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"fix:"})," make nested includes work correctly."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"fix:"})," disable multi-page slides from creating the same section multiple times."]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"refactor:"})," remove ",(0,s.jsx)(i.code,{children:"self.padding"})," and add ",(0,s.jsx)(i.code,{children:"self.full-header"})," ",(0,s.jsx)(i.code,{children:"self.full-footer"})," config."]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"v033",children:"v0.3.3"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"template:"})," move template to ",(0,s.jsx)(i.code,{children:"touying-aqua"})," package, make Touying searchable in ",(0,s.jsx)(i.a,{href:"https://typst.app/universe/search?kind=packages",children:"Typst Universe Packages"})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"themes:"})," fix bugs in university and dewdrop theme"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"feat:"})," make set-show rule work without ",(0,s.jsx)(i.code,{children:"setting"})," parameter"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"feat:"})," make ",(0,s.jsx)(i.code,{children:"composer"})," parameter more simpler"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"feat:"})," add ",(0,s.jsx)(i.code,{children:"empty-slide"})," function"]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"v032",children:"v0.3.2"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"fix critical bug:"})," fix ",(0,s.jsx)(i.code,{children:"is-sequence"})," function, make ",(0,s.jsx)(i.code,{children:"grid"})," and ",(0,s.jsx)(i.code,{children:"table"})," work correctly in touying"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"theme:"})," add aqua theme, thanks for pride7"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"theme:"})," make university theme more configurable"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"refactor:"})," don't export variable ",(0,s.jsx)(i.code,{children:"s"})," by default anymore, it will be extracted by ",(0,s.jsx)(i.code,{children:"register"})," function (",(0,s.jsx)(i.strong,{children:"Breaking Change"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"meta:"})," add ",(0,s.jsx)(i.code,{children:"categories"})," and ",(0,s.jsx)(i.code,{children:"template"})," config to ",(0,s.jsx)(i.code,{children:"typst.toml"})," for Typst 0.11"]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"v031",children:"v0.3.1"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"fix some typos"}),"\n",(0,s.jsx)(i.li,{children:"fix slide-level bug"}),"\n",(0,s.jsx)(i.li,{children:"fix bug of pdfpc label"}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"v030",children:"v0.3.0"}),"\n",(0,s.jsx)(i.h3,{id:"features-11",children:"Features"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"better show-slides mode."}),"\n",(0,s.jsx)(i.li,{children:"support align and pad."}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"documentation-2",children:"Documentation"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Add more detailed documentation."}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"refactor",children:"Refactor"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"simplify theme."}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"fix",children:"Fix"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"fix many bugs."}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"v021",children:"v0.2.1"}),"\n",(0,s.jsx)(i.h3,{id:"features-12",children:"Features"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Touying-reducer"}),": support cetz and fletcher animation"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"university theme"}),": add university theme"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"fix-1",children:"Fix"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"fix footer progress in metropolis theme"}),"\n",(0,s.jsx)(i.li,{children:"fix some bugs in simple and dewdrop themes"}),"\n",(0,s.jsx)(i.li,{children:"fix bug that outline does not display more than 4 sections"}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"v020",children:"v0.2.0"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Object-oriented programming:"}
1)," Singleton ",(0,s.jsx)(i.code,{children:"s"}),", binding methods ",(0,s.jsx)(i.code,{children:"utils.methods(s)"})," and ",(0,s.jsx)(i.code,{children:"(self: obj, ..) => {..}"})," methods."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Page arguments management:"})," Instead of using ",(0,s.jsx)(i.code,{children:"#set page(..)"}),", you should use ",(0,s.jsx)(i.code,{children:"self.page-args"})," to retrieve or set page parameters, thereby avoiding unnecessary creation of new pages."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsxs)(i.strong,{children:[(0,s.jsx)(i.code,{children:"#pause"})," for sequence content:"]})," You can use #pause at the outermost level of a slide, including inline and list."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsxs)(i.strong,{children:[(0,s.jsx)(i.code,{children:"#pause"})," for layout functions:"]})," You can use the ",(0,s.jsx)(i.code,{children:"composer"})," parameter to add yourself layout function like ",(0,s.jsx)(i.code,{children:"utils.side-by-side"}),", and simply use multiple pos parameters like ",(0,s.jsx)(i.code,{children:"#slide[..][..]"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsxs)(i.strong,{children:[(0,s.jsx)(i.code,{children:"#meanwhile"})," for synchronous display:"]})," Provide a ",(0,s.jsx)(i.code,{children:"#meanwhile"})," for resetting subslides counter."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsxs)(i.strong,{children:[(0,s.jsx)(i.code,{children:"#pause"})," and ",(0,s.jsx)(i.code,{children:"#meanwhile"})," for math equation:"]})," Provide a ",(0,s.jsx)(i.code,{children:'#touying-equation("x + y pause + z")'})," for math equation animations."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Slides:"})," Create simple slides using standard headings."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsxs)(i.strong,{children:["Callback-style ",(0,s.jsx)(i.code,{children:"uncover"}),", ",(0,s.jsx)(i.code,{children:"only"})," and ",(0,s.jsx)(i.code,{children:"alternatives"}),":"]})," Based on the concise syntax provided by Polylux, allow precise control of the timing for displaying content.","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["You should manually control the number of subslides using the ",(0,s.jsx)(i.code,{children:"repeat"})," parameter."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Transparent cover:"})," Enable transparent cover using oop syntax like ",(0,s.jsx)(i.code,{children:"#let s = (s.methods.enable-transparent-cover)(self: s)"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Handout mode:"})," enable handout mode by ",(0,s.jsx)(i.code,{children:"#let s = (s.methods.enable-handout-mode)(self: s)"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Fit-to-width and fit-to-height:"})," Fit-to-width for title in header and fit-to-height for image.","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:"utils.fit-to-width(grow: true, shrink: true, width, body)"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:"utils.fit-to-height(width: none, prescale-width: none, grow: true, shrink: true, height, body)"})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Slides counter:"})," ",(0,s.jsx)(i.code,{children:'states.slide-counter.display() + " / " + states.last-slide-number'})," and ",(0,s.jsx)(i.code,{children:"states.touying-progress(ratio => ..)"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Appendix:"})," Freeze the ",(0,s.jsx)(i.code,{children:"last-slide-number"})," to prevent the slide number from increasing further."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Sections:"})," Touying's built-in section support can be used to display the current section title and show progress.","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"section"})," and ",(0,s.jsx)(i.code,{children:"subsection"})," parameter in ",(0,s.jsx)(i.code,{children:"#slide"})," to register a new section or subsection."]}
1),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"states.current-section-title"})," to get the current section."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"states.touying-outline"})," or ",(0,s.jsx)(i.code,{children:"s.methods.touying-outline"})," to display a outline of sections."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"states.touying-final-sections(sections => ..)"})," for custom outline display."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"states.touying-progress-with-sections((current-sections: .., final-sections: .., current-slide-number: .., last-slide-number: ..) => ..)"})," for powerful progress display."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Navigation bar"}),": Navigation bar like ",(0,s.jsx)(i.a,{href:"https://github.com/zbowang/BeamerTheme",children:"here"})," by ",(0,s.jsx)(i.code,{children:"states.touying-progress-with-sections(..)"}),", in ",(0,s.jsx)(i.code,{children:"dewdrop"})," theme."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Pdfpc:"})," pdfpc support and export ",(0,s.jsx)(i.code,{children:".pdfpc"})," file without external tool by ",(0,s.jsx)(i.code,{children:"typst query"})," command simply."]}),"\n"]})]})}function a(e={}){const{wrapper:i}={...(0,t.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},11151:(e,i,n)=>{n.d(i,{Z:()=>o,a:()=>r});var s=n(67294);const t={},l=s.createContext(t);function r(e){const i=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function o(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(l.Provider,{value:i},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.