diff --git a/404.html b/404.html index aa5d89f39..9f134ac72 100644 --- a/404.html +++ b/404.html @@ -3,12 +3,12 @@ -Page Not Found | Touying - - - +Page Not Found | Touying + + + -
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

\ No newline at end of file diff --git a/assets/js/06e0043a.c7037dab.js b/assets/js/06e0043a.c7037dab.js new file mode 100644 index 000000000..2061f86ba --- /dev/null +++ b/assets/js/06e0043a.c7037dab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4725],{5681:e=>{e.exports=JSON.parse('[{"label":"development","permalink":"/touying/blog/tags/development","count":1}]')}}]); \ No newline at end of file diff --git a/assets/js/09ecdeab.15c13872.js b/assets/js/09ecdeab.15c13872.js new file mode 100644 index 000000000..4f18ac1b4 --- /dev/null +++ b/assets/js/09ecdeab.15c13872.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9139],{7396:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var o=t(5893),c=t(1151);const i={sidebar_position:4},r="Cover Function",s={id:"dynamic/cover",title:"Cover Function",description:"As you already know, both uncover and #pause use the cover function to conceal content that is not visible. So, what exactly is the cover function here?",source:"@site/docs/dynamic/cover.md",sourceDirName:"dynamic",slug:"/dynamic/cover",permalink:"/touying/docs/dynamic/cover",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/dynamic/cover.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Math Equation Animations",permalink:"/touying/docs/dynamic/equation"},next:{title:"Handout Mode",permalink:"/touying/docs/dynamic/handout"}},a={},d=[{value:"Default Cover Function: hide",id:"default-cover-function-hide",level:2},{value:"Updating the Cover Function",id:"updating-the-cover-function",level:2},{value:"Semi-Transparent Cover Function",id:"semi-transparent-cover-function",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,c.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"cover-function",children:"Cover Function"}),"\n",(0,o.jsxs)(n.p,{children:["As you already know, both ",(0,o.jsx)(n.code,{children:"uncover"})," and ",(0,o.jsx)(n.code,{children:"#pause"})," use the ",(0,o.jsx)(n.code,{children:"cover"})," function to conceal content that is not visible. So, what exactly is the ",(0,o.jsx)(n.code,{children:"cover"})," function here?"]}),"\n",(0,o.jsxs)(n.h2,{id:"default-cover-function-hide",children:["Default Cover Function: ",(0,o.jsx)(n.code,{children:"hide"})]}),"\n",(0,o.jsxs)(n.p,{children:["The ",(0,o.jsx)(n.code,{children:"cover"})," function is a method stored in ",(0,o.jsx)(n.code,{children:"s.methods.cover"}),", which is later used by ",(0,o.jsx)(n.code,{children:"uncover"})," and ",(0,o.jsx)(n.code,{children:"#pause"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["The default ",(0,o.jsx)(n.code,{children:"cover"})," function is the ",(0,o.jsx)(n.a,{href:"https://typst.app/docs/reference/layout/hide/",children:"hide"})," function. This function makes the internal content invisible without affecting the layout."]}),"\n",(0,o.jsx)(n.h2,{id:"updating-the-cover-function",children:"Updating the Cover Function"}),"\n",(0,o.jsxs)(n.p,{children:["In some cases, you might want to use your own ",(0,o.jsx)(n.code,{children:"cover"})," function. In that case, you can set your own ",(0,o.jsx)(n.code,{children:"cover"})," function using:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-typst",children:"let s = (s.methods.update-cover)(self: s, is-method: true, cover-fn)\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Here, if you set ",(0,o.jsx)(n.code,{children:"is-method: false"}),", Touying will wrap ",(0,o.jsx)(n.code,{children:"cover-fn"})," into a method for you."]}),"\n",(0,o.jsx)(n.h2,{id:"semi-transparent-cover-function",children:"Semi-Transparent Cover Function"}),"\n",(0,o.jsx)(n.p,{children:"Touying supports a semi-transparent cover function, which can be enabled by adding:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-typst",children:"#let s = (s.methods.enable-transparent-cover)(self: s)\n"})}),"\n",(0,o.jsxs)(n.p,{children:["You can adjust the transparency through the ",(0,o.jsx)(n.code,{children:"alpha: .."})," parameter."]}),"\n",(0,o.jsx)(n.admonition,{title:"Warning",type:"warning",children:(0,o.jsxs)(n.p,{children:["Note that the ",(0,o.jsx)(n.code,{children:"transparent-cover"})," here does not preserve text layout like ",(0,o.jsx)(n.code,{children:"hide"})," does because it adds an extra layer of ",(0,o.jsx)(n.code,{children:"box"}),", which may disrupt the original structure of the page."]})}),"\n",(0,o.jsxs)(n.admonition,{title:"Internals",type:"tip",children:[(0,o.jsxs)(n.p,{children:["The ",(0,o.jsx)(n.code,{children:"enable-transparent-cover"})," method is defined as:"]}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-typst",children:"#let s.methods.enable-transparent-cover = (\n self: utils.empty-object,\n constructor: rgb,\n alpha: 85%,\n) => {\n self.methods.cover = (self: utils.empty-object, body) => {\n utils.cover-with-rect(\n fill: utils.update-alpha(\n constructor: constructor,\n self.page-args.fill,\n alpha,\n ),\n body\n )\n }\n self\n}\n"})}),(0,o.jsxs)(n.p,{children:["It creates a semi-transparent rectangular mask with the same color as the background to simulate the effect of transparent content. Here, ",(0,o.jsx)(n.code,{children:"constructor: rgb"})," and ",(0,o.jsx)(n.code,{children:"alpha: 85%"})," indicate the background color's construction function and transparency level, respectively."]})]})]})}function h(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>s,a:()=>r});var o=t(7294);const c={},i=o.createContext(c);function r(e){const n=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:r(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/09ecdeab.c2e1417f.js b/assets/js/09ecdeab.c2e1417f.js deleted file mode 100644 index 3847f7b2b..000000000 --- a/assets/js/09ecdeab.c2e1417f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9139],{7396:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>s,toc:()=>d});var o=t(5893),c=t(1151);const r={sidebar_position:4},i="Cover Function",s={id:"dynamic/cover",title:"Cover Function",description:"As you already know, both uncover and #pause use the cover function to conceal content that is not visible. So, what exactly is the cover function here?",source:"@site/docs/dynamic/cover.md",sourceDirName:"dynamic",slug:"/dynamic/cover",permalink:"/docs/dynamic/cover",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/dynamic/cover.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Math Equation Animations",permalink:"/docs/dynamic/equation"},next:{title:"Handout Mode",permalink:"/docs/dynamic/handout"}},a={},d=[{value:"Default Cover Function: hide",id:"default-cover-function-hide",level:2},{value:"Updating the Cover Function",id:"updating-the-cover-function",level:2},{value:"Semi-Transparent Cover Function",id:"semi-transparent-cover-function",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,c.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"cover-function",children:"Cover Function"}),"\n",(0,o.jsxs)(n.p,{children:["As you already know, both ",(0,o.jsx)(n.code,{children:"uncover"})," and ",(0,o.jsx)(n.code,{children:"#pause"})," use the ",(0,o.jsx)(n.code,{children:"cover"})," function to conceal content that is not visible. So, what exactly is the ",(0,o.jsx)(n.code,{children:"cover"})," function here?"]}),"\n",(0,o.jsxs)(n.h2,{id:"default-cover-function-hide",children:["Default Cover Function: ",(0,o.jsx)(n.code,{children:"hide"})]}),"\n",(0,o.jsxs)(n.p,{children:["The ",(0,o.jsx)(n.code,{children:"cover"})," function is a method stored in ",(0,o.jsx)(n.code,{children:"s.methods.cover"}),", which is later used by ",(0,o.jsx)(n.code,{children:"uncover"})," and ",(0,o.jsx)(n.code,{children:"#pause"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["The default ",(0,o.jsx)(n.code,{children:"cover"})," function is the ",(0,o.jsx)(n.a,{href:"https://typst.app/docs/reference/layout/hide/",children:"hide"})," function. This function makes the internal content invisible without affecting the layout."]}),"\n",(0,o.jsx)(n.h2,{id:"updating-the-cover-function",children:"Updating the Cover Function"}),"\n",(0,o.jsxs)(n.p,{children:["In some cases, you might want to use your own ",(0,o.jsx)(n.code,{children:"cover"})," function. In that case, you can set your own ",(0,o.jsx)(n.code,{children:"cover"})," function using:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-typst",children:"let s = (s.methods.update-cover)(self: s, is-method: true, cover-fn)\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Here, if you set ",(0,o.jsx)(n.code,{children:"is-method: false"}),", Touying will wrap ",(0,o.jsx)(n.code,{children:"cover-fn"})," into a method for you."]}),"\n",(0,o.jsx)(n.h2,{id:"semi-transparent-cover-function",children:"Semi-Transparent Cover Function"}),"\n",(0,o.jsx)(n.p,{children:"Touying supports a semi-transparent cover function, which can be enabled by adding:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-typst",children:"#let s = (s.methods.enable-transparent-cover)(self: s)\n"})}),"\n",(0,o.jsxs)(n.p,{children:["You can adjust the transparency through the ",(0,o.jsx)(n.code,{children:"alpha: .."})," parameter."]}),"\n",(0,o.jsx)(n.admonition,{title:"Warning",type:"warning",children:(0,o.jsxs)(n.p,{children:["Note that the ",(0,o.jsx)(n.code,{children:"transparent-cover"})," here does not preserve text layout like ",(0,o.jsx)(n.code,{children:"hide"})," does because it adds an extra layer of ",(0,o.jsx)(n.code,{children:"box"}),", which may disrupt the original structure of the page."]})}),"\n",(0,o.jsxs)(n.admonition,{title:"Internals",type:"tip",children:[(0,o.jsxs)(n.p,{children:["The ",(0,o.jsx)(n.code,{children:"enable-transparent-cover"})," method is defined as:"]}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-typst",children:"#let s.methods.enable-transparent-cover = (\n self: utils.empty-object,\n constructor: rgb,\n alpha: 85%,\n) => {\n self.methods.cover = (self: utils.empty-object, body) => {\n utils.cover-with-rect(\n fill: utils.update-alpha(\n constructor: constructor,\n self.page-args.fill,\n alpha,\n ),\n body\n )\n }\n self\n}\n"})}),(0,o.jsxs)(n.p,{children:["It creates a semi-transparent rectangular mask with the same color as the background to simulate the effect of transparent content. Here, ",(0,o.jsx)(n.code,{children:"constructor: rgb"})," and ",(0,o.jsx)(n.code,{children:"alpha: 85%"})," indicate the background color's construction function and transparency level, respectively."]})]})]})}function h(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>s,a:()=>i});var o=t(7294);const c={},r=o.createContext(c);function i(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:i(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0c7d33f3.48f611b9.js b/assets/js/0c7d33f3.48f611b9.js new file mode 100644 index 000000000..b95daa7f4 --- /dev/null +++ b/assets/js/0c7d33f3.48f611b9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4842],{5152:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var i=n(5893),o=n(1151);const s={sidebar_position:1},r="Object-Oriented Programming",c={id:"utilities/oop",title:"Object-Oriented Programming",description:"Touying provides some convenient utility functions for object-oriented programming.",source:"@site/docs/utilities/oop.md",sourceDirName:"utilities",slug:"/utilities/oop",permalink:"/touying/docs/utilities/oop",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/utilities/oop.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Utilities",permalink:"/touying/docs/category/utilities"},next:{title:"Fit to Height / Width",permalink:"/touying/docs/utilities/fit-to"}},l={},d=[];function a(e){const t={code:"code",h1:"h1",hr:"hr",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"object-oriented-programming",children:"Object-Oriented Programming"}),"\n",(0,i.jsx)(t.p,{children:"Touying provides some convenient utility functions for object-oriented programming."}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-typst",children:"#let empty-object = (methods: (:))\n"})}),"\n",(0,i.jsx)(t.p,{children:"An empty class."}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-typst",children:"#let call-or-display(self, it) = {\n if type(it) == function {\n return it(self)\n } else {\n return it\n }\n}\n"})}),"\n",(0,i.jsx)(t.p,{children:"Call or display as-is."}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-typst",children:"#let methods(self) = { .. }\n"})}),"\n",(0,i.jsx)(t.p,{children:"Used to bind self to methods and return, very commonly used."})]})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>r});var i=n(7294);const o={},s=i.createContext(o);function r(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0c7d33f3.76916aa7.js b/assets/js/0c7d33f3.76916aa7.js deleted file mode 100644 index ef44d8224..000000000 --- a/assets/js/0c7d33f3.76916aa7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4842],{5152:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var i=n(5893),o=n(1151);const s={sidebar_position:1},r="Object-Oriented Programming",c={id:"utilities/oop",title:"Object-Oriented Programming",description:"Touying provides some convenient utility functions for object-oriented programming.",source:"@site/docs/utilities/oop.md",sourceDirName:"utilities",slug:"/utilities/oop",permalink:"/docs/utilities/oop",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/utilities/oop.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Utilities",permalink:"/docs/category/utilities"},next:{title:"Fit to Height / Width",permalink:"/docs/utilities/fit-to"}},l={},d=[];function a(e){const t={code:"code",h1:"h1",hr:"hr",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"object-oriented-programming",children:"Object-Oriented Programming"}),"\n",(0,i.jsx)(t.p,{children:"Touying provides some convenient utility functions for object-oriented programming."}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-typst",children:"#let empty-object = (methods: (:))\n"})}),"\n",(0,i.jsx)(t.p,{children:"An empty class."}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-typst",children:"#let call-or-display(self, it) = {\n if type(it) == function {\n return it(self)\n } else {\n return it\n }\n}\n"})}),"\n",(0,i.jsx)(t.p,{children:"Call or display as-is."}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-typst",children:"#let methods(self) = { .. }\n"})}),"\n",(0,i.jsx)(t.p,{children:"Used to bind self to methods and return, very commonly used."})]})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>r});var i=n(7294);const o={},s=i.createContext(o);function r(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0e384e19.44a27d42.js b/assets/js/0e384e19.44a27d42.js new file mode 100644 index 000000000..a7e9f088a --- /dev/null +++ b/assets/js/0e384e19.44a27d42.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9671],{7876:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>s,metadata:()=>a,toc:()=>d});var i=o(5893),t=o(1151);const s={sidebar_position:1},r="Introduction to Touying",a={id:"intro",title:"Introduction to Touying",description:'Touying is a slide/presentation package developed for Typst, based on Polylux. Touying is similar to LaTeX Beamer but benefits from Typst, providing faster rendering speed and a more concise syntax. Hereafter, we use "slides" to refer to slideshows, "slide" for a single slide, and "subslide" for a sub-slide.',source:"@site/docs/intro.md",sourceDirName:".",slug:"/intro",permalink:"/touying/docs/intro",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Getting Started",permalink:"/touying/docs/start"}},l={},d=[{value:"Why Use Touying",id:"why-use-touying",level:2},{value:"About the Name",id:"about-the-name",level:2},{value:"About the Documentation",id:"about-the-documentation",level:2},{value:"Contribution",id:"contribution",level:2},{value:"License",id:"license",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"introduction-to-touying",children:"Introduction to Touying"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://github.com/touying-typ/touying",children:"Touying"})," is a slide/presentation package developed for Typst, based on ",(0,i.jsx)(n.a,{href:"https://github.com/andreasKroepelin/polylux",children:"Polylux"}),'. Touying is similar to LaTeX Beamer but benefits from Typst, providing faster rendering speed and a more concise syntax. Hereafter, we use "slides" to refer to slideshows, "slide" for a single slide, and "subslide" for a sub-slide.']}),"\n",(0,i.jsx)(n.h2,{id:"why-use-touying",children:"Why Use Touying"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:'Unlike PowerPoint, Touying is not a "what you see is what you get" tool. You can write your slides in a "content and style separation" manner, especially with Typst, which offers a concise yet powerful syntax, better supporting content like code blocks, mathematical formulas, and theorems. Another advantage is that, with templates, writing slides with Touying is much faster than PowerPoint. Therefore, Touying is more suitable for users with a demand for "research writing."'}),"\n",(0,i.jsxs)(n.li,{children:["Compared to Markdown Slides, Touying, relying on Typst, has more powerful typesetting control, such as headers, footers, layout, and convenient custom functions. These are capabilities that Markdown struggles to provide, or does not do well. Additionally, Touying offers ",(0,i.jsx)(n.code,{children:"#pause"})," and ",(0,i.jsx)(n.code,{children:"#meanwhile"})," markers, providing more convenient dynamic slide capabilities."]}),"\n",(0,i.jsx)(n.li,{children:"Compared to Beamer, Touying has faster compilation speed, a more concise syntax, and simpler theme customization capabilities. Touying's compilation speed can be maintained in milliseconds or tens of milliseconds, compared to Beamer's compilation time of seconds or tens of seconds. Touying's syntax is more concise than Beamer, making it easier to change templates and create your own templates. In terms of features, Touying supports most of Beamer's capabilities and provides some convenient features that Beamer lacks."}),"\n",(0,i.jsxs)(n.li,{children:['Compared to Polylux, Touying provides an object-oriented programming (OOP) style syntax, allowing the simulation of "global variables" through a global singleton. This makes it easy to write themes. Touying does not rely on ',(0,i.jsx)(n.code,{children:"counter"})," and ",(0,i.jsx)(n.code,{children:"locate"})," to implement ",(0,i.jsx)(n.code,{children:"#pause"}),", resulting in better performance. Touying is a community-driven project (we welcome more people to join), and it does not overly emphasize maintaining API consistency. Instead, it chooses to maintain documentation for multiple versions, providing more novel yet powerful features."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"about-the-name",children:"About the Name"}),"\n",(0,i.jsx)(n.p,{children:'"Touying" is derived from the Chinese word "\u6295\u5f71" (t\xf3uy\u01d0ng), which means "projection" In English, it also conveys the meaning of a "project". In comparison, the term "beamer" in LaTeX means a projector in German.'}),"\n",(0,i.jsx)(n.h2,{id:"about-the-documentation",children:"About the Documentation"}),"\n",(0,i.jsxs)(n.p,{children:["This documentation is powered by ",(0,i.jsx)(n.a,{href:"https://docusaurus.io/",children:"Docusaurus"}),". We will maintain English and Chinese versions of the documentation for Touying, and for each major version, we will maintain a documentation copy. This allows you to easily refer to old versions of the Touying documentation and migrate to new versions."]}),"\n",(0,i.jsx)(n.p,{children:"Docusaurus creates a new version:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"npm run docusaurus docs:version 0.y.x\n"})}),"\n",(0,i.jsx)(n.h2,{id:"contribution",children:"Contribution"}),"\n",(0,i.jsxs)(n.p,{children:["Touying is free, open-source, and community-driven. If you're interested, you can visit ",(0,i.jsx)(n.a,{href:"https://github.com/touying-typ/touying",children:"GitHub"})," anytime and raise issues or submit pull requests. We also welcome you to join the ",(0,i.jsx)(n.a,{href:"https://github.com/touying-typ",children:"touying-typ"})," organization."]}),"\n",(0,i.jsx)(n.h2,{id:"license",children:"License"}),"\n",(0,i.jsxs)(n.p,{children:["Touying is released under the ",(0,i.jsx)(n.a,{href:"https://github.com/touying-typ/touying/blob/main/LICENSE",children:"MIT license"}),"."]})]})}function u(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1151:(e,n,o)=>{o.d(n,{Z:()=>a,a:()=>r});var i=o(7294);const t={},s=i.createContext(t);function r(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0e384e19.c1c08c2b.js b/assets/js/0e384e19.c1c08c2b.js deleted file mode 100644 index 9dda3b96c..000000000 --- a/assets/js/0e384e19.c1c08c2b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9671],{7876:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>s,metadata:()=>a,toc:()=>d});var i=o(5893),t=o(1151);const s={sidebar_position:1},r="Introduction to Touying",a={id:"intro",title:"Introduction to Touying",description:'Touying is a slide/presentation package developed for Typst, based on Polylux. Touying is similar to LaTeX Beamer but benefits from Typst, providing faster rendering speed and a more concise syntax. Hereafter, we use "slides" to refer to slideshows, "slide" for a single slide, and "subslide" for a sub-slide.',source:"@site/docs/intro.md",sourceDirName:".",slug:"/intro",permalink:"/docs/intro",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Getting Started",permalink:"/docs/start"}},l={},d=[{value:"Why Use Touying",id:"why-use-touying",level:2},{value:"About the Name",id:"about-the-name",level:2},{value:"About the Documentation",id:"about-the-documentation",level:2},{value:"Contribution",id:"contribution",level:2},{value:"License",id:"license",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"introduction-to-touying",children:"Introduction to Touying"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://github.com/touying-typ/touying",children:"Touying"})," is a slide/presentation package developed for Typst, based on ",(0,i.jsx)(n.a,{href:"https://github.com/andreasKroepelin/polylux",children:"Polylux"}),'. Touying is similar to LaTeX Beamer but benefits from Typst, providing faster rendering speed and a more concise syntax. Hereafter, we use "slides" to refer to slideshows, "slide" for a single slide, and "subslide" for a sub-slide.']}),"\n",(0,i.jsx)(n.h2,{id:"why-use-touying",children:"Why Use Touying"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:'Unlike PowerPoint, Touying is not a "what you see is what you get" tool. You can write your slides in a "content and style separation" manner, especially with Typst, which offers a concise yet powerful syntax, better supporting content like code blocks, mathematical formulas, and theorems. Another advantage is that, with templates, writing slides with Touying is much faster than PowerPoint. Therefore, Touying is more suitable for users with a demand for "research writing."'}),"\n",(0,i.jsxs)(n.li,{children:["Compared to Markdown Slides, Touying, relying on Typst, has more powerful typesetting control, such as headers, footers, layout, and convenient custom functions. These are capabilities that Markdown struggles to provide, or does not do well. Additionally, Touying offers ",(0,i.jsx)(n.code,{children:"#pause"})," and ",(0,i.jsx)(n.code,{children:"#meanwhile"})," markers, providing more convenient dynamic slide capabilities."]}),"\n",(0,i.jsx)(n.li,{children:"Compared to Beamer, Touying has faster compilation speed, a more concise syntax, and simpler theme customization capabilities. Touying's compilation speed can be maintained in milliseconds or tens of milliseconds, compared to Beamer's compilation time of seconds or tens of seconds. Touying's syntax is more concise than Beamer, making it easier to change templates and create your own templates. In terms of features, Touying supports most of Beamer's capabilities and provides some convenient features that Beamer lacks."}),"\n",(0,i.jsxs)(n.li,{children:['Compared to Polylux, Touying provides an object-oriented programming (OOP) style syntax, allowing the simulation of "global variables" through a global singleton. This makes it easy to write themes. Touying does not rely on ',(0,i.jsx)(n.code,{children:"counter"})," and ",(0,i.jsx)(n.code,{children:"locate"})," to implement ",(0,i.jsx)(n.code,{children:"#pause"}),", resulting in better performance. Touying is a community-driven project (we welcome more people to join), and it does not overly emphasize maintaining API consistency. Instead, it chooses to maintain documentation for multiple versions, providing more novel yet powerful features."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"about-the-name",children:"About the Name"}),"\n",(0,i.jsx)(n.p,{children:'"Touying" is derived from the Chinese word "\u6295\u5f71" (t\xf3uy\u01d0ng), which means "projection" In English, it also conveys the meaning of a "project". In comparison, the term "beamer" in LaTeX means a projector in German.'}),"\n",(0,i.jsx)(n.h2,{id:"about-the-documentation",children:"About the Documentation"}),"\n",(0,i.jsxs)(n.p,{children:["This documentation is powered by ",(0,i.jsx)(n.a,{href:"https://docusaurus.io/",children:"Docusaurus"}),". We will maintain English and Chinese versions of the documentation for Touying, and for each major version, we will maintain a documentation copy. This allows you to easily refer to old versions of the Touying documentation and migrate to new versions."]}),"\n",(0,i.jsx)(n.p,{children:"Docusaurus creates a new version:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"npm run docusaurus docs:version 0.y.x\n"})}),"\n",(0,i.jsx)(n.h2,{id:"contribution",children:"Contribution"}),"\n",(0,i.jsxs)(n.p,{children:["Touying is free, open-source, and community-driven. If you're interested, you can visit ",(0,i.jsx)(n.a,{href:"https://github.com/touying-typ/touying",children:"GitHub"})," anytime and raise issues or submit pull requests. We also welcome you to join the ",(0,i.jsx)(n.a,{href:"https://github.com/touying-typ",children:"touying-typ"})," organization."]}),"\n",(0,i.jsx)(n.h2,{id:"license",children:"License"}),"\n",(0,i.jsxs)(n.p,{children:["Touying is released under the ",(0,i.jsx)(n.a,{href:"https://github.com/touying-typ/touying/blob/main/LICENSE",children:"MIT license"}),"."]})]})}function u(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1151:(e,n,o)=>{o.d(n,{Z:()=>a,a:()=>r});var i=o(7294);const t={},s=i.createContext(t);function r(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/10eff399.00ff6043.js b/assets/js/10eff399.00ff6043.js new file mode 100644 index 000000000..5654ef549 --- /dev/null +++ b/assets/js/10eff399.00ff6043.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9744],{7858:e=>{e.exports=JSON.parse('{"permalink":"/touying/blog/tags/development","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/2177108b.916bc5dd.js b/assets/js/2177108b.916bc5dd.js deleted file mode 100644 index 52612ceb0..000000000 --- a/assets/js/2177108b.916bc5dd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3943],{309:e=>{e.exports=JSON.parse('{"title":"Dynamic Slides","description":"To create animations in PDF, we need to create multiple slightly different pages for the same slide. This allows animation by switching between these pages, and we refer to these pages as subslides.","slug":"/category/dynamic-slides","permalink":"/docs/category/dynamic-slides","navigation":{"previous":{"title":"Code Styles","permalink":"/docs/style"},"next":{"title":"Simple Animations","permalink":"/docs/dynamic/simple"}}}')}}]); \ No newline at end of file diff --git a/assets/js/29a36bd7.2d438eb2.js b/assets/js/29a36bd7.2d438eb2.js deleted file mode 100644 index 9b75a8a26..000000000 --- a/assets/js/29a36bd7.2d438eb2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4694],{3061:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/development","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/2c0b54ac.5144745e.js b/assets/js/2c0b54ac.5144745e.js deleted file mode 100644 index 50aae4f29..000000000 --- a/assets/js/2c0b54ac.5144745e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[80],{8925:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>a,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var n=i(5893),s=i(1151);const o={sidebar_position:2},r="Fit to Height / Width",d={id:"utilities/fit-to",title:"Fit to Height / Width",description:"Thanks to ntjess for the code.",source:"@site/docs/utilities/fit-to.md",sourceDirName:"utilities",slug:"/utilities/fit-to",permalink:"/docs/utilities/fit-to",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/utilities/fit-to.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Object-Oriented Programming",permalink:"/docs/utilities/oop"},next:{title:"External Tools",permalink:"/docs/category/external-tools"}},c={},h=[{value:"Fit to Height",id:"fit-to-height",level:2},{value:"Fit to Width",id:"fit-to-width",level:2}];function l(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"fit-to-height--width",children:"Fit to Height / Width"}),"\n",(0,n.jsxs)(t.p,{children:["Thanks to ",(0,n.jsx)(t.a,{href:"https://github.com/ntjess",children:"ntjess"})," for the code."]}),"\n",(0,n.jsx)(t.h2,{id:"fit-to-height",children:"Fit to Height"}),"\n",(0,n.jsxs)(t.p,{children:["If you need to make an image fill the remaining slide height, you can try the ",(0,n.jsx)(t.code,{children:"fit-to-height"})," function:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-typst",children:"#fit-to-height(1fr)[BIG]\n"})}),"\n",(0,n.jsx)(t.p,{children:"Function definition:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-typst",children:"#let fit-to-height(\n width: none, prescale-width: none, grow: true, shrink: true, height, body\n) = { .. }\n"})}),"\n",(0,n.jsx)(t.p,{children:"Parameters:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"width"}),": If specified, this will determine the width of the content after scaling. So, if you want the scaled content to fill half of the slide width, you can use ",(0,n.jsx)(t.code,{children:"width: 50%"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"prescale-width"}),": This parameter allows you to make Typst's layout assume that the given content is to be laid out in a container of a certain width before scaling. For example, you can use ",(0,n.jsx)(t.code,{children:"prescale-width: 200%"})," assuming the slide's width is twice the original."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"grow"}),": Whether it can grow, default is ",(0,n.jsx)(t.code,{children:"true"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"shrink"}),": Whether it can shrink, default is ",(0,n.jsx)(t.code,{children:"true"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"height"}),": The specified height."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"body"}),": The specific content."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"fit-to-width",children:"Fit to Width"}),"\n",(0,n.jsxs)(t.p,{children:["If you need to limit the title width to exactly fill the slide width, you can try the ",(0,n.jsx)(t.code,{children:"fit-to-width"})," function:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-typst",children:"#fit-to-width(1fr)[#lorem(20)]\n"})}),"\n",(0,n.jsx)(t.p,{children:"Function definition:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-typst",children:"#let fit-to-width(grow: true, shrink: true, width, body) = { .. }\n"})}),"\n",(0,n.jsx)(t.p,{children:"Parameters:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"grow"}),": Whether it can grow, default is ",(0,n.jsx)(t.code,{children:"true"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"shrink"}),": Whether it can shrink, default is ",(0,n.jsx)(t.code,{children:"true"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"width"}),": The specified width."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"body"}),": The specific content."]}),"\n"]})]})}function a(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},1151:(e,t,i)=>{i.d(t,{Z:()=>d,a:()=>r});var n=i(7294);const s={},o=n.createContext(s);function r(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2c0b54ac.86a3428b.js b/assets/js/2c0b54ac.86a3428b.js new file mode 100644 index 000000000..a02bf6db6 --- /dev/null +++ b/assets/js/2c0b54ac.86a3428b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[80],{8925:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>a,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var n=i(5893),s=i(1151);const o={sidebar_position:2},r="Fit to Height / Width",d={id:"utilities/fit-to",title:"Fit to Height / Width",description:"Thanks to ntjess for the code.",source:"@site/docs/utilities/fit-to.md",sourceDirName:"utilities",slug:"/utilities/fit-to",permalink:"/touying/docs/utilities/fit-to",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/utilities/fit-to.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Object-Oriented Programming",permalink:"/touying/docs/utilities/oop"},next:{title:"External Tools",permalink:"/touying/docs/category/external-tools"}},c={},h=[{value:"Fit to Height",id:"fit-to-height",level:2},{value:"Fit to Width",id:"fit-to-width",level:2}];function l(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"fit-to-height--width",children:"Fit to Height / Width"}),"\n",(0,n.jsxs)(t.p,{children:["Thanks to ",(0,n.jsx)(t.a,{href:"https://github.com/ntjess",children:"ntjess"})," for the code."]}),"\n",(0,n.jsx)(t.h2,{id:"fit-to-height",children:"Fit to Height"}),"\n",(0,n.jsxs)(t.p,{children:["If you need to make an image fill the remaining slide height, you can try the ",(0,n.jsx)(t.code,{children:"fit-to-height"})," function:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-typst",children:"#fit-to-height(1fr)[BIG]\n"})}),"\n",(0,n.jsx)(t.p,{children:"Function definition:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-typst",children:"#let fit-to-height(\n width: none, prescale-width: none, grow: true, shrink: true, height, body\n) = { .. }\n"})}),"\n",(0,n.jsx)(t.p,{children:"Parameters:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"width"}),": If specified, this will determine the width of the content after scaling. So, if you want the scaled content to fill half of the slide width, you can use ",(0,n.jsx)(t.code,{children:"width: 50%"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"prescale-width"}),": This parameter allows you to make Typst's layout assume that the given content is to be laid out in a container of a certain width before scaling. For example, you can use ",(0,n.jsx)(t.code,{children:"prescale-width: 200%"})," assuming the slide's width is twice the original."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"grow"}),": Whether it can grow, default is ",(0,n.jsx)(t.code,{children:"true"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"shrink"}),": Whether it can shrink, default is ",(0,n.jsx)(t.code,{children:"true"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"height"}),": The specified height."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"body"}),": The specific content."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"fit-to-width",children:"Fit to Width"}),"\n",(0,n.jsxs)(t.p,{children:["If you need to limit the title width to exactly fill the slide width, you can try the ",(0,n.jsx)(t.code,{children:"fit-to-width"})," function:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-typst",children:"#fit-to-width(1fr)[#lorem(20)]\n"})}),"\n",(0,n.jsx)(t.p,{children:"Function definition:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-typst",children:"#let fit-to-width(grow: true, shrink: true, width, body) = { .. }\n"})}),"\n",(0,n.jsx)(t.p,{children:"Parameters:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"grow"}),": Whether it can grow, default is ",(0,n.jsx)(t.code,{children:"true"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"shrink"}),": Whether it can shrink, default is ",(0,n.jsx)(t.code,{children:"true"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"width"}),": The specified width."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"body"}),": The specific content."]}),"\n"]})]})}function a(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},1151:(e,t,i)=>{i.d(t,{Z:()=>d,a:()=>r});var n=i(7294);const s={},o=n.createContext(s);function r(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2d4a7f47.359d3d24.js b/assets/js/2d4a7f47.359d3d24.js new file mode 100644 index 000000000..598ce0ae1 --- /dev/null +++ b/assets/js/2d4a7f47.359d3d24.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9183],{9763:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>c,metadata:()=>l,toc:()=>r});var n=t(5893),i=t(1151);const c={slug:"touying-0-2-0",title:"Touying 0.2.0",authors:"orangex4",tags:["development"]},o=void 0,l={permalink:"/touying/blog/touying-0-2-0",editUrl:"https://github.com/touying-typ/touying/tree/main/docs/blog/2024-01-17-touying-0-2-0.md",source:"@site/blog/2024-01-17-touying-0-2-0.md",title:"Touying 0.2.0",description:"Touying 0.2.0 is done.",date:"2024-01-17T00:00:00.000Z",formattedDate:"January 17, 2024",tags:[{label:"development",permalink:"/touying/blog/tags/development"}],readingTime:1.875,hasTruncateMarker:!1,authors:[{name:"OrangeX4",title:"Maintainer of Touying.",url:"https://github.com/OrangeX4",imageURL:"https://orangex4.cool/images/icons/profile.jpg",key:"orangex4"}],frontMatter:{slug:"touying-0-2-0",title:"Touying 0.2.0",authors:"orangex4",tags:["development"]},unlisted:!1},d={authorsImageUrls:[void 0]},r=[{value:"Implemented Features",id:"implemented-features",level:2}];function a(e){const s={a:"a",code:"code",h2:"h2",input:"input",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.p,{children:"Touying 0.2.0 is done."}),"\n",(0,n.jsx)(s.h2,{id:"implemented-features",children:"Implemented Features"}),"\n",(0,n.jsxs)(s.ul,{className:"contains-task-list",children:["\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Object-oriented programming:"})," Singleton ",(0,n.jsx)(s.code,{children:"s"}),", binding methods ",(0,n.jsx)(s.code,{children:"utils.methods(s)"})," and ",(0,n.jsx)(s.code,{children:"(self: obj, ..) => {..}"})," methods."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Page arguments management:"})," Instead of using ",(0,n.jsx)(s.code,{children:"#set page(..)"}),", you should use ",(0,n.jsx)(s.code,{children:"self.page-args"})," to retrieve or set page parameters, thereby avoiding unnecessary creation of new pages."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsxs)(s.strong,{children:[(0,n.jsx)(s.code,{children:"#pause"})," for sequence content:"]})," You can use #pause at the outermost level of a slide, including inline and list."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsxs)(s.strong,{children:[(0,n.jsx)(s.code,{children:"#pause"})," for layout functions:"]})," You can use the ",(0,n.jsx)(s.code,{children:"composer"})," parameter to add yourself layout function like ",(0,n.jsx)(s.code,{children:"utils.side-by-side"}),", and simply use multiple pos parameters like ",(0,n.jsx)(s.code,{children:"#slide[..][..]"}),"."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsxs)(s.strong,{children:[(0,n.jsx)(s.code,{children:"#meanwhile"})," for synchronous display:"]})," Provide a ",(0,n.jsx)(s.code,{children:"#meanwhile"})," for resetting subslides counter."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsxs)(s.strong,{children:[(0,n.jsx)(s.code,{children:"#pause"})," and ",(0,n.jsx)(s.code,{children:"#meanwhile"})," for math equation:"]})," Provide a ",(0,n.jsx)(s.code,{children:'#touying-equation("x + y pause + z")'})," for math equation animations."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Slides:"})," Create simple slides using standard headings."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsxs)(s.strong,{children:["Callback-style ",(0,n.jsx)(s.code,{children:"uncover"}),", ",(0,n.jsx)(s.code,{children:"only"})," and ",(0,n.jsx)(s.code,{children:"alternatives"}),":"]})," Based on the concise syntax provided by Polylux, allow precise control of the timing for displaying content.","\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["You should manually control the number of subslides using the ",(0,n.jsx)(s.code,{children:"repeat"})," parameter."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Transparent cover:"})," Enable transparent cover using oop syntax like ",(0,n.jsx)(s.code,{children:"#let s = (s.methods.enable-transparent-cover)(self: s)"}),"."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Handout mode:"})," enable handout mode by ",(0,n.jsx)(s.code,{children:"#let s = (s.methods.enable-handout-mode)(self: s)"}),"."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Fit-to-width and fit-to-height:"})," Fit-to-width for title in header and fit-to-height for image.","\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.code,{children:"utils.fit-to-width(grow: true, shrink: true, width, body)"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.code,{children:"utils.fit-to-height(width: none, prescale-width: none, grow: true, shrink: true, height, body)"})}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Slides counter:"})," ",(0,n.jsx)(s.code,{children:'states.slide-counter.display() + " / " + states.last-slide-number'})," and ",(0,n.jsx)(s.code,{children:"states.touying-progress(ratio => ..)"}),"."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Appendix:"})," Freeze the ",(0,n.jsx)(s.code,{children:"last-slide-number"})," to prevent the slide number from increasing further."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Sections:"})," Touying's built-in section support can be used to display the current section title and show progress.","\n",(0,n.jsxs)(s.ul,{className:"contains-task-list",children:["\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.code,{children:"section"})," and ",(0,n.jsx)(s.code,{children:"subsection"})," parameter in ",(0,n.jsx)(s.code,{children:"#slide"})," to register a new section or subsection."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.code,{children:"states.current-section-title"})," to get the current section."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.code,{children:"states.touying-outline"})," or ",(0,n.jsx)(s.code,{children:"s.methods.touying-outline"})," to display a outline of sections."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.code,{children:"states.touying-final-sections(sections => ..)"})," for custom outline display."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.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,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Navigation bar"}),": Navigation bar like ",(0,n.jsx)(s.a,{href:"https://github.com/zbowang/BeamerTheme",children:"here"})," by ",(0,n.jsx)(s.code,{children:"states.touying-progress-with-sections(..)"}),", in ",(0,n.jsx)(s.code,{children:"dewdrop"})," theme."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Pdfpc:"})," pdfpc support and export ",(0,n.jsx)(s.code,{children:".pdfpc"})," file without external tool by ",(0,n.jsx)(s.code,{children:"typst query"})," command simply."]}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},1151:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>o});var n=t(7294);const i={},c=n.createContext(i);function o(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2d4a7f47.cf888ef4.js b/assets/js/2d4a7f47.cf888ef4.js deleted file mode 100644 index 738ffc830..000000000 --- a/assets/js/2d4a7f47.cf888ef4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9183],{9763:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>l,default:()=>h,frontMatter:()=>c,metadata:()=>o,toc:()=>r});var n=t(5893),i=t(1151);const c={slug:"touying-0-2-0",title:"Touying 0.2.0",authors:"orangex4",tags:["development"]},l=void 0,o={permalink:"/blog/touying-0-2-0",editUrl:"https://github.com/touying-typ/touying/tree/main/docs/blog/2024-01-17-touying-0-2-0.md",source:"@site/blog/2024-01-17-touying-0-2-0.md",title:"Touying 0.2.0",description:"Touying 0.2.0 is done.",date:"2024-01-17T00:00:00.000Z",formattedDate:"January 17, 2024",tags:[{label:"development",permalink:"/blog/tags/development"}],readingTime:1.875,hasTruncateMarker:!1,authors:[{name:"OrangeX4",title:"Maintainer of Touying.",url:"https://github.com/OrangeX4",imageURL:"https://orangex4.cool/images/icons/profile.jpg",key:"orangex4"}],frontMatter:{slug:"touying-0-2-0",title:"Touying 0.2.0",authors:"orangex4",tags:["development"]},unlisted:!1},d={authorsImageUrls:[void 0]},r=[{value:"Implemented Features",id:"implemented-features",level:2}];function a(e){const s={a:"a",code:"code",h2:"h2",input:"input",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.p,{children:"Touying 0.2.0 is done."}),"\n",(0,n.jsx)(s.h2,{id:"implemented-features",children:"Implemented Features"}),"\n",(0,n.jsxs)(s.ul,{className:"contains-task-list",children:["\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Object-oriented programming:"})," Singleton ",(0,n.jsx)(s.code,{children:"s"}),", binding methods ",(0,n.jsx)(s.code,{children:"utils.methods(s)"})," and ",(0,n.jsx)(s.code,{children:"(self: obj, ..) => {..}"})," methods."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Page arguments management:"})," Instead of using ",(0,n.jsx)(s.code,{children:"#set page(..)"}),", you should use ",(0,n.jsx)(s.code,{children:"self.page-args"})," to retrieve or set page parameters, thereby avoiding unnecessary creation of new pages."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsxs)(s.strong,{children:[(0,n.jsx)(s.code,{children:"#pause"})," for sequence content:"]})," You can use #pause at the outermost level of a slide, including inline and list."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsxs)(s.strong,{children:[(0,n.jsx)(s.code,{children:"#pause"})," for layout functions:"]})," You can use the ",(0,n.jsx)(s.code,{children:"composer"})," parameter to add yourself layout function like ",(0,n.jsx)(s.code,{children:"utils.side-by-side"}),", and simply use multiple pos parameters like ",(0,n.jsx)(s.code,{children:"#slide[..][..]"}),"."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsxs)(s.strong,{children:[(0,n.jsx)(s.code,{children:"#meanwhile"})," for synchronous display:"]})," Provide a ",(0,n.jsx)(s.code,{children:"#meanwhile"})," for resetting subslides counter."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsxs)(s.strong,{children:[(0,n.jsx)(s.code,{children:"#pause"})," and ",(0,n.jsx)(s.code,{children:"#meanwhile"})," for math equation:"]})," Provide a ",(0,n.jsx)(s.code,{children:'#touying-equation("x + y pause + z")'})," for math equation animations."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Slides:"})," Create simple slides using standard headings."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsxs)(s.strong,{children:["Callback-style ",(0,n.jsx)(s.code,{children:"uncover"}),", ",(0,n.jsx)(s.code,{children:"only"})," and ",(0,n.jsx)(s.code,{children:"alternatives"}),":"]})," Based on the concise syntax provided by Polylux, allow precise control of the timing for displaying content.","\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["You should manually control the number of subslides using the ",(0,n.jsx)(s.code,{children:"repeat"})," parameter."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Transparent cover:"})," Enable transparent cover using oop syntax like ",(0,n.jsx)(s.code,{children:"#let s = (s.methods.enable-transparent-cover)(self: s)"}),"."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Handout mode:"})," enable handout mode by ",(0,n.jsx)(s.code,{children:"#let s = (s.methods.enable-handout-mode)(self: s)"}),"."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Fit-to-width and fit-to-height:"})," Fit-to-width for title in header and fit-to-height for image.","\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.code,{children:"utils.fit-to-width(grow: true, shrink: true, width, body)"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.code,{children:"utils.fit-to-height(width: none, prescale-width: none, grow: true, shrink: true, height, body)"})}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Slides counter:"})," ",(0,n.jsx)(s.code,{children:'states.slide-counter.display() + " / " + states.last-slide-number'})," and ",(0,n.jsx)(s.code,{children:"states.touying-progress(ratio => ..)"}),"."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Appendix:"})," Freeze the ",(0,n.jsx)(s.code,{children:"last-slide-number"})," to prevent the slide number from increasing further."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Sections:"})," Touying's built-in section support can be used to display the current section title and show progress.","\n",(0,n.jsxs)(s.ul,{className:"contains-task-list",children:["\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.code,{children:"section"})," and ",(0,n.jsx)(s.code,{children:"subsection"})," parameter in ",(0,n.jsx)(s.code,{children:"#slide"})," to register a new section or subsection."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.code,{children:"states.current-section-title"})," to get the current section."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.code,{children:"states.touying-outline"})," or ",(0,n.jsx)(s.code,{children:"s.methods.touying-outline"})," to display a outline of sections."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.code,{children:"states.touying-final-sections(sections => ..)"})," for custom outline display."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.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,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Navigation bar"}),": Navigation bar like ",(0,n.jsx)(s.a,{href:"https://github.com/zbowang/BeamerTheme",children:"here"})," by ",(0,n.jsx)(s.code,{children:"states.touying-progress-with-sections(..)"}),", in ",(0,n.jsx)(s.code,{children:"dewdrop"})," theme."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Pdfpc:"})," pdfpc support and export ",(0,n.jsx)(s.code,{children:".pdfpc"})," file without external tool by ",(0,n.jsx)(s.code,{children:"typst query"})," command simply."]}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},1151:(e,s,t)=>{t.d(s,{Z:()=>o,a:()=>l});var n=t(7294);const i={},c=n.createContext(i);function l(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/32e572c7.c575baad.js b/assets/js/32e572c7.c575baad.js deleted file mode 100644 index 8e72bfa64..000000000 --- a/assets/js/32e572c7.c575baad.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2340],{1564:i=>{i.exports=JSON.parse('{"title":"Utilities","description":"Some convenient utility functions.","slug":"/category/utilities","permalink":"/docs/category/utilities","navigation":{"previous":{"title":"Touying Sections","permalink":"/docs/progress/sections"},"next":{"title":"Object-Oriented Programming","permalink":"/docs/utilities/oop"}}}')}}]); \ No newline at end of file diff --git a/assets/js/393be207.6407eb36.js b/assets/js/393be207.6407eb36.js deleted file mode 100644 index a13bdf216..000000000 --- a/assets/js/393be207.6407eb36.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7414],{1181:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>l,frontMatter:()=>r,metadata:()=>p,toc:()=>d});var o=t(5893),a=t(1151);const r={title:"Markdown page example"},s="Markdown page example",p={type:"mdx",permalink:"/markdown-page",source:"@site/src/pages/markdown-page.md",title:"Markdown page example",description:"You don't need React to write simple standalone pages.",frontMatter:{title:"Markdown page example"},unlisted:!1},c={},d=[];function i(e){const n={h1:"h1",p:"p",...(0,a.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"markdown-page-example",children:"Markdown page example"}),"\n",(0,o.jsx)(n.p,{children:"You don't need React to write simple standalone pages."})]})}function l(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(i,{...e})}):i(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>p,a:()=>s});var o=t(7294);const a={},r=o.createContext(a);function s(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function p(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/393be207.dbd0b852.js b/assets/js/393be207.dbd0b852.js new file mode 100644 index 000000000..bc32410d1 --- /dev/null +++ b/assets/js/393be207.dbd0b852.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7414],{1181:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>l,frontMatter:()=>r,metadata:()=>p,toc:()=>d});var o=t(5893),a=t(1151);const r={title:"Markdown page example"},s="Markdown page example",p={type:"mdx",permalink:"/touying/markdown-page",source:"@site/src/pages/markdown-page.md",title:"Markdown page example",description:"You don't need React to write simple standalone pages.",frontMatter:{title:"Markdown page example"},unlisted:!1},c={},d=[];function i(e){const n={h1:"h1",p:"p",...(0,a.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"markdown-page-example",children:"Markdown page example"}),"\n",(0,o.jsx)(n.p,{children:"You don't need React to write simple standalone pages."})]})}function l(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(i,{...e})}):i(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>p,a:()=>s});var o=t(7294);const a={},r=o.createContext(a);function s(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function p(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/396cf6b9.c8033c26.js b/assets/js/396cf6b9.c8033c26.js new file mode 100644 index 000000000..9a6471164 --- /dev/null +++ b/assets/js/396cf6b9.c8033c26.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9705],{4885:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>r});var i=s(5893),t=s(1151);const o={sidebar_position:1},d="Simple Animations",a={id:"dynamic/simple",title:"Simple Animations",description:"Touying provides two markers for simple animation effects: #pause and #meanwhile.",source:"@site/docs/dynamic/simple.md",sourceDirName:"dynamic",slug:"/dynamic/simple",permalink:"/touying/docs/dynamic/simple",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/dynamic/simple.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Dynamic Slides",permalink:"/touying/docs/category/dynamic-slides"},next:{title:"Complex Animations",permalink:"/touying/docs/dynamic/complex"}},l={},r=[{value:"pause",id:"pause",level:2},{value:"meanwhile",id:"meanwhile",level:2},{value:"Handling set-show rules",id:"handling-set-show-rules",level:2}];function c(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"simple-animations",children:"Simple Animations"}),"\n",(0,i.jsxs)(n.p,{children:["Touying provides two markers for simple animation effects: ",(0,i.jsx)(n.code,{children:"#pause"})," and ",(0,i.jsx)(n.code,{children:"#meanwhile"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"pause",children:"pause"}),"\n",(0,i.jsxs)(n.p,{children:["The purpose of ",(0,i.jsx)(n.code,{children:"#pause"})," is straightforward \u2013 it separates the subsequent content into the next subslide. You can use multiple ",(0,i.jsx)(n.code,{children:"#pause"})," to create multiple subslides. Here's a simple example:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:"#slide[\n First #pause Second\n\n #pause\n\n Third\n]\n"})}),"\n",(0,i.jsx)(n.p,{children:"This example will create three subslides, gradually revealing the content."}),"\n",(0,i.jsxs)(n.p,{children:["As you can see, ",(0,i.jsx)(n.code,{children:"#pause"})," can be used inline or on a separate line."]}),"\n",(0,i.jsx)(n.h2,{id:"meanwhile",children:"meanwhile"}),"\n",(0,i.jsxs)(n.p,{children:["In some cases, you may need to display additional content simultaneously with ",(0,i.jsx)(n.code,{children:"#pause"}),". In such cases, you can use ",(0,i.jsx)(n.code,{children:"#meanwhile"}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:"#slide[\n First\n \n #pause\n \n Second\n\n #meanwhile\n\n Third\n\n #pause\n\n Fourth\n]\n"})}),"\n",(0,i.jsx)(n.p,{children:'This example will create only two subslides, with "First" and "Third" displayed simultaneously, and "Second" and "Fourth" displayed simultaneously.'}),"\n",(0,i.jsx)(n.h2,{id:"handling-set-show-rules",children:"Handling set-show rules"}),"\n",(0,i.jsxs)(n.p,{children:["If you use set-show rules inside ",(0,i.jsx)(n.code,{children:"slide[..]"}),", you might be surprised to find that subsequent ",(0,i.jsx)(n.code,{children:"#pause"})," and ",(0,i.jsx)(n.code,{children:"#meanwhile"})," do not work. This is because Touying cannot detect the content inside ",(0,i.jsx)(n.code,{children:"styled(..)"})," (content after set-show rules is encompassed by ",(0,i.jsx)(n.code,{children:"styled"}),")."]}),"\n",(0,i.jsxs)(n.p,{children:["To address this issue, Touying provides a ",(0,i.jsx)(n.code,{children:"setting"})," parameter for the ",(0,i.jsx)(n.code,{children:"#slide()"})," function. You can place your set-show rules in the ",(0,i.jsx)(n.code,{children:"setting"})," parameter. For example, changing the font color:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:"#slide(setting: body => {\n set text(fill: blue)\n body\n})[\n First\n \n #pause\n \n Second\n]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Similarly, Touying currently does not support ",(0,i.jsx)(n.code,{children:"#pause"})," and ",(0,i.jsx)(n.code,{children:"#meanwhile"})," inside layout functions like ",(0,i.jsx)(n.code,{children:"grid"}),". This is due to the same limitation, but you can use the ",(0,i.jsx)(n.code,{children:"composer"})," parameter of ",(0,i.jsx)(n.code,{children:"#slide()"})," to meet most requirements."]}),"\n",(0,i.jsx)(n.admonition,{title:"Internals",type:"tip",children:(0,i.jsxs)(n.p,{children:["Touying doesn't rely on ",(0,i.jsx)(n.code,{children:"counter"})," and ",(0,i.jsx)(n.code,{children:"locate"})," to implement ",(0,i.jsx)(n.code,{children:"#pause"}),". Instead, it has a parser written in Typst script. It parses the input content block as a sequence and then transforms and reorganizes this sequence into the series of subslides we need."]})})]})}function u(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>d});var i=s(7294);const t={},o=i.createContext(t);function d(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/396cf6b9.d7b79b03.js b/assets/js/396cf6b9.d7b79b03.js deleted file mode 100644 index f9a9fc50e..000000000 --- a/assets/js/396cf6b9.d7b79b03.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9705],{4885:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>r});var i=s(5893),t=s(1151);const o={sidebar_position:1},d="Simple Animations",a={id:"dynamic/simple",title:"Simple Animations",description:"Touying provides two markers for simple animation effects: #pause and #meanwhile.",source:"@site/docs/dynamic/simple.md",sourceDirName:"dynamic",slug:"/dynamic/simple",permalink:"/docs/dynamic/simple",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/dynamic/simple.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Dynamic Slides",permalink:"/docs/category/dynamic-slides"},next:{title:"Complex Animations",permalink:"/docs/dynamic/complex"}},l={},r=[{value:"pause",id:"pause",level:2},{value:"meanwhile",id:"meanwhile",level:2},{value:"Handling set-show rules",id:"handling-set-show-rules",level:2}];function c(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"simple-animations",children:"Simple Animations"}),"\n",(0,i.jsxs)(n.p,{children:["Touying provides two markers for simple animation effects: ",(0,i.jsx)(n.code,{children:"#pause"})," and ",(0,i.jsx)(n.code,{children:"#meanwhile"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"pause",children:"pause"}),"\n",(0,i.jsxs)(n.p,{children:["The purpose of ",(0,i.jsx)(n.code,{children:"#pause"})," is straightforward \u2013 it separates the subsequent content into the next subslide. You can use multiple ",(0,i.jsx)(n.code,{children:"#pause"})," to create multiple subslides. Here's a simple example:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:"#slide[\n First #pause Second\n\n #pause\n\n Third\n]\n"})}),"\n",(0,i.jsx)(n.p,{children:"This example will create three subslides, gradually revealing the content."}),"\n",(0,i.jsxs)(n.p,{children:["As you can see, ",(0,i.jsx)(n.code,{children:"#pause"})," can be used inline or on a separate line."]}),"\n",(0,i.jsx)(n.h2,{id:"meanwhile",children:"meanwhile"}),"\n",(0,i.jsxs)(n.p,{children:["In some cases, you may need to display additional content simultaneously with ",(0,i.jsx)(n.code,{children:"#pause"}),". In such cases, you can use ",(0,i.jsx)(n.code,{children:"#meanwhile"}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:"#slide[\n First\n \n #pause\n \n Second\n\n #meanwhile\n\n Third\n\n #pause\n\n Fourth\n]\n"})}),"\n",(0,i.jsx)(n.p,{children:'This example will create only two subslides, with "First" and "Third" displayed simultaneously, and "Second" and "Fourth" displayed simultaneously.'}),"\n",(0,i.jsx)(n.h2,{id:"handling-set-show-rules",children:"Handling set-show rules"}),"\n",(0,i.jsxs)(n.p,{children:["If you use set-show rules inside ",(0,i.jsx)(n.code,{children:"slide[..]"}),", you might be surprised to find that subsequent ",(0,i.jsx)(n.code,{children:"#pause"})," and ",(0,i.jsx)(n.code,{children:"#meanwhile"})," do not work. This is because Touying cannot detect the content inside ",(0,i.jsx)(n.code,{children:"styled(..)"})," (content after set-show rules is encompassed by ",(0,i.jsx)(n.code,{children:"styled"}),")."]}),"\n",(0,i.jsxs)(n.p,{children:["To address this issue, Touying provides a ",(0,i.jsx)(n.code,{children:"setting"})," parameter for the ",(0,i.jsx)(n.code,{children:"#slide()"})," function. You can place your set-show rules in the ",(0,i.jsx)(n.code,{children:"setting"})," parameter. For example, changing the font color:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:"#slide(setting: body => {\n set text(fill: blue)\n body\n})[\n First\n \n #pause\n \n Second\n]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Similarly, Touying currently does not support ",(0,i.jsx)(n.code,{children:"#pause"})," and ",(0,i.jsx)(n.code,{children:"#meanwhile"})," inside layout functions like ",(0,i.jsx)(n.code,{children:"grid"}),". This is due to the same limitation, but you can use the ",(0,i.jsx)(n.code,{children:"composer"})," parameter of ",(0,i.jsx)(n.code,{children:"#slide()"})," to meet most requirements."]}),"\n",(0,i.jsx)(n.admonition,{title:"Internals",type:"tip",children:(0,i.jsxs)(n.p,{children:["Touying doesn't rely on ",(0,i.jsx)(n.code,{children:"counter"})," and ",(0,i.jsx)(n.code,{children:"locate"})," to implement ",(0,i.jsx)(n.code,{children:"#pause"}),". Instead, it has a parser written in Typst script. It parses the input content block as a sequence and then transforms and reorganizes this sequence into the series of subslides we need."]})})]})}function u(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>d});var i=s(7294);const t={},o=i.createContext(t);function d(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3d438ec7.664d2788.js b/assets/js/3d438ec7.664d2788.js new file mode 100644 index 000000000..54d97eb59 --- /dev/null +++ b/assets/js/3d438ec7.664d2788.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6085],{2691:t=>{t.exports=JSON.parse('{"title":"External Tools","description":"Integrate external tools with Touying.","slug":"/category/external-tools","permalink":"/touying/docs/category/external-tools","navigation":{"previous":{"title":"Fit to Height / Width","permalink":"/touying/docs/utilities/fit-to"},"next":{"title":"Pdfpc","permalink":"/touying/docs/external/pdfpc"}}}')}}]); \ No newline at end of file diff --git a/assets/js/41a6ae87.2629620e.js b/assets/js/41a6ae87.2629620e.js new file mode 100644 index 000000000..422459fbe --- /dev/null +++ b/assets/js/41a6ae87.2629620e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6526],{3076:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"touying-0-2-0","metadata":{"permalink":"/touying/blog/touying-0-2-0","editUrl":"https://github.com/touying-typ/touying/tree/main/docs/blog/2024-01-17-touying-0-2-0.md","source":"@site/blog/2024-01-17-touying-0-2-0.md","title":"Touying 0.2.0","description":"Touying 0.2.0 is done.","date":"2024-01-17T00:00:00.000Z","formattedDate":"January 17, 2024","tags":[{"label":"development","permalink":"/touying/blog/tags/development"}],"readingTime":1.875,"hasTruncateMarker":false,"authors":[{"name":"OrangeX4","title":"Maintainer of Touying.","url":"https://github.com/OrangeX4","imageURL":"https://orangex4.cool/images/icons/profile.jpg","key":"orangex4"}],"frontMatter":{"slug":"touying-0-2-0","title":"Touying 0.2.0","authors":"orangex4","tags":["development"]},"unlisted":false},"content":"Touying 0.2.0 is done.\\n\\n## Implemented Features\\n\\n- [x] **Object-oriented programming:** Singleton `s`, binding methods `utils.methods(s)` and `(self: obj, ..) => {..}` methods.\\n- [x] **Page arguments management:** Instead of using `#set page(..)`, you should use `self.page-args` to retrieve or set page parameters, thereby avoiding unnecessary creation of new pages.\\n- [x] **`#pause` for sequence content:** You can use #pause at the outermost level of a slide, including inline and list.\\n- [x] **`#pause` for layout functions:** You can use the `composer` parameter to add yourself layout function like `utils.side-by-side`, and simply use multiple pos parameters like `#slide[..][..]`.\\n- [x] **`#meanwhile` for synchronous display:** Provide a `#meanwhile` for resetting subslides counter.\\n- [x] **`#pause` and `#meanwhile` for math equation:** Provide a `#touying-equation(\\"x + y pause + z\\")` for math equation animations.\\n- [x] **Slides:** Create simple slides using standard headings.\\n- [x] **Callback-style `uncover`, `only` and `alternatives`:** Based on the concise syntax provided by Polylux, allow precise control of the timing for displaying content.\\n - You should manually control the number of subslides using the `repeat` parameter.\\n- [x] **Transparent cover:** Enable transparent cover using oop syntax like `#let s = (s.methods.enable-transparent-cover)(self: s)`.\\n- [x] **Handout mode:** enable handout mode by `#let s = (s.methods.enable-handout-mode)(self: s)`.\\n- [x] **Fit-to-width and fit-to-height:** Fit-to-width for title in header and fit-to-height for image.\\n - `utils.fit-to-width(grow: true, shrink: true, width, body)`\\n - `utils.fit-to-height(width: none, prescale-width: none, grow: true, shrink: true, height, body)`\\n- [x] **Slides counter:** `states.slide-counter.display() + \\" / \\" + states.last-slide-number` and `states.touying-progress(ratio => ..)`.\\n- [x] **Appendix:** Freeze the `last-slide-number` to prevent the slide number from increasing further.\\n- [x] **Sections:** Touying\'s built-in section support can be used to display the current section title and show progress.\\n - [x] `section` and `subsection` parameter in `#slide` to register a new section or subsection.\\n - [x] `states.current-section-title` to get the current section.\\n - [x] `states.touying-outline` or `s.methods.touying-outline` to display a outline of sections.\\n - [x] `states.touying-final-sections(sections => ..)` for custom outline display.\\n - [x] `states.touying-progress-with-sections((current-sections: .., final-sections: .., current-slide-number: .., last-slide-number: ..) => ..)` for powerful progress display.\\n- [x] **Navigation bar**: Navigation bar like [here](https://github.com/zbowang/BeamerTheme) by `states.touying-progress-with-sections(..)`, in `dewdrop` theme.\\n- [x] **Pdfpc:** pdfpc support and export `.pdfpc` file without external tool by `typst query` command simply."}]}')}}]); \ No newline at end of file diff --git a/assets/js/472f8a66.7efc0f2c.js b/assets/js/472f8a66.7efc0f2c.js new file mode 100644 index 000000000..0712a3f0c --- /dev/null +++ b/assets/js/472f8a66.7efc0f2c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[8565],{2857:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var s=t(5893),i=t(1151);const o={sidebar_position:3},a="Layout Your Contents",c={id:"layout",title:"Layout Your Contents",description:"To better manage every detail in the slides and achieve better rendering results, like Beamer, Touying has introduced some unique concepts. This helps you maintain global information better and easily switch between different themes.",source:"@site/docs/layout.md",sourceDirName:".",slug:"/layout",permalink:"/touying/docs/layout",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/layout.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Getting Started",permalink:"/touying/docs/start"},next:{title:"Code Styles",permalink:"/touying/docs/style"}},l={},d=[{value:"Global Information",id:"global-information",level:2},{value:"Sections and Subsections",id:"sections-and-subsections",level:2},{value:"Table of Contents",id:"table-of-contents",level:2},{value:"Page Management",id:"page-management",level:2},{value:"Page Columns",id:"page-columns",level:2}];function r(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"layout-your-contents",children:"Layout Your Contents"}),"\n",(0,s.jsx)(n.p,{children:"To better manage every detail in the slides and achieve better rendering results, like Beamer, Touying has introduced some unique concepts. This helps you maintain global information better and easily switch between different themes."}),"\n",(0,s.jsx)(n.h2,{id:"global-information",children:"Global Information"}),"\n",(0,s.jsx)(n.p,{children:"You can set the title, subtitle, author, date, and institution information for slides using:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#let s = (s.methods.info)(\n self: s,\n title: [Title],\n subtitle: [Subtitle],\n author: [Authors],\n date: datetime.today(),\n institution: [Institution],\n)\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"date"})," parameter can accept ",(0,s.jsx)(n.code,{children:"datetime"})," format and ",(0,s.jsx)(n.code,{children:"content"})," format. The display format of the date in ",(0,s.jsx)(n.code,{children:"datetime"})," format can be changed using:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#let s = (s.methods.datetime-format)(self: s, "[year]-[month]-[day]")\n'})}),"\n",(0,s.jsxs)(n.admonition,{title:"Internals",type:"tip",children:[(0,s.jsx)(n.p,{children:"Here, we introduce a bit of the OOP concept in Touying."}),(0,s.jsxs)(n.p,{children:["You should know that Typst is a typesetting language that supports incremental rendering. That is, Typst caches the results of previous function calls. This requires Typst to have only pure functions, meaning functions that do not change external variables. Therefore, it's challenging to modify a global variable in the true sense, as done in LaTeX. Even if you use ",(0,s.jsx)(n.code,{children:"state"})," or ",(0,s.jsx)(n.code,{children:"counter"}),", you need to use ",(0,s.jsx)(n.code,{children:"locate"})," and callback functions to access their values, and this approach has a significant impact on performance."]}),(0,s.jsxs)(n.p,{children:["Touying does not use ",(0,s.jsx)(n.code,{children:"state"})," and ",(0,s.jsx)(n.code,{children:"counter"}),", nor does it violate the Internals of Typst's pure functions. Instead, it cleverly uses a method in an object-oriented style to maintain a global singleton ",(0,s.jsx)(n.code,{children:"s"}),". In Touying, an object refers to a Typst dictionary with its own member variables and methods. We have a convention that methods have a named parameter ",(0,s.jsx)(n.code,{children:"self"})," to pass the object itself, and all methods are placed in the ",(0,s.jsx)(n.code,{children:".methods"})," domain. With this concept, it's not difficult to write a method to update ",(0,s.jsx)(n.code,{children:"info"}),":"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#let s = (\n info: (:),\n methods: (\n // update info\n info: (self: none, ..args) => {\n self.info += args.named()\n self\n },\n )\n)\n\n#let s = (s.methods.info)(self: s, title: [title])\n\nTitle is #s.info.title\n"})}),(0,s.jsxs)(n.p,{children:["This way, you can also understand the purpose of the ",(0,s.jsx)(n.code,{children:"utils.methods()"})," function: it binds ",(0,s.jsx)(n.code,{children:"self"})," to all methods of ",(0,s.jsx)(n.code,{children:"s"})," and returns it. It simplifies the subsequent use through unpacking syntax."]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#let (init, slide, slides) = utils.methods(s)\n"})})]}),"\n",(0,s.jsx)(n.h2,{id:"sections-and-subsections",children:"Sections and Subsections"}),"\n",(0,s.jsx)(n.p,{children:"Similar to Beamer, Touying also has the concepts of sections and subsections."}),"\n",(0,s.jsxs)(n.p,{children:["In the ",(0,s.jsx)(n.code,{children:"#show: slides"})," mode, sections and subsections correspond to first-level and second-level titles, respectively. For example:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let (init, slide, slides) = utils.methods(s)\n#show: init\n\n#show: slides\n\n= Section\n\n== Subsection\n\nHello, Touying!\n'})}),"\n",(0,s.jsx)(n.p,{children:"However, the second-level title does not always correspond to the subsection. The specific mapping may vary depending on the theme."}),"\n",(0,s.jsxs)(n.p,{children:["In the more general ",(0,s.jsx)(n.code,{children:"#slide[..]"})," mode, sections and subsections are passed as parameters to the ",(0,s.jsx)(n.code,{children:"slide"})," function, for example:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#slide(section: [Let's start a new section!])[..]\n\n#slide(subsection: [Let's start a new subsection!])[..]\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This will create a new section and a new subsection, respectively. However, this change typically only affects the internal ",(0,s.jsx)(n.code,{children:"sections"})," state of Touying and is not displayed on the slide by default. The specific display may vary depending on the theme."]}),"\n",(0,s.jsxs)(n.p,{children:["Note that the ",(0,s.jsx)(n.code,{children:"section"})," and ",(0,s.jsx)(n.code,{children:"subsection"})," parameters of ",(0,s.jsx)(n.code,{children:"slide"})," can accept both content blocks and arrays in the format ",(0,s.jsx)(n.code,{children:"([title], [short-title])"})," or dictionaries in the format ",(0,s.jsx)(n.code,{children:"(title: [title], short-title: [short-title])"}),". The ",(0,s.jsx)(n.code,{children:"short-title"})," will be used in some special cases, such as in the navigation of the ",(0,s.jsx)(n.code,{children:"dewdrop"})," theme."]}),"\n",(0,s.jsx)(n.h2,{id:"table-of-contents",children:"Table of Contents"}),"\n",(0,s.jsx)(n.p,{children:"Displaying a table of contents in Touying is straightforward:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let (init, slide, touying-outline) = utils.methods(s)\n#show: init\n\n#slide[\n == Table of contents\n\n #touying-outline()\n]\n'})}),"\n",(0,s.jsxs)(n.p,{children:["The definition of ",(0,s.jsx)(n.code,{children:"touying-oultine()"})," is:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#let touying-outline(enum-args: (:), padding: 0pt) = { .. }\n"})}),"\n",(0,s.jsxs)(n.p,{children:["You can modify the internal enum parameters with ",(0,s.jsx)(n.code,{children:"enum-args"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"If you have complex custom requirements for the table of contents, you can use:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#slide[\n == Table of contents\n\n #states.touying-final-sections(sections => ..)\n]\n"})}),"\n",(0,s.jsx)(n.h2,{id:"page-management",children:"Page Management"}),"\n",(0,s.jsxs)(n.p,{children:["Due to the use of the ",(0,s.jsx)(n.code,{children:"set page(..)"})," command in Typst, which creates a new page instead of modifying the current one, Touying chooses to maintain a ",(0,s.jsx)(n.code,{children:"s.page-args"})," member variable in the singleton ",(0,s.jsx)(n.code,{children:"s"}),". These parameters are only applied when creating a new slide."]}),"\n",(0,s.jsx)(n.admonition,{title:"Warning",type:"warning",children:(0,s.jsxs)(n.p,{children:["Therefore, you should not use the ",(0,s.jsx)(n.code,{children:"set page(..)"})," command yourself. Instead, you should modify the ",(0,s.jsx)(n.code,{children:"s.page-args"})," member variable inside ",(0,s.jsx)(n.code,{children:"s"}),"."]})}),"\n",(0,s.jsxs)(n.p,{children:["This way, we can query the parameters of the current page in real-time using ",(0,s.jsx)(n.code,{children:"s.page-args"}),". This is useful for some functions that need to get page margins or the current page background color, such as ",(0,s.jsx)(n.code,{children:"transparent-cover"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"page-columns",children:"Page Columns"}),"\n",(0,s.jsxs)(n.p,{children:["If you need to divide a page into two or three columns, you can use the default ",(0,s.jsx)(n.code,{children:"compose"})," feature provided by the Touying ",(0,s.jsx)(n.code,{children:"slide"})," function. The simplest examples are:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#slide[\n First column.\n][\n Second column.\n]\n"})}),"\n",(0,s.jsxs)(n.p,{children:["If you need to change the way columns are composed, you can modify the ",(0,s.jsx)(n.code,{children:"composer"})," parameter of ",(0,s.jsx)(n.code,{children:"slide"}),". The default parameter is ",(0,s.jsx)(n.code,{children:"utils.with.side-by-side(columns: auto, gutter: 1em)"}),". If we want the left column to occupy the remaining width, we can use:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#slide(composer: utils.side-by-side.with(columns: (1fr, auto), gutter: 1em))[\n First column.\n][\n Second column.\n]\n"})})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(r,{...e})}):r(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>a});var s=t(7294);const i={},o=s.createContext(i);function a(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/472f8a66.e1056a33.js b/assets/js/472f8a66.e1056a33.js deleted file mode 100644 index 443e7ae9c..000000000 --- a/assets/js/472f8a66.e1056a33.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[8565],{2857:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var s=t(5893),i=t(1151);const o={sidebar_position:3},a="Layout Your Contents",c={id:"layout",title:"Layout Your Contents",description:"To better manage every detail in the slides and achieve better rendering results, like Beamer, Touying has introduced some unique concepts. This helps you maintain global information better and easily switch between different themes.",source:"@site/docs/layout.md",sourceDirName:".",slug:"/layout",permalink:"/docs/layout",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/layout.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Getting Started",permalink:"/docs/start"},next:{title:"Code Styles",permalink:"/docs/style"}},l={},d=[{value:"Global Information",id:"global-information",level:2},{value:"Sections and Subsections",id:"sections-and-subsections",level:2},{value:"Table of Contents",id:"table-of-contents",level:2},{value:"Page Management",id:"page-management",level:2},{value:"Page Columns",id:"page-columns",level:2}];function r(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"layout-your-contents",children:"Layout Your Contents"}),"\n",(0,s.jsx)(n.p,{children:"To better manage every detail in the slides and achieve better rendering results, like Beamer, Touying has introduced some unique concepts. This helps you maintain global information better and easily switch between different themes."}),"\n",(0,s.jsx)(n.h2,{id:"global-information",children:"Global Information"}),"\n",(0,s.jsx)(n.p,{children:"You can set the title, subtitle, author, date, and institution information for slides using:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#let s = (s.methods.info)(\n self: s,\n title: [Title],\n subtitle: [Subtitle],\n author: [Authors],\n date: datetime.today(),\n institution: [Institution],\n)\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"date"})," parameter can accept ",(0,s.jsx)(n.code,{children:"datetime"})," format and ",(0,s.jsx)(n.code,{children:"content"})," format. The display format of the date in ",(0,s.jsx)(n.code,{children:"datetime"})," format can be changed using:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#let s = (s.methods.datetime-format)(self: s, "[year]-[month]-[day]")\n'})}),"\n",(0,s.jsxs)(n.admonition,{title:"Internals",type:"tip",children:[(0,s.jsx)(n.p,{children:"Here, we introduce a bit of the OOP concept in Touying."}),(0,s.jsxs)(n.p,{children:["You should know that Typst is a typesetting language that supports incremental rendering. That is, Typst caches the results of previous function calls. This requires Typst to have only pure functions, meaning functions that do not change external variables. Therefore, it's challenging to modify a global variable in the true sense, as done in LaTeX. Even if you use ",(0,s.jsx)(n.code,{children:"state"})," or ",(0,s.jsx)(n.code,{children:"counter"}),", you need to use ",(0,s.jsx)(n.code,{children:"locate"})," and callback functions to access their values, and this approach has a significant impact on performance."]}),(0,s.jsxs)(n.p,{children:["Touying does not use ",(0,s.jsx)(n.code,{children:"state"})," and ",(0,s.jsx)(n.code,{children:"counter"}),", nor does it violate the Internals of Typst's pure functions. Instead, it cleverly uses a method in an object-oriented style to maintain a global singleton ",(0,s.jsx)(n.code,{children:"s"}),". In Touying, an object refers to a Typst dictionary with its own member variables and methods. We have a convention that methods have a named parameter ",(0,s.jsx)(n.code,{children:"self"})," to pass the object itself, and all methods are placed in the ",(0,s.jsx)(n.code,{children:".methods"})," domain. With this concept, it's not difficult to write a method to update ",(0,s.jsx)(n.code,{children:"info"}),":"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#let s = (\n info: (:),\n methods: (\n // update info\n info: (self: none, ..args) => {\n self.info += args.named()\n self\n },\n )\n)\n\n#let s = (s.methods.info)(self: s, title: [title])\n\nTitle is #s.info.title\n"})}),(0,s.jsxs)(n.p,{children:["This way, you can also understand the purpose of the ",(0,s.jsx)(n.code,{children:"utils.methods()"})," function: it binds ",(0,s.jsx)(n.code,{children:"self"})," to all methods of ",(0,s.jsx)(n.code,{children:"s"})," and returns it. It simplifies the subsequent use through unpacking syntax."]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#let (init, slide, slides) = utils.methods(s)\n"})})]}),"\n",(0,s.jsx)(n.h2,{id:"sections-and-subsections",children:"Sections and Subsections"}),"\n",(0,s.jsx)(n.p,{children:"Similar to Beamer, Touying also has the concepts of sections and subsections."}),"\n",(0,s.jsxs)(n.p,{children:["In the ",(0,s.jsx)(n.code,{children:"#show: slides"})," mode, sections and subsections correspond to first-level and second-level titles, respectively. For example:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let (init, slide, slides) = utils.methods(s)\n#show: init\n\n#show: slides\n\n= Section\n\n== Subsection\n\nHello, Touying!\n'})}),"\n",(0,s.jsx)(n.p,{children:"However, the second-level title does not always correspond to the subsection. The specific mapping may vary depending on the theme."}),"\n",(0,s.jsxs)(n.p,{children:["In the more general ",(0,s.jsx)(n.code,{children:"#slide[..]"})," mode, sections and subsections are passed as parameters to the ",(0,s.jsx)(n.code,{children:"slide"})," function, for example:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#slide(section: [Let's start a new section!])[..]\n\n#slide(subsection: [Let's start a new subsection!])[..]\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This will create a new section and a new subsection, respectively. However, this change typically only affects the internal ",(0,s.jsx)(n.code,{children:"sections"})," state of Touying and is not displayed on the slide by default. The specific display may vary depending on the theme."]}),"\n",(0,s.jsxs)(n.p,{children:["Note that the ",(0,s.jsx)(n.code,{children:"section"})," and ",(0,s.jsx)(n.code,{children:"subsection"})," parameters of ",(0,s.jsx)(n.code,{children:"slide"})," can accept both content blocks and arrays in the format ",(0,s.jsx)(n.code,{children:"([title], [short-title])"})," or dictionaries in the format ",(0,s.jsx)(n.code,{children:"(title: [title], short-title: [short-title])"}),". The ",(0,s.jsx)(n.code,{children:"short-title"})," will be used in some special cases, such as in the navigation of the ",(0,s.jsx)(n.code,{children:"dewdrop"})," theme."]}),"\n",(0,s.jsx)(n.h2,{id:"table-of-contents",children:"Table of Contents"}),"\n",(0,s.jsx)(n.p,{children:"Displaying a table of contents in Touying is straightforward:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let (init, slide, touying-outline) = utils.methods(s)\n#show: init\n\n#slide[\n == Table of contents\n\n #touying-outline()\n]\n'})}),"\n",(0,s.jsxs)(n.p,{children:["The definition of ",(0,s.jsx)(n.code,{children:"touying-oultine()"})," is:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#let touying-outline(enum-args: (:), padding: 0pt) = { .. }\n"})}),"\n",(0,s.jsxs)(n.p,{children:["You can modify the internal enum parameters with ",(0,s.jsx)(n.code,{children:"enum-args"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"If you have complex custom requirements for the table of contents, you can use:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#slide[\n == Table of contents\n\n #states.touying-final-sections(sections => ..)\n]\n"})}),"\n",(0,s.jsx)(n.h2,{id:"page-management",children:"Page Management"}),"\n",(0,s.jsxs)(n.p,{children:["Due to the use of the ",(0,s.jsx)(n.code,{children:"set page(..)"})," command in Typst, which creates a new page instead of modifying the current one, Touying chooses to maintain a ",(0,s.jsx)(n.code,{children:"s.page-args"})," member variable in the singleton ",(0,s.jsx)(n.code,{children:"s"}),". These parameters are only applied when creating a new slide."]}),"\n",(0,s.jsx)(n.admonition,{title:"Warning",type:"warning",children:(0,s.jsxs)(n.p,{children:["Therefore, you should not use the ",(0,s.jsx)(n.code,{children:"set page(..)"})," command yourself. Instead, you should modify the ",(0,s.jsx)(n.code,{children:"s.page-args"})," member variable inside ",(0,s.jsx)(n.code,{children:"s"}),"."]})}),"\n",(0,s.jsxs)(n.p,{children:["This way, we can query the parameters of the current page in real-time using ",(0,s.jsx)(n.code,{children:"s.page-args"}),". This is useful for some functions that need to get page margins or the current page background color, such as ",(0,s.jsx)(n.code,{children:"transparent-cover"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"page-columns",children:"Page Columns"}),"\n",(0,s.jsxs)(n.p,{children:["If you need to divide a page into two or three columns, you can use the default ",(0,s.jsx)(n.code,{children:"compose"})," feature provided by the Touying ",(0,s.jsx)(n.code,{children:"slide"})," function. The simplest examples are:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#slide[\n First column.\n][\n Second column.\n]\n"})}),"\n",(0,s.jsxs)(n.p,{children:["If you need to change the way columns are composed, you can modify the ",(0,s.jsx)(n.code,{children:"composer"})," parameter of ",(0,s.jsx)(n.code,{children:"slide"}),". The default parameter is ",(0,s.jsx)(n.code,{children:"utils.with.side-by-side(columns: auto, gutter: 1em)"}),". If we want the left column to occupy the remaining width, we can use:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#slide(composer: utils.side-by-side.with(columns: (1fr, auto), gutter: 1em))[\n First column.\n][\n Second column.\n]\n"})})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(r,{...e})}):r(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>a});var s=t(7294);const i={},o=s.createContext(i);function a(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4bb9edb3.6e5ac7d6.js b/assets/js/4bb9edb3.6e5ac7d6.js deleted file mode 100644 index c2f8f1d6f..000000000 --- a/assets/js/4bb9edb3.6e5ac7d6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3280],{567:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>r,contentTitle:()=>a,default:()=>u,frontMatter:()=>s,metadata:()=>c,toc:()=>l});var t=i(5893),o=i(1151);const s={sidebar_position:3},a="Math Equation Animations",c={id:"dynamic/equation",title:"Math Equation Animations",description:"Touying also provides a unique and highly useful feature\u2014math equation animations, allowing you to conveniently use pause and meanwhile within math equations.",source:"@site/docs/dynamic/equation.md",sourceDirName:"dynamic",slug:"/dynamic/equation",permalink:"/docs/dynamic/equation",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/dynamic/equation.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Complex Animations",permalink:"/docs/dynamic/complex"},next:{title:"Cover Function",permalink:"/docs/dynamic/cover"}},r={},l=[{value:"Simple Animation",id:"simple-animation",level:2},{value:"Complex Animation",id:"complex-animation",level:2},{value:"Parameters",id:"parameters",level:2}];function d(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"math-equation-animations",children:"Math Equation Animations"}),"\n",(0,t.jsxs)(n.p,{children:["Touying also provides a unique and highly useful feature\u2014math equation animations, allowing you to conveniently use ",(0,t.jsx)(n.code,{children:"pause"})," and ",(0,t.jsx)(n.code,{children:"meanwhile"})," within math equations."]}),"\n",(0,t.jsx)(n.h2,{id:"simple-animation",children:"Simple Animation"}),"\n",(0,t.jsx)(n.p,{children:"Let's start with an example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typst",children:"#slide[\n Touying equation with pause:\n\n #touying-equation(`\n f(x) &= pause x^2 + 2x + 1 \\\n &= pause (x + 1)^2 \\\n `)\n\n #meanwhile\n\n Touying equation is very simple.\n]\n"})}),"\n",(0,t.jsxs)(n.p,{children:["We use the ",(0,t.jsx)(n.code,{children:"touying-equation"})," function to incorporate ",(0,t.jsx)(n.code,{children:"pause"})," and ",(0,t.jsx)(n.code,{children:"meanwhile"})," within the text of math equations (in fact, you can also use ",(0,t.jsx)(n.code,{children:"#pause"})," or ",(0,t.jsx)(n.code,{children:"#pause;"}),")."]}),"\n",(0,t.jsx)(n.p,{children:"As you would expect, the math equation is displayed step by step, making it suitable for presenters to demonstrate their math reasoning."}),"\n",(0,t.jsx)(n.admonition,{title:"Warning",type:"warning",children:(0,t.jsxs)(n.p,{children:["While the ",(0,t.jsx)(n.code,{children:"touying-equation"})," function is convenient, you should always be aware that it doesn't perform complex syntax analysis. It simply splits the string using regular expressions. Therefore, you should not use ",(0,t.jsx)(n.code,{children:"pause"})," or ",(0,t.jsx)(n.code,{children:"meanwhile"})," within functions like ",(0,t.jsx)(n.code,{children:"display(..)"}),"!"]})}),"\n",(0,t.jsx)(n.h2,{id:"complex-animation",children:"Complex Animation"}),"\n",(0,t.jsxs)(n.p,{children:["In fact, we can also use ",(0,t.jsx)(n.code,{children:"only"}),", ",(0,t.jsx)(n.code,{children:"uncover"}),", and ",(0,t.jsx)(n.code,{children:"alternatives"})," within ",(0,t.jsx)(n.code,{children:"touying-equation"})," with a little trick:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typst",children:'#slide(repeat: 3, self => [\n #let (uncover, only, alternatives) = utils.methods(self)\n\n #touying-equation(scope: (uncover: uncover), `\n f(x) &= pause x^2 + 2x + uncover("3-", 1) \\\n &= pause (x + 1)^2 \\\n `)\n])\n'})}),"\n",(0,t.jsxs)(n.p,{children:["We can pass the functions we need into the ",(0,t.jsx)(n.code,{children:"touying-equation"})," through the ",(0,t.jsx)(n.code,{children:"scope"})," parameter, such as ",(0,t.jsx)(n.code,{children:"uncover"})," in this example."]}),"\n",(0,t.jsx)(n.h2,{id:"parameters",children:"Parameters"}),"\n",(0,t.jsxs)(n.p,{children:["The function definition of ",(0,t.jsx)(n.code,{children:"touying-equation"})," is:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typst",children:"#let touying-equation(block: true, numbering: none, supplement: auto, scope: (:), body) = { .. }\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Therefore, you can pass parameters like ",(0,t.jsx)(n.code,{children:"block"}),", ",(0,t.jsx)(n.code,{children:"numbering"}),", and ",(0,t.jsx)(n.code,{children:"supplement"})," to ",(0,t.jsx)(n.code,{children:"touying-equation"})," just like using normal math equations."]})]})}function u(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},1151:(e,n,i)=>{i.d(n,{Z:()=>c,a:()=>a});var t=i(7294);const o={},s=t.createContext(o);function a(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4bb9edb3.eb5b5656.js b/assets/js/4bb9edb3.eb5b5656.js new file mode 100644 index 000000000..d9170e2ec --- /dev/null +++ b/assets/js/4bb9edb3.eb5b5656.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3280],{567:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>r,contentTitle:()=>a,default:()=>d,frontMatter:()=>s,metadata:()=>c,toc:()=>l});var t=i(5893),o=i(1151);const s={sidebar_position:3},a="Math Equation Animations",c={id:"dynamic/equation",title:"Math Equation Animations",description:"Touying also provides a unique and highly useful feature\u2014math equation animations, allowing you to conveniently use pause and meanwhile within math equations.",source:"@site/docs/dynamic/equation.md",sourceDirName:"dynamic",slug:"/dynamic/equation",permalink:"/touying/docs/dynamic/equation",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/dynamic/equation.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Complex Animations",permalink:"/touying/docs/dynamic/complex"},next:{title:"Cover Function",permalink:"/touying/docs/dynamic/cover"}},r={},l=[{value:"Simple Animation",id:"simple-animation",level:2},{value:"Complex Animation",id:"complex-animation",level:2},{value:"Parameters",id:"parameters",level:2}];function u(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"math-equation-animations",children:"Math Equation Animations"}),"\n",(0,t.jsxs)(n.p,{children:["Touying also provides a unique and highly useful feature\u2014math equation animations, allowing you to conveniently use ",(0,t.jsx)(n.code,{children:"pause"})," and ",(0,t.jsx)(n.code,{children:"meanwhile"})," within math equations."]}),"\n",(0,t.jsx)(n.h2,{id:"simple-animation",children:"Simple Animation"}),"\n",(0,t.jsx)(n.p,{children:"Let's start with an example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typst",children:"#slide[\n Touying equation with pause:\n\n #touying-equation(`\n f(x) &= pause x^2 + 2x + 1 \\\n &= pause (x + 1)^2 \\\n `)\n\n #meanwhile\n\n Touying equation is very simple.\n]\n"})}),"\n",(0,t.jsxs)(n.p,{children:["We use the ",(0,t.jsx)(n.code,{children:"touying-equation"})," function to incorporate ",(0,t.jsx)(n.code,{children:"pause"})," and ",(0,t.jsx)(n.code,{children:"meanwhile"})," within the text of math equations (in fact, you can also use ",(0,t.jsx)(n.code,{children:"#pause"})," or ",(0,t.jsx)(n.code,{children:"#pause;"}),")."]}),"\n",(0,t.jsx)(n.p,{children:"As you would expect, the math equation is displayed step by step, making it suitable for presenters to demonstrate their math reasoning."}),"\n",(0,t.jsx)(n.admonition,{title:"Warning",type:"warning",children:(0,t.jsxs)(n.p,{children:["While the ",(0,t.jsx)(n.code,{children:"touying-equation"})," function is convenient, you should always be aware that it doesn't perform complex syntax analysis. It simply splits the string using regular expressions. Therefore, you should not use ",(0,t.jsx)(n.code,{children:"pause"})," or ",(0,t.jsx)(n.code,{children:"meanwhile"})," within functions like ",(0,t.jsx)(n.code,{children:"display(..)"}),"!"]})}),"\n",(0,t.jsx)(n.h2,{id:"complex-animation",children:"Complex Animation"}),"\n",(0,t.jsxs)(n.p,{children:["In fact, we can also use ",(0,t.jsx)(n.code,{children:"only"}),", ",(0,t.jsx)(n.code,{children:"uncover"}),", and ",(0,t.jsx)(n.code,{children:"alternatives"})," within ",(0,t.jsx)(n.code,{children:"touying-equation"})," with a little trick:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typst",children:'#slide(repeat: 3, self => [\n #let (uncover, only, alternatives) = utils.methods(self)\n\n #touying-equation(scope: (uncover: uncover), `\n f(x) &= pause x^2 + 2x + uncover("3-", 1) \\\n &= pause (x + 1)^2 \\\n `)\n])\n'})}),"\n",(0,t.jsxs)(n.p,{children:["We can pass the functions we need into the ",(0,t.jsx)(n.code,{children:"touying-equation"})," through the ",(0,t.jsx)(n.code,{children:"scope"})," parameter, such as ",(0,t.jsx)(n.code,{children:"uncover"})," in this example."]}),"\n",(0,t.jsx)(n.h2,{id:"parameters",children:"Parameters"}),"\n",(0,t.jsxs)(n.p,{children:["The function definition of ",(0,t.jsx)(n.code,{children:"touying-equation"})," is:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typst",children:"#let touying-equation(block: true, numbering: none, supplement: auto, scope: (:), body) = { .. }\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Therefore, you can pass parameters like ",(0,t.jsx)(n.code,{children:"block"}),", ",(0,t.jsx)(n.code,{children:"numbering"}),", and ",(0,t.jsx)(n.code,{children:"supplement"})," to ",(0,t.jsx)(n.code,{children:"touying-equation"})," just like using normal math equations."]})]})}function d(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},1151:(e,n,i)=>{i.d(n,{Z:()=>c,a:()=>a});var t=i(7294);const o={},s=t.createContext(o);function a(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/51a4d3bf.6dcf872f.js b/assets/js/51a4d3bf.6dcf872f.js new file mode 100644 index 000000000..e47b8bdac --- /dev/null +++ b/assets/js/51a4d3bf.6dcf872f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2289],{4728:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var t=s(5893),i=s(1151);const o={sidebar_position:2},l="Complex Animations",c={id:"dynamic/complex",title:"Complex Animations",description:"Thanks to the syntax provided by Polylux, we can also use only, uncover, and alternatives in Touying.",source:"@site/docs/dynamic/complex.md",sourceDirName:"dynamic",slug:"/dynamic/complex",permalink:"/touying/docs/dynamic/complex",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/dynamic/complex.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Simple Animations",permalink:"/touying/docs/dynamic/simple"},next:{title:"Math Equation Animations",permalink:"/touying/docs/dynamic/equation"}},a={},d=[{value:"Callback-Style Functions",id:"callback-style-functions",level:2},{value:"only",id:"only",level:2},{value:"uncover",id:"uncover",level:2},{value:"alternatives",id:"alternatives",level:2}];function r(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"complex-animations",children:"Complex Animations"}),"\n",(0,t.jsxs)(n.p,{children:["Thanks to the syntax provided by ",(0,t.jsx)(n.a,{href:"https://polylux.dev/book/dynamic/syntax.html",children:"Polylux"}),", we can also use ",(0,t.jsx)(n.code,{children:"only"}),", ",(0,t.jsx)(n.code,{children:"uncover"}),", and ",(0,t.jsx)(n.code,{children:"alternatives"})," in Touying."]}),"\n",(0,t.jsx)(n.h2,{id:"callback-style-functions",children:"Callback-Style Functions"}),"\n",(0,t.jsxs)(n.p,{children:["To overcome the limitations of ",(0,t.jsx)(n.code,{children:"styled"})," and ",(0,t.jsx)(n.code,{children:"layout"})," mentioned earlier, Touying cleverly implements always-effective ",(0,t.jsx)(n.code,{children:"only"}),", ",(0,t.jsx)(n.code,{children:"uncover"}),", and ",(0,t.jsx)(n.code,{children:"alternatives"})," using callback functions. Specifically, you need to introduce these three functions as follows:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typst",children:'#slide(repeat: 3, self => [\n #let (uncover, only, alternatives) = utils.methods(self)\n\n In subslide #self.subslide,\n\n test #uncover("2-")[uncover] function,\n\n and test #only("2-")[only] function,\n\n #pause\n\n and paused text.\n])\n'})}),"\n",(0,t.jsxs)(n.p,{children:["Notice that we no longer pass a content block but instead pass a callback function with a ",(0,t.jsx)(n.code,{children:"self"})," parameter. Later, we extract ",(0,t.jsx)(n.code,{children:"only"}),", ",(0,t.jsx)(n.code,{children:"uncover"}),", and ",(0,t.jsx)(n.code,{children:"alternatives"})," functions from ",(0,t.jsx)(n.code,{children:"self"})," using:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typst",children:"#let (uncover, only, alternatives) = utils.methods(self)\n"})}),"\n",(0,t.jsx)(n.p,{children:"We then call these functions in subsequent steps."}),"\n",(0,t.jsxs)(n.p,{children:["Here's an interesting fact: the ",(0,t.jsx)(n.code,{children:"self.subslide"})," of type int indicates the current subslide index, and in fact, the ",(0,t.jsx)(n.code,{children:"only"}),", ",(0,t.jsx)(n.code,{children:"uncover"}),", and ",(0,t.jsx)(n.code,{children:"alternatives"})," functions rely on ",(0,t.jsx)(n.code,{children:"self.subslide"})," to determine the current subslide index."]}),"\n",(0,t.jsx)(n.admonition,{title:"Warning",type:"warning",children:(0,t.jsxs)(n.p,{children:["We manually specify the ",(0,t.jsx)(n.code,{children:"repeat: 3"})," parameter, indicating the display of 3 subslides. We need to do this manually because Touying cannot infer how many subslides ",(0,t.jsx)(n.code,{children:"only"}),", ",(0,t.jsx)(n.code,{children:"uncover"}),", and ",(0,t.jsx)(n.code,{children:"alternatives"})," should display."]})}),"\n",(0,t.jsx)(n.h2,{id:"only",children:"only"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"only"})," function means it \"appears\" only on selected subslides. If it doesn't appear, it completely disappears and doesn't occupy any space. In other words, ",(0,t.jsx)(n.code,{children:"#only(index, body)"})," is either ",(0,t.jsx)(n.code,{children:"body"})," or ",(0,t.jsx)(n.code,{children:"none"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["The index can be an int type or a str type like ",(0,t.jsx)(n.code,{children:'"2-"'})," or ",(0,t.jsx)(n.code,{children:'"2-3"'}),". For more usage, refer to ",(0,t.jsx)(n.a,{href:"https://polylux.dev/book/dynamic/complex.html",children:"Polylux"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"uncover",children:"uncover"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"uncover"}),' function means it "displays" only on selected subslides; otherwise, it will be covered by the ',(0,t.jsx)(n.code,{children:"cover"})," function but still occupies the original space. In other words, ",(0,t.jsx)(n.code,{children:"#uncover(index, body)"})," is either ",(0,t.jsx)(n.code,{children:"body"})," or ",(0,t.jsx)(n.code,{children:"cover(body)"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["The index can be an int type or a str type like ",(0,t.jsx)(n.code,{children:'"2-"'})," or ",(0,t.jsx)(n.code,{children:'"2-3"'}),". For more usage, refer to ",(0,t.jsx)(n.a,{href:"https://polylux.dev/book/dynamic/complex.html",children:"Polylux"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["You may also have noticed that ",(0,t.jsx)(n.code,{children:"#pause"})," actually uses the ",(0,t.jsx)(n.code,{children:"cover"})," function, providing a more convenient syntax. In reality, their effects are almost identical."]}),"\n",(0,t.jsx)(n.h2,{id:"alternatives",children:"alternatives"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"alternatives"})," function displays a series of different content in different subslides. For example:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typst",children:"#slide(repeat: 3, self => [\n #let (uncover, only, alternatives) = utils.methods(self)\n\n #alternatives[Ann][Bob][Christopher]\n likes\n #alternatives[chocolate][strawberry][vanilla]\n ice cream.\n])\n"})}),"\n",(0,t.jsxs)(n.p,{children:["As you can see, ",(0,t.jsx)(n.code,{children:"alternatives"})," can automatically expand to the most suitable width and height, a capability that ",(0,t.jsx)(n.code,{children:"only"})," and ",(0,t.jsx)(n.code,{children:"uncover"})," lack. In fact, ",(0,t.jsx)(n.code,{children:"alternatives"})," has other parameters, such as ",(0,t.jsx)(n.code,{children:"start: 2"}),", ",(0,t.jsx)(n.code,{children:"repeat-last: true"}),", and ",(0,t.jsx)(n.code,{children:"position: center + horizon"}),". For more usage, refer to ",(0,t.jsx)(n.a,{href:"https://polylux.dev/book/dynamic/alternatives.html",children:"Polylux"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(r,{...e})}):r(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>l});var t=s(7294);const i={},o=t.createContext(i);function l(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/51a4d3bf.c192eb9b.js b/assets/js/51a4d3bf.c192eb9b.js deleted file mode 100644 index 5d9e600fa..000000000 --- a/assets/js/51a4d3bf.c192eb9b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2289],{4728:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var t=s(5893),i=s(1151);const o={sidebar_position:2},l="Complex Animations",c={id:"dynamic/complex",title:"Complex Animations",description:"Thanks to the syntax provided by Polylux, we can also use only, uncover, and alternatives in Touying.",source:"@site/docs/dynamic/complex.md",sourceDirName:"dynamic",slug:"/dynamic/complex",permalink:"/docs/dynamic/complex",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/dynamic/complex.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Simple Animations",permalink:"/docs/dynamic/simple"},next:{title:"Math Equation Animations",permalink:"/docs/dynamic/equation"}},a={},d=[{value:"Callback-Style Functions",id:"callback-style-functions",level:2},{value:"only",id:"only",level:2},{value:"uncover",id:"uncover",level:2},{value:"alternatives",id:"alternatives",level:2}];function r(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"complex-animations",children:"Complex Animations"}),"\n",(0,t.jsxs)(n.p,{children:["Thanks to the syntax provided by ",(0,t.jsx)(n.a,{href:"https://polylux.dev/book/dynamic/syntax.html",children:"Polylux"}),", we can also use ",(0,t.jsx)(n.code,{children:"only"}),", ",(0,t.jsx)(n.code,{children:"uncover"}),", and ",(0,t.jsx)(n.code,{children:"alternatives"})," in Touying."]}),"\n",(0,t.jsx)(n.h2,{id:"callback-style-functions",children:"Callback-Style Functions"}),"\n",(0,t.jsxs)(n.p,{children:["To overcome the limitations of ",(0,t.jsx)(n.code,{children:"styled"})," and ",(0,t.jsx)(n.code,{children:"layout"})," mentioned earlier, Touying cleverly implements always-effective ",(0,t.jsx)(n.code,{children:"only"}),", ",(0,t.jsx)(n.code,{children:"uncover"}),", and ",(0,t.jsx)(n.code,{children:"alternatives"})," using callback functions. Specifically, you need to introduce these three functions as follows:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typst",children:'#slide(repeat: 3, self => [\n #let (uncover, only, alternatives) = utils.methods(self)\n\n In subslide #self.subslide,\n\n test #uncover("2-")[uncover] function,\n\n and test #only("2-")[only] function,\n\n #pause\n\n and paused text.\n])\n'})}),"\n",(0,t.jsxs)(n.p,{children:["Notice that we no longer pass a content block but instead pass a callback function with a ",(0,t.jsx)(n.code,{children:"self"})," parameter. Later, we extract ",(0,t.jsx)(n.code,{children:"only"}),", ",(0,t.jsx)(n.code,{children:"uncover"}),", and ",(0,t.jsx)(n.code,{children:"alternatives"})," functions from ",(0,t.jsx)(n.code,{children:"self"})," using:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typst",children:"#let (uncover, only, alternatives) = utils.methods(self)\n"})}),"\n",(0,t.jsx)(n.p,{children:"We then call these functions in subsequent steps."}),"\n",(0,t.jsxs)(n.p,{children:["Here's an interesting fact: the ",(0,t.jsx)(n.code,{children:"self.subslide"})," of type int indicates the current subslide index, and in fact, the ",(0,t.jsx)(n.code,{children:"only"}),", ",(0,t.jsx)(n.code,{children:"uncover"}),", and ",(0,t.jsx)(n.code,{children:"alternatives"})," functions rely on ",(0,t.jsx)(n.code,{children:"self.subslide"})," to determine the current subslide index."]}),"\n",(0,t.jsx)(n.admonition,{title:"Warning",type:"warning",children:(0,t.jsxs)(n.p,{children:["We manually specify the ",(0,t.jsx)(n.code,{children:"repeat: 3"})," parameter, indicating the display of 3 subslides. We need to do this manually because Touying cannot infer how many subslides ",(0,t.jsx)(n.code,{children:"only"}),", ",(0,t.jsx)(n.code,{children:"uncover"}),", and ",(0,t.jsx)(n.code,{children:"alternatives"})," should display."]})}),"\n",(0,t.jsx)(n.h2,{id:"only",children:"only"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"only"})," function means it \"appears\" only on selected subslides. If it doesn't appear, it completely disappears and doesn't occupy any space. In other words, ",(0,t.jsx)(n.code,{children:"#only(index, body)"})," is either ",(0,t.jsx)(n.code,{children:"body"})," or ",(0,t.jsx)(n.code,{children:"none"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["The index can be an int type or a str type like ",(0,t.jsx)(n.code,{children:'"2-"'})," or ",(0,t.jsx)(n.code,{children:'"2-3"'}),". For more usage, refer to ",(0,t.jsx)(n.a,{href:"https://polylux.dev/book/dynamic/complex.html",children:"Polylux"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"uncover",children:"uncover"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"uncover"}),' function means it "displays" only on selected subslides; otherwise, it will be covered by the ',(0,t.jsx)(n.code,{children:"cover"})," function but still occupies the original space. In other words, ",(0,t.jsx)(n.code,{children:"#uncover(index, body)"})," is either ",(0,t.jsx)(n.code,{children:"body"})," or ",(0,t.jsx)(n.code,{children:"cover(body)"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["The index can be an int type or a str type like ",(0,t.jsx)(n.code,{children:'"2-"'})," or ",(0,t.jsx)(n.code,{children:'"2-3"'}),". For more usage, refer to ",(0,t.jsx)(n.a,{href:"https://polylux.dev/book/dynamic/complex.html",children:"Polylux"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["You may also have noticed that ",(0,t.jsx)(n.code,{children:"#pause"})," actually uses the ",(0,t.jsx)(n.code,{children:"cover"})," function, providing a more convenient syntax. In reality, their effects are almost identical."]}),"\n",(0,t.jsx)(n.h2,{id:"alternatives",children:"alternatives"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"alternatives"})," function displays a series of different content in different subslides. For example:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typst",children:"#slide(repeat: 3, self => [\n #let (uncover, only, alternatives) = utils.methods(self)\n\n #alternatives[Ann][Bob][Christopher]\n likes\n #alternatives[chocolate][strawberry][vanilla]\n ice cream.\n])\n"})}),"\n",(0,t.jsxs)(n.p,{children:["As you can see, ",(0,t.jsx)(n.code,{children:"alternatives"})," can automatically expand to the most suitable width and height, a capability that ",(0,t.jsx)(n.code,{children:"only"})," and ",(0,t.jsx)(n.code,{children:"uncover"})," lack. In fact, ",(0,t.jsx)(n.code,{children:"alternatives"})," has other parameters, such as ",(0,t.jsx)(n.code,{children:"start: 2"}),", ",(0,t.jsx)(n.code,{children:"repeat-last: true"}),", and ",(0,t.jsx)(n.code,{children:"position: center + horizon"}),". For more usage, refer to ",(0,t.jsx)(n.a,{href:"https://polylux.dev/book/dynamic/alternatives.html",children:"Polylux"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(r,{...e})}):r(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>l});var t=s(7294);const i={},o=t.createContext(i);function l(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/54ea3d6a.f96dd531.js b/assets/js/54ea3d6a.f96dd531.js new file mode 100644 index 000000000..498cc16ac --- /dev/null +++ b/assets/js/54ea3d6a.f96dd531.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[5617],{2251:s=>{s.exports=JSON.parse('{"title":"Progress","description":"Manage and display progress in Touying, such as counters and sections.","slug":"/category/progress","permalink":"/touying/docs/category/progress","navigation":{"previous":{"title":"Build Your Own Theme","permalink":"/touying/docs/build-your-own-theme"},"next":{"title":"Touying Counters","permalink":"/touying/docs/progress/counters"}}}')}}]); \ No newline at end of file diff --git a/assets/js/5670b452.7985430f.js b/assets/js/5670b452.7985430f.js new file mode 100644 index 000000000..c8a8ec349 --- /dev/null +++ b/assets/js/5670b452.7985430f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[997],{2261:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var i=t(5893),o=t(1151);const s={sidebar_position:7},r="Build Your Own Theme",c={id:"build-your-own-theme",title:"Build Your Own Theme",description:"You can refer to the source code of themes. The main things to implement are:",source:"@site/docs/build-your-own-theme.md",sourceDirName:".",slug:"/build-your-own-theme",permalink:"/touying/docs/build-your-own-theme",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/build-your-own-theme.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7},sidebar:"tutorialSidebar",previous:{title:"Dewdrop Theme",permalink:"/touying/docs/themes/dewdrop"},next:{title:"Progress",permalink:"/touying/docs/category/progress"}},l={},d=[];function u(e){const n={a:"a",code:"code",h1:"h1",li:"li",p:"p",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"build-your-own-theme",children:"Build Your Own Theme"}),"\n",(0,i.jsxs)(n.p,{children:["You can refer to the ",(0,i.jsx)(n.a,{href:"https://github.com/touying-typ/touying/tree/main/themes",children:"source code of themes"}),". The main things to implement are:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Customize the color theme by modifying ",(0,i.jsx)(n.code,{children:"self.colors"}),"."]}),"\n",(0,i.jsx)(n.li,{children:"Customize the header."}),"\n",(0,i.jsx)(n.li,{children:"Customize the footer."}),"\n",(0,i.jsxs)(n.li,{children:["Optionally, customize the ",(0,i.jsx)(n.code,{children:"alert"})," function."]}),"\n",(0,i.jsxs)(n.li,{children:["Customize the ",(0,i.jsx)(n.code,{children:"slide"})," function."]}),"\n",(0,i.jsxs)(n.li,{children:["Customize special slide functions, such as ",(0,i.jsx)(n.code,{children:"title-slide"})," and ",(0,i.jsx)(n.code,{children:"focus-slide"})," functions."]}),"\n",(0,i.jsxs)(n.li,{children:["Customize the ",(0,i.jsx)(n.code,{children:"slide-in-slides"})," function, which will be called by the ",(0,i.jsx)(n.code,{children:"slides"})," function."]}),"\n",(0,i.jsxs)(n.li,{children:["Optionally, customize the ",(0,i.jsx)(n.code,{children:"slides"})," function."]}),"\n",(0,i.jsxs)(n.li,{children:["Customize the ",(0,i.jsx)(n.code,{children:"register"})," function to initialize the global singleton ",(0,i.jsx)(n.code,{children:"s"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Optionally, customize the ",(0,i.jsx)(n.code,{children:"init"})," function."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"More detailed documentation to be added."})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>r});var i=t(7294);const o={},s=i.createContext(o);function r(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5670b452.7b39767b.js b/assets/js/5670b452.7b39767b.js deleted file mode 100644 index eae25bfe7..000000000 --- a/assets/js/5670b452.7b39767b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[997],{2261:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var i=t(5893),o=t(1151);const s={sidebar_position:7},r="Build Your Own Theme",c={id:"build-your-own-theme",title:"Build Your Own Theme",description:"You can refer to the source code of themes. The main things to implement are:",source:"@site/docs/build-your-own-theme.md",sourceDirName:".",slug:"/build-your-own-theme",permalink:"/docs/build-your-own-theme",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/build-your-own-theme.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7},sidebar:"tutorialSidebar",previous:{title:"Dewdrop Theme",permalink:"/docs/themes/dewdrop"},next:{title:"Progress",permalink:"/docs/category/progress"}},l={},d=[];function u(e){const n={a:"a",code:"code",h1:"h1",li:"li",p:"p",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"build-your-own-theme",children:"Build Your Own Theme"}),"\n",(0,i.jsxs)(n.p,{children:["You can refer to the ",(0,i.jsx)(n.a,{href:"https://github.com/touying-typ/touying/tree/main/themes",children:"source code of themes"}),". The main things to implement are:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Customize the color theme by modifying ",(0,i.jsx)(n.code,{children:"self.colors"}),"."]}),"\n",(0,i.jsx)(n.li,{children:"Customize the header."}),"\n",(0,i.jsx)(n.li,{children:"Customize the footer."}),"\n",(0,i.jsxs)(n.li,{children:["Optionally, customize the ",(0,i.jsx)(n.code,{children:"alert"})," function."]}),"\n",(0,i.jsxs)(n.li,{children:["Customize the ",(0,i.jsx)(n.code,{children:"slide"})," function."]}),"\n",(0,i.jsxs)(n.li,{children:["Customize special slide functions, such as ",(0,i.jsx)(n.code,{children:"title-slide"})," and ",(0,i.jsx)(n.code,{children:"focus-slide"})," functions."]}),"\n",(0,i.jsxs)(n.li,{children:["Customize the ",(0,i.jsx)(n.code,{children:"slide-in-slides"})," function, which will be called by the ",(0,i.jsx)(n.code,{children:"slides"})," function."]}),"\n",(0,i.jsxs)(n.li,{children:["Optionally, customize the ",(0,i.jsx)(n.code,{children:"slides"})," function."]}),"\n",(0,i.jsxs)(n.li,{children:["Customize the ",(0,i.jsx)(n.code,{children:"register"})," function to initialize the global singleton ",(0,i.jsx)(n.code,{children:"s"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Optionally, customize the ",(0,i.jsx)(n.code,{children:"init"})," function."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"More detailed documentation to be added."})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>r});var i=t(7294);const o={},s=i.createContext(o);function r(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5a57e638.63c893b9.js b/assets/js/5a57e638.63c893b9.js deleted file mode 100644 index 6ff2b48a9..000000000 --- a/assets/js/5a57e638.63c893b9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2143],{8811:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>r,toc:()=>c});var i=s(5893),t=s(1151);const l={sidebar_position:1},o="Simple Theme",r={id:"themes/simple",title:"Simple Theme",description:"This theme is derived from Polylux, created by Andreas Kr\xf6pelin.",source:"@site/docs/themes/simple.md",sourceDirName:"themes",slug:"/themes/simple",permalink:"/docs/themes/simple",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/themes/simple.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Themes",permalink:"/docs/category/themes"},next:{title:"Metropolis Theme",permalink:"/docs/themes/metropolis"}},d={},c=[{value:"Initialization",id:"initialization",level:2},{value:"Slide Function Family",id:"slide-function-family",level:2},{value:"slides Function",id:"slides-function",level:2},{value:"Example",id:"example",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",hr:"hr",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"simple-theme",children:"Simple Theme"}),"\n",(0,i.jsxs)(n.p,{children:["This theme is derived from ",(0,i.jsx)(n.a,{href:"https://polylux.dev/book/themes/gallery/simple.html",children:"Polylux"}),", created by Andreas Kr\xf6pelin."]}),"\n",(0,i.jsx)(n.p,{children:"Considered a relatively simple theme, you can use it to create straightforward slides and easily incorporate features you like."}),"\n",(0,i.jsx)(n.h2,{id:"initialization",children:"Initialization"}),"\n",(0,i.jsx)(n.p,{children:"You can initialize the Simple theme using the following code:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let s = themes.simple.register(s, aspect-ratio: "16-9", footer: [Simple slides])\n#let s = (s.methods.enable-transparent-cover)(self: s)\n#let (init, slide, slides, title-slide, centered-slide, focus-slide) = utils.methods(s)\n#show: init\n'})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"register"})," function takes parameters such as:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"aspect-ratio"}),': The aspect ratio of the slides, either "16-9" or "4-3," with the default being "16-9."']}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"footer"}),": Content to be displayed in the footer, with the default being ",(0,i.jsx)(n.code,{children:"[]"}),". You can also pass a function like ",(0,i.jsx)(n.code,{children:"self => self.info.author"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"footer-right"}),": Content to be displayed on the right side of the footer, with the default being ",(0,i.jsx)(n.code,{children:'states.slide-counter.display() + " / " + states.last-slide-number'}),"."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"background"}),": Background color, with the default being white."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"foreground"}),": Text color, with the default being black."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"primary"}),": Theme color, with the default being ",(0,i.jsx)(n.code,{children:"aqua.darken(50%)"}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"slide-function-family",children:"Slide Function Family"}),"\n",(0,i.jsx)(n.p,{children:"The Simple theme provides a series of custom slide functions:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:"#centered-slide(section: ..)[\n ...\n]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["A slide with content centered on the slide. The ",(0,i.jsx)(n.code,{children:"section"})," parameter can be used to create a new section."]}),"\n",(0,i.jsx)(n.hr,{}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:"#title-slide[\n ...\n]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Similar to ",(0,i.jsx)(n.code,{children:"centered-slide"}),", this is just for consistency with Polylux syntax."]}),"\n",(0,i.jsx)(n.hr,{}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:"#slide(\n repeat: auto,\n setting: body => body,\n composer: utils.side-by-side,\n section: none,\n subsection: none,\n // simple theme args\n footer: auto,\n)[\n ...\n]\n"})}),"\n",(0,i.jsx)(n.p,{children:"This is the default ordinary slide function with a header and footer. The header is set to the current section, and the footer is as per your settings."}),"\n",(0,i.jsx)(n.hr,{}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:"#focus-slide(foreground: ..., background: ...)[\n ...\n]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Used to draw attention. It optionally accepts a foreground color (default is ",(0,i.jsx)(n.code,{children:"white"}),") and a background color (default is ",(0,i.jsx)(n.code,{children:"auto"}),", i.e., ",(0,i.jsx)(n.code,{children:"self.colors.primary"}),")."]}),"\n",(0,i.jsxs)(n.h2,{id:"slides-function",children:[(0,i.jsx)(n.code,{children:"slides"})," Function"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let s = themes.simple.register(s, aspect-ratio: "16-9", footer: [Simple slides])\n#let s = (s.methods.enable-transparent-cover)(self: s)\n#let (init, slide, slides, title-slide, centered-slide, focus-slide) = utils.methods(s)\n#show: init\n\n#show: slides\n\n= Title\n\n== First Slide\n\nHello, Touying!\n\n#pause\n\nHello, Typst!\n'})}),"\n",(0,i.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let s = themes.simple.register(s, aspect-ratio: "16-9", footer: [Simple slides])\n#let s = (s.methods.enable-transparent-cover)(self: s)\n#let (init, slide, slides, title-slide, centered-slide, focus-slide) = utils.methods(s)\n#show: init\n\n#title-slide[\n = Keep it simple!\n #v(2em)\n\n Alpha #footnote[Uni Augsburg] #h(1em)\n Bravo #footnote[Uni Bayreuth] #h(1em)\n Charlie #footnote[Uni Chemnitz] #h(1em)\n\n July 23\n]\n\n#slide[\n == First slide\n\n #lorem(20)\n]\n\n#focus-slide[\n _Focus!_\n\n This is very important.\n]\n\n#centered-slide(section: [Let\'s start a new section!])\n\n#slide[\n == Dynamic slide\n Did you know that...\n\n #pause\n ...you can see the current section at the top of the slide?\n]\n'})})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>r,a:()=>o});var i=s(7294);const t={},l=i.createContext(t);function o(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5a57e638.7f12e2df.js b/assets/js/5a57e638.7f12e2df.js new file mode 100644 index 000000000..29ce663e2 --- /dev/null +++ b/assets/js/5a57e638.7f12e2df.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2143],{8811:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>r,toc:()=>c});var i=s(5893),t=s(1151);const l={sidebar_position:1},o="Simple Theme",r={id:"themes/simple",title:"Simple Theme",description:"This theme is derived from Polylux, created by Andreas Kr\xf6pelin.",source:"@site/docs/themes/simple.md",sourceDirName:"themes",slug:"/themes/simple",permalink:"/touying/docs/themes/simple",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/themes/simple.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Themes",permalink:"/touying/docs/category/themes"},next:{title:"Metropolis Theme",permalink:"/touying/docs/themes/metropolis"}},d={},c=[{value:"Initialization",id:"initialization",level:2},{value:"Slide Function Family",id:"slide-function-family",level:2},{value:"slides Function",id:"slides-function",level:2},{value:"Example",id:"example",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",hr:"hr",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"simple-theme",children:"Simple Theme"}),"\n",(0,i.jsxs)(n.p,{children:["This theme is derived from ",(0,i.jsx)(n.a,{href:"https://polylux.dev/book/themes/gallery/simple.html",children:"Polylux"}),", created by Andreas Kr\xf6pelin."]}),"\n",(0,i.jsx)(n.p,{children:"Considered a relatively simple theme, you can use it to create straightforward slides and easily incorporate features you like."}),"\n",(0,i.jsx)(n.h2,{id:"initialization",children:"Initialization"}),"\n",(0,i.jsx)(n.p,{children:"You can initialize the Simple theme using the following code:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let s = themes.simple.register(s, aspect-ratio: "16-9", footer: [Simple slides])\n#let s = (s.methods.enable-transparent-cover)(self: s)\n#let (init, slide, slides, title-slide, centered-slide, focus-slide) = utils.methods(s)\n#show: init\n'})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"register"})," function takes parameters such as:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"aspect-ratio"}),': The aspect ratio of the slides, either "16-9" or "4-3," with the default being "16-9."']}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"footer"}),": Content to be displayed in the footer, with the default being ",(0,i.jsx)(n.code,{children:"[]"}),". You can also pass a function like ",(0,i.jsx)(n.code,{children:"self => self.info.author"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"footer-right"}),": Content to be displayed on the right side of the footer, with the default being ",(0,i.jsx)(n.code,{children:'states.slide-counter.display() + " / " + states.last-slide-number'}),"."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"background"}),": Background color, with the default being white."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"foreground"}),": Text color, with the default being black."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"primary"}),": Theme color, with the default being ",(0,i.jsx)(n.code,{children:"aqua.darken(50%)"}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"slide-function-family",children:"Slide Function Family"}),"\n",(0,i.jsx)(n.p,{children:"The Simple theme provides a series of custom slide functions:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:"#centered-slide(section: ..)[\n ...\n]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["A slide with content centered on the slide. The ",(0,i.jsx)(n.code,{children:"section"})," parameter can be used to create a new section."]}),"\n",(0,i.jsx)(n.hr,{}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:"#title-slide[\n ...\n]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Similar to ",(0,i.jsx)(n.code,{children:"centered-slide"}),", this is just for consistency with Polylux syntax."]}),"\n",(0,i.jsx)(n.hr,{}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:"#slide(\n repeat: auto,\n setting: body => body,\n composer: utils.side-by-side,\n section: none,\n subsection: none,\n // simple theme args\n footer: auto,\n)[\n ...\n]\n"})}),"\n",(0,i.jsx)(n.p,{children:"This is the default ordinary slide function with a header and footer. The header is set to the current section, and the footer is as per your settings."}),"\n",(0,i.jsx)(n.hr,{}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:"#focus-slide(foreground: ..., background: ...)[\n ...\n]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Used to draw attention. It optionally accepts a foreground color (default is ",(0,i.jsx)(n.code,{children:"white"}),") and a background color (default is ",(0,i.jsx)(n.code,{children:"auto"}),", i.e., ",(0,i.jsx)(n.code,{children:"self.colors.primary"}),")."]}),"\n",(0,i.jsxs)(n.h2,{id:"slides-function",children:[(0,i.jsx)(n.code,{children:"slides"})," Function"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let s = themes.simple.register(s, aspect-ratio: "16-9", footer: [Simple slides])\n#let s = (s.methods.enable-transparent-cover)(self: s)\n#let (init, slide, slides, title-slide, centered-slide, focus-slide) = utils.methods(s)\n#show: init\n\n#show: slides\n\n= Title\n\n== First Slide\n\nHello, Touying!\n\n#pause\n\nHello, Typst!\n'})}),"\n",(0,i.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let s = themes.simple.register(s, aspect-ratio: "16-9", footer: [Simple slides])\n#let s = (s.methods.enable-transparent-cover)(self: s)\n#let (init, slide, slides, title-slide, centered-slide, focus-slide) = utils.methods(s)\n#show: init\n\n#title-slide[\n = Keep it simple!\n #v(2em)\n\n Alpha #footnote[Uni Augsburg] #h(1em)\n Bravo #footnote[Uni Bayreuth] #h(1em)\n Charlie #footnote[Uni Chemnitz] #h(1em)\n\n July 23\n]\n\n#slide[\n == First slide\n\n #lorem(20)\n]\n\n#focus-slide[\n _Focus!_\n\n This is very important.\n]\n\n#centered-slide(section: [Let\'s start a new section!])\n\n#slide[\n == Dynamic slide\n Did you know that...\n\n #pause\n ...you can see the current section at the top of the slide?\n]\n'})})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>r,a:()=>o});var i=s(7294);const t={},l=i.createContext(t);function o(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5b27bc59.a5c695e7.js b/assets/js/5b27bc59.a5c695e7.js deleted file mode 100644 index b1141c23d..000000000 --- a/assets/js/5b27bc59.a5c695e7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3969],{4154:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>s,toc:()=>c});var o=n(5893),i=n(1151);const r={sidebar_position:5},a="Handout Mode",s={id:"dynamic/handout",title:"Handout Mode",description:"While watching slides and attending lectures, the audience often wishes to have handouts for reviewing challenging concepts. Therefore, it's beneficial for the author to provide handouts for the audience, preferably before the lecture for better preparation.",source:"@site/docs/dynamic/handout.md",sourceDirName:"dynamic",slug:"/dynamic/handout",permalink:"/docs/dynamic/handout",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/dynamic/handout.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Cover Function",permalink:"/docs/dynamic/cover"},next:{title:"Themes",permalink:"/docs/category/themes"}},d={},c=[];function u(e){const t={code:"code",h1:"h1",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"handout-mode",children:"Handout Mode"}),"\n",(0,o.jsx)(t.p,{children:"While watching slides and attending lectures, the audience often wishes to have handouts for reviewing challenging concepts. Therefore, it's beneficial for the author to provide handouts for the audience, preferably before the lecture for better preparation."}),"\n",(0,o.jsx)(t.p,{children:"The handout mode differs from the regular mode as it doesn't require intricate animation effects. It retains only the last subslide of each slide."}),"\n",(0,o.jsx)(t.p,{children:"Enabling handout mode is simple:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-typst",children:"#let s = (s.methods.enable-handout-mode)(self: s)\n"})})]})}function h(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>a});var o=n(7294);const i={},r=o.createContext(i);function a(e){const t=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),o.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5b27bc59.e9658089.js b/assets/js/5b27bc59.e9658089.js new file mode 100644 index 000000000..7d5786938 --- /dev/null +++ b/assets/js/5b27bc59.e9658089.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3969],{4154:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>s,toc:()=>c});var o=n(5893),i=n(1151);const r={sidebar_position:5},a="Handout Mode",s={id:"dynamic/handout",title:"Handout Mode",description:"While watching slides and attending lectures, the audience often wishes to have handouts for reviewing challenging concepts. Therefore, it's beneficial for the author to provide handouts for the audience, preferably before the lecture for better preparation.",source:"@site/docs/dynamic/handout.md",sourceDirName:"dynamic",slug:"/dynamic/handout",permalink:"/touying/docs/dynamic/handout",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/dynamic/handout.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Cover Function",permalink:"/touying/docs/dynamic/cover"},next:{title:"Themes",permalink:"/touying/docs/category/themes"}},d={},c=[];function u(e){const t={code:"code",h1:"h1",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"handout-mode",children:"Handout Mode"}),"\n",(0,o.jsx)(t.p,{children:"While watching slides and attending lectures, the audience often wishes to have handouts for reviewing challenging concepts. Therefore, it's beneficial for the author to provide handouts for the audience, preferably before the lecture for better preparation."}),"\n",(0,o.jsx)(t.p,{children:"The handout mode differs from the regular mode as it doesn't require intricate animation effects. It retains only the last subslide of each slide."}),"\n",(0,o.jsx)(t.p,{children:"Enabling handout mode is simple:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-typst",children:"#let s = (s.methods.enable-handout-mode)(self: s)\n"})})]})}function h(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>a});var o=n(7294);const i={},r=o.createContext(i);function a(e){const t=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),o.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/661132b8.5bc17139.js b/assets/js/661132b8.5bc17139.js deleted file mode 100644 index d88c866e7..000000000 --- a/assets/js/661132b8.5bc17139.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7092],{9572:e=>{e.exports=JSON.parse('{"label":"development","permalink":"/blog/tags/development","allTagsPath":"/blog/tags","count":1,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/6b839bb6.28c5ab65.js b/assets/js/6b839bb6.28c5ab65.js new file mode 100644 index 000000000..954a5e596 --- /dev/null +++ b/assets/js/6b839bb6.28c5ab65.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4863],{7310:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>d,toc:()=>r});var t=n(5893),i=n(1151);const o={sidebar_position:4},l="Code Styles",d={id:"style",title:"Code Styles",description:"show-slides Style",source:"@site/docs/style.md",sourceDirName:".",slug:"/style",permalink:"/touying/docs/style",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/style.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Layout Your Contents",permalink:"/touying/docs/layout"},next:{title:"Dynamic Slides",permalink:"/touying/docs/category/dynamic-slides"}},c={},r=[{value:"show-slides Style",id:"show-slides-style",level:2},{value:"slide-block Style",id:"slide-block-style",level:2}];function a(e){const s={code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"code-styles",children:"Code Styles"}),"\n",(0,t.jsx)(s.h2,{id:"show-slides-style",children:"show-slides Style"}),"\n",(0,t.jsxs)(s.p,{children:["If we only need simplicity, we can use ",(0,t.jsx)(s.code,{children:"#show: slides"})," for a cleaner syntax."]}),"\n",(0,t.jsxs)(s.p,{children:["However, this approach has corresponding drawbacks: firstly, this method may significantly impact document rendering performance. Secondly, subsequent ",(0,t.jsx)(s.code,{children:"#slide(..)"})," cannot be added directly. Instead, you need to manually mark ",(0,t.jsx)(s.code,{children:"#slides-end"}),". The most significant drawback is that complex functionalities cannot be achieved."]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let (init, slide, slides) = utils.methods(s)\n#show: init\n\n#show: slides\n\n= Title\n\n== First Slide\n\nHello, Touying!\n\n#pause\n\nHello, Typst!\n\n#slides-end\n\n#slide[\n A new slide.\n]\n'})}),"\n",(0,t.jsx)(s.h2,{id:"slide-block-style",children:"slide-block Style"}),"\n",(0,t.jsx)(s.p,{children:"For better performance and more powerful capabilities, in most cases, we still need to use the code style like:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-typst",children:"#slide[\n A new slide.\n]\n"})})]})}function u(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},1151:(e,s,n)=>{n.d(s,{Z:()=>d,a:()=>l});var t=n(7294);const i={},o=t.createContext(i);function l(e){const s=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function d(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),t.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6b839bb6.c2060ec7.js b/assets/js/6b839bb6.c2060ec7.js deleted file mode 100644 index 19139660d..000000000 --- a/assets/js/6b839bb6.c2060ec7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4863],{7310:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>d,toc:()=>r});var t=n(5893),i=n(1151);const o={sidebar_position:4},l="Code Styles",d={id:"style",title:"Code Styles",description:"show-slides Style",source:"@site/docs/style.md",sourceDirName:".",slug:"/style",permalink:"/docs/style",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/style.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Layout Your Contents",permalink:"/docs/layout"},next:{title:"Dynamic Slides",permalink:"/docs/category/dynamic-slides"}},c={},r=[{value:"show-slides Style",id:"show-slides-style",level:2},{value:"slide-block Style",id:"slide-block-style",level:2}];function a(e){const s={code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"code-styles",children:"Code Styles"}),"\n",(0,t.jsx)(s.h2,{id:"show-slides-style",children:"show-slides Style"}),"\n",(0,t.jsxs)(s.p,{children:["If we only need simplicity, we can use ",(0,t.jsx)(s.code,{children:"#show: slides"})," for a cleaner syntax."]}),"\n",(0,t.jsxs)(s.p,{children:["However, this approach has corresponding drawbacks: firstly, this method may significantly impact document rendering performance. Secondly, subsequent ",(0,t.jsx)(s.code,{children:"#slide(..)"})," cannot be added directly. Instead, you need to manually mark ",(0,t.jsx)(s.code,{children:"#slides-end"}),". The most significant drawback is that complex functionalities cannot be achieved."]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let (init, slide, slides) = utils.methods(s)\n#show: init\n\n#show: slides\n\n= Title\n\n== First Slide\n\nHello, Touying!\n\n#pause\n\nHello, Typst!\n\n#slides-end\n\n#slide[\n A new slide.\n]\n'})}),"\n",(0,t.jsx)(s.h2,{id:"slide-block-style",children:"slide-block Style"}),"\n",(0,t.jsx)(s.p,{children:"For better performance and more powerful capabilities, in most cases, we still need to use the code style like:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-typst",children:"#slide[\n A new slide.\n]\n"})})]})}function u(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},1151:(e,s,n)=>{n.d(s,{Z:()=>d,a:()=>l});var t=n(7294);const i={},o=t.createContext(i);function l(e){const s=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function d(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),t.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6bd5e75c.c1636df2.js b/assets/js/6bd5e75c.c1636df2.js new file mode 100644 index 000000000..b2ae2456a --- /dev/null +++ b/assets/js/6bd5e75c.c1636df2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2172],{6484:e=>{e.exports=JSON.parse('{"title":"Themes","description":"One convenient aspect of using Touying is that you can use the themes provided by Touying or create your own themes or templates with the help of Touying.","slug":"/category/themes","permalink":"/touying/docs/category/themes","navigation":{"previous":{"title":"Handout Mode","permalink":"/touying/docs/dynamic/handout"},"next":{"title":"Simple Theme","permalink":"/touying/docs/themes/simple"}}}')}}]); \ No newline at end of file diff --git a/assets/js/6d7ce909.dc371b75.js b/assets/js/6d7ce909.dc371b75.js deleted file mode 100644 index 822ea6949..000000000 --- a/assets/js/6d7ce909.dc371b75.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[5695],{689:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>a,frontMatter:()=>r,metadata:()=>d,toc:()=>l});var s=n(5893),i=n(1151);const r={sidebar_position:2},o="Typst Preview",d={id:"external/typst-preview",title:"Typst Preview",description:"The Typst Preview extension for VS Code provides an excellent slide mode, allowing us to preview and present slides.",source:"@site/docs/external/typst-preview.md",sourceDirName:"external",slug:"/external/typst-preview",permalink:"/docs/external/typst-preview",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/external/typst-preview.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Pdfpc",permalink:"/docs/external/pdfpc"},next:{title:"Changelog",permalink:"/docs/changelog"}},c={},l=[];function p(e){const t={code:"code",h1:"h1",p:"p",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"typst-preview",children:"Typst Preview"}),"\n",(0,s.jsx)(t.p,{children:"The Typst Preview extension for VS Code provides an excellent slide mode, allowing us to preview and present slides."}),"\n",(0,s.jsxs)(t.p,{children:["Press ",(0,s.jsx)(t.code,{children:"Ctrl/Cmd + Shift + P"})," and type ",(0,s.jsx)(t.code,{children:"Typst Preview: Preview current file in slide mode"})," to open the preview in slide mode."]}),"\n",(0,s.jsxs)(t.p,{children:["Press ",(0,s.jsx)(t.code,{children:"Ctrl/Cmd + Shift + P"})," and type ",(0,s.jsx)(t.code,{children:"Typst Preview: Preview current file in browser and slide mode"})," to open the slide mode in the browser."]}),"\n",(0,s.jsxs)(t.p,{children:["Now, you can press keys like ",(0,s.jsx)(t.code,{children:"F11"})," to enter fullscreen mode in the browser, making it suitable for slide presentations."]}),"\n",(0,s.jsx)(t.p,{children:"Since Typst Preview is based on SVG, it can play GIF animations, which is very helpful for dynamic slides."})]})}function a(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>d,a:()=>o});var s=n(7294);const i={},r=s.createContext(i);function o(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6d7ce909.f02bfc93.js b/assets/js/6d7ce909.f02bfc93.js new file mode 100644 index 000000000..e6e1087ed --- /dev/null +++ b/assets/js/6d7ce909.f02bfc93.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[5695],{689:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>a,frontMatter:()=>r,metadata:()=>d,toc:()=>l});var s=n(5893),i=n(1151);const r={sidebar_position:2},o="Typst Preview",d={id:"external/typst-preview",title:"Typst Preview",description:"The Typst Preview extension for VS Code provides an excellent slide mode, allowing us to preview and present slides.",source:"@site/docs/external/typst-preview.md",sourceDirName:"external",slug:"/external/typst-preview",permalink:"/touying/docs/external/typst-preview",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/external/typst-preview.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Pdfpc",permalink:"/touying/docs/external/pdfpc"},next:{title:"Changelog",permalink:"/touying/docs/changelog"}},c={},l=[];function p(e){const t={code:"code",h1:"h1",p:"p",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"typst-preview",children:"Typst Preview"}),"\n",(0,s.jsx)(t.p,{children:"The Typst Preview extension for VS Code provides an excellent slide mode, allowing us to preview and present slides."}),"\n",(0,s.jsxs)(t.p,{children:["Press ",(0,s.jsx)(t.code,{children:"Ctrl/Cmd + Shift + P"})," and type ",(0,s.jsx)(t.code,{children:"Typst Preview: Preview current file in slide mode"})," to open the preview in slide mode."]}),"\n",(0,s.jsxs)(t.p,{children:["Press ",(0,s.jsx)(t.code,{children:"Ctrl/Cmd + Shift + P"})," and type ",(0,s.jsx)(t.code,{children:"Typst Preview: Preview current file in browser and slide mode"})," to open the slide mode in the browser."]}),"\n",(0,s.jsxs)(t.p,{children:["Now, you can press keys like ",(0,s.jsx)(t.code,{children:"F11"})," to enter fullscreen mode in the browser, making it suitable for slide presentations."]}),"\n",(0,s.jsx)(t.p,{children:"Since Typst Preview is based on SVG, it can play GIF animations, which is very helpful for dynamic slides."})]})}function a(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>d,a:()=>o});var s=n(7294);const i={},r=s.createContext(i);function o(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/77e3d78c.1cd1772e.js b/assets/js/77e3d78c.1cd1772e.js new file mode 100644 index 000000000..789284a43 --- /dev/null +++ b/assets/js/77e3d78c.1cd1772e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2191],{8465:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>d,toc:()=>l});var t=n(5893),r=n(1151);const o={sidebar_position:1},i="Touying Counters",d={id:"progress/counters",title:"Touying Counters",description:"The states of Touying are placed under the states namespace, including all counters.",source:"@site/docs/progress/counters.md",sourceDirName:"progress",slug:"/progress/counters",permalink:"/touying/docs/progress/counters",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/progress/counters.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Progress",permalink:"/touying/docs/category/progress"},next:{title:"Touying Sections",permalink:"/touying/docs/progress/sections"}},c={},l=[{value:"Slide Counter",id:"slide-counter",level:2},{value:"Last-Slide Counter",id:"last-slide-counter",level:2},{value:"Progress",id:"progress",level:2},{value:"Appendix",id:"appendix",level:2}];function a(e){const s={code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"touying-counters",children:"Touying Counters"}),"\n",(0,t.jsxs)(s.p,{children:["The states of Touying are placed under the ",(0,t.jsx)(s.code,{children:"states"})," namespace, including all counters."]}),"\n",(0,t.jsx)(s.h2,{id:"slide-counter",children:"Slide Counter"}),"\n",(0,t.jsxs)(s.p,{children:["You can access the slide counter using ",(0,t.jsx)(s.code,{children:"states.slide-counter"})," and display the current slide number with ",(0,t.jsx)(s.code,{children:"states.slide-counter.display()"}),"."]}),"\n",(0,t.jsx)(s.h2,{id:"last-slide-counter",children:"Last-Slide Counter"}),"\n",(0,t.jsx)(s.p,{children:"In some cases, we may need to add an appendix to slides, leading to the requirement to freeze the last-slide counter. Therefore, a second counter is maintained here."}),"\n",(0,t.jsxs)(s.p,{children:["You can use ",(0,t.jsx)(s.code,{children:"states.last-slide-number"})," to display the number of the last slide before the appendix."]}),"\n",(0,t.jsx)(s.h2,{id:"progress",children:"Progress"}),"\n",(0,t.jsx)(s.p,{children:"You can use"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-typst",children:"#states.touying-progress(ratio => ..)\n"})}),"\n",(0,t.jsx)(s.p,{children:"to show the current progress."}),"\n",(0,t.jsx)(s.h2,{id:"appendix",children:"Appendix"}),"\n",(0,t.jsx)(s.p,{children:"You can use"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-typst",children:"// appendix by freezing last-slide-number\n#let s = (s.methods.appendix)(self: s)\n#let (slide,) = utils.methods(s)\n\n#slide[\n appendix\n]\n"})}),"\n",(0,t.jsx)(s.p,{children:"syntax to enter the appendix."}),"\n",(0,t.jsxs)(s.p,{children:["Additionally, ",(0,t.jsx)(s.code,{children:"#let s = (s.methods.appendix-in-outline)(self: s, false)"})," can be used to hide the appendix section from the outline."]})]})}function u(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},1151:(e,s,n)=>{n.d(s,{Z:()=>d,a:()=>i});var t=n(7294);const r={},o=t.createContext(r);function i(e){const s=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function d(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/77e3d78c.cb55565c.js b/assets/js/77e3d78c.cb55565c.js deleted file mode 100644 index 98e596ecf..000000000 --- a/assets/js/77e3d78c.cb55565c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2191],{8465:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>d,toc:()=>l});var t=n(5893),r=n(1151);const o={sidebar_position:1},i="Touying Counters",d={id:"progress/counters",title:"Touying Counters",description:"The states of Touying are placed under the states namespace, including all counters.",source:"@site/docs/progress/counters.md",sourceDirName:"progress",slug:"/progress/counters",permalink:"/docs/progress/counters",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/progress/counters.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Progress",permalink:"/docs/category/progress"},next:{title:"Touying Sections",permalink:"/docs/progress/sections"}},c={},l=[{value:"Slide Counter",id:"slide-counter",level:2},{value:"Last-Slide Counter",id:"last-slide-counter",level:2},{value:"Progress",id:"progress",level:2},{value:"Appendix",id:"appendix",level:2}];function a(e){const s={code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"touying-counters",children:"Touying Counters"}),"\n",(0,t.jsxs)(s.p,{children:["The states of Touying are placed under the ",(0,t.jsx)(s.code,{children:"states"})," namespace, including all counters."]}),"\n",(0,t.jsx)(s.h2,{id:"slide-counter",children:"Slide Counter"}),"\n",(0,t.jsxs)(s.p,{children:["You can access the slide counter using ",(0,t.jsx)(s.code,{children:"states.slide-counter"})," and display the current slide number with ",(0,t.jsx)(s.code,{children:"states.slide-counter.display()"}),"."]}),"\n",(0,t.jsx)(s.h2,{id:"last-slide-counter",children:"Last-Slide Counter"}),"\n",(0,t.jsx)(s.p,{children:"In some cases, we may need to add an appendix to slides, leading to the requirement to freeze the last-slide counter. Therefore, a second counter is maintained here."}),"\n",(0,t.jsxs)(s.p,{children:["You can use ",(0,t.jsx)(s.code,{children:"states.last-slide-number"})," to display the number of the last slide before the appendix."]}),"\n",(0,t.jsx)(s.h2,{id:"progress",children:"Progress"}),"\n",(0,t.jsx)(s.p,{children:"You can use"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-typst",children:"#states.touying-progress(ratio => ..)\n"})}),"\n",(0,t.jsx)(s.p,{children:"to show the current progress."}),"\n",(0,t.jsx)(s.h2,{id:"appendix",children:"Appendix"}),"\n",(0,t.jsx)(s.p,{children:"You can use"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-typst",children:"// appendix by freezing last-slide-number\n#let s = (s.methods.appendix)(self: s)\n#let (slide,) = utils.methods(s)\n\n#slide[\n appendix\n]\n"})}),"\n",(0,t.jsx)(s.p,{children:"syntax to enter the appendix."}),"\n",(0,t.jsxs)(s.p,{children:["Additionally, ",(0,t.jsx)(s.code,{children:"#let s = (s.methods.appendix-in-outline)(self: s, false)"})," can be used to hide the appendix section from the outline."]})]})}function u(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},1151:(e,s,n)=>{n.d(s,{Z:()=>d,a:()=>i});var t=n(7294);const r={},o=t.createContext(r);function i(e){const s=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function d(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/80a0c88e.0b40e1f2.js b/assets/js/80a0c88e.0b40e1f2.js new file mode 100644 index 000000000..beb13d5c5 --- /dev/null +++ b/assets/js/80a0c88e.0b40e1f2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3209],{8135:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>a});var s=t(5893),i=t(1151);const o={sidebar_position:2},l="Metropolis Theme",r={id:"themes/metropolis",title:"Metropolis Theme",description:"This theme is inspired by the Metropolis beamer theme created by Matthias Vogelgesang and transformed by Enivex.",source:"@site/docs/themes/metropolis.md",sourceDirName:"themes",slug:"/themes/metropolis",permalink:"/touying/docs/themes/metropolis",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/themes/metropolis.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Simple Theme",permalink:"/touying/docs/themes/simple"},next:{title:"Dewdrop Theme",permalink:"/touying/docs/themes/dewdrop"}},d={},a=[{value:"Initialization",id:"initialization",level:2},{value:"Color Themes",id:"color-themes",level:2},{value:"Slide Function Family",id:"slide-function-family",level:2},{value:"slides Function",id:"slides-function",level:2},{value:"Example",id:"example",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",hr:"hr",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"metropolis-theme",children:"Metropolis Theme"}),"\n",(0,s.jsxs)(n.p,{children:["This theme is inspired by the ",(0,s.jsx)(n.a,{href:"https://github.com/matze/mtheme",children:"Metropolis beamer"})," theme created by Matthias Vogelgesang and transformed by ",(0,s.jsx)(n.a,{href:"https://github.com/Enivex",children:"Enivex"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"The Metropolis theme is elegant and suitable for daily use. For the best results, it is recommended to install the Fira Sans and Fira Math fonts on your computer."}),"\n",(0,s.jsx)(n.h2,{id:"initialization",children:"Initialization"}),"\n",(0,s.jsx)(n.p,{children:"You can initialize the Metropolis theme using the following code:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let s = themes.metropolis.register(s, aspect-ratio: "16-9", footer: self => self.info.institution)\n#let s = (s.methods.info)(\n self: s,\n title: [Title],\n subtitle: [Subtitle],\n author: [Authors],\n date: datetime.today(),\n institution: [Institution],\n)\n#let s = (s.methods.enable-transparent-cover)(self: s)\n#let (init, slide, slides, title-slide, new-section-slide, focus-slide, touying-outline, alert) = utils.methods(s)\n#show: init\n\n#show strong: alert\n'})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"register"})," function takes parameters such as:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"aspect-ratio"}),': The aspect ratio of the slides, either "16-9" or "4-3," with the default being "16-9."']}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"header"}),": Content to be displayed in the header, with the default being ",(0,s.jsx)(n.code,{children:"states.current-section-title"}),". You can also pass a function like ",(0,s.jsx)(n.code,{children:"self => self.info.title"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"footer"}),": Content to be displayed in the footer, with the default being ",(0,s.jsx)(n.code,{children:"[]"}),". You can also pass a function like ",(0,s.jsx)(n.code,{children:"self => self.info.author"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"footer-right"}),": Content to be displayed on the right side of the footer, with the default being ",(0,s.jsx)(n.code,{children:'states.slide-counter.display() + " / " + states.last-slide-number'}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"footer-progress"}),": Whether to show the progress bar at the bottom of the slide, with the default being ",(0,s.jsx)(n.code,{children:"true"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The Metropolis theme also provides an ",(0,s.jsx)(n.code,{children:"#alert[..]"})," function that you can use with the ",(0,s.jsx)(n.code,{children:"#show strong: alert"})," syntax."]}),"\n",(0,s.jsx)(n.h2,{id:"color-themes",children:"Color Themes"}),"\n",(0,s.jsx)(n.p,{children:"Metropolis uses the following default color theme:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#let s = (s.methods.colors)(\n self: s,\n neutral-lightest: rgb("#fafafa"),\n primary-dark: rgb("#23373b"),\n secondary-light: rgb("#eb811b"),\n secondary-lighter: rgb("#d6c6b7"),\n)\n'})}),"\n",(0,s.jsxs)(n.p,{children:["You can modify the color theme using ",(0,s.jsx)(n.code,{children:"#let s = (s.methods.colors)(self: s, ..)"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"slide-function-family",children:"Slide Function Family"}),"\n",(0,s.jsx)(n.p,{children:"Metropolis theme provides a series of custom slide functions:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#title-slide(extra: none, ..args)\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"title-slide"})," reads information from ",(0,s.jsx)(n.code,{children:"self.info"})," for display. You can also pass an ",(0,s.jsx)(n.code,{children:"extra"})," parameter to display additional information."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#slide(\n repeat: auto,\n setting: body => body,\n composer: utils.side-by-side,\n section: none,\n subsection: none,\n // metropolis theme\n title: auto,\n footer: auto,\n align: horizon,\n margin: (top: 3em, bottom: 1em, left: 0em, right: 0em),\n padding: 2em,\n)[\n ...\n]\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This is the default ordinary slide function with a title and footer according to your settings. The ",(0,s.jsx)(n.code,{children:"title"})," is set to the current section title by default, and the footer is as per your settings."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#focus-slide[\n ...\n]\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Used to draw attention. The background color is ",(0,s.jsx)(n.code,{children:"self.colors.primary-dark"}),"."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#new-section-slide(short-title: auto, title)\n"})}),"\n",(0,s.jsx)(n.p,{children:"Opens a new section with the given title."}),"\n",(0,s.jsxs)(n.h2,{id:"slides-function",children:[(0,s.jsx)(n.code,{children:"slides"})," Function"]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"slides"})," function has parameters:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"title-slide"}),": Default is ",(0,s.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"outline-slide"}),": Default is ",(0,s.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"outline-title"}),": Default is ",(0,s.jsx)(n.code,{children:"[Table of contents]"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["You can set these using ",(0,s.jsx)(n.code,{children:"#show: slides.with(..)"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let s = themes.metropolis.register(s, aspect-ratio: "16-9", footer: self => self.info.institution)\n#let s = (s.methods.info)(\n self: s,\n title: [Title],\n subtitle: [Subtitle],\n author: [Authors],\n date: datetime.today(),\n institution: [Institution],\n)\n#let s = (s.methods.enable-transparent-cover)(self: s)\n#let (init, slide, slides, title-slide, new-section-slide, focus-slide, touying-outline, alert) = utils.methods(s)\n#show: init\n\n#show strong: alert\n\n#show: slides\n\n= Title\n\n== First Slide\n\nHello, Touying!\n\n#pause\n\nHello, Typst!\n'})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let s = themes.metropolis.register(s, aspect-ratio: "16-9", footer: self => self.info.institution)\n#let s = (s.methods.info)(\n self: s,\n title: [Title],\n subtitle: [Subtitle],\n author: [Authors],\n date: datetime.today(),\n institution: [Institution],\n)\n#let s = (s.methods.enable-transparent-cover)(self: s)\n#let (init, slide, title-slide, new-section-slide, focus-slide, touying-outline, alert) = utils.methods(s)\n#show: init\n\n#show strong: alert\n\n#title-slide(extra: [Extra])\n\n#slide(title: [Table of contents])[\n #touying-outline()\n]\n\n#slide(title: [A long long long long long long long long long long long long long long long long long long long long long long long long Title])[\n A slide with some maths:\n $ x_(n+1) = (x_n + a/x_n) / 2 $\n\n #lorem(200)\n]\n\n#new-section-slide[First section]\n\n#slide[\n A slide without a title but with *important* infos\n]\n\n#new-section-slide[Second section]\n\n#focus-slide[\n Wake up!\n]\n\n// simple animations\n#slide[\n a simple #pause dynamic slide with #alert[alert]\n\n #pause\n \n text.\n]\n\n// appendix by freezing last-slide-number\n#let s = (s.methods.appendix)(self: s)\n#let (slide, new-section-slide) = utils.methods(s)\n\n#new-section-slide[Appendix]\n\n#slide[\n appendix\n]\n'})})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>l});var s=t(7294);const i={},o=s.createContext(i);function l(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/80a0c88e.50370532.js b/assets/js/80a0c88e.50370532.js deleted file mode 100644 index de1605a6c..000000000 --- a/assets/js/80a0c88e.50370532.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3209],{8135:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>a});var s=t(5893),i=t(1151);const o={sidebar_position:2},l="Metropolis Theme",r={id:"themes/metropolis",title:"Metropolis Theme",description:"This theme is inspired by the Metropolis beamer theme created by Matthias Vogelgesang and transformed by Enivex.",source:"@site/docs/themes/metropolis.md",sourceDirName:"themes",slug:"/themes/metropolis",permalink:"/docs/themes/metropolis",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/themes/metropolis.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Simple Theme",permalink:"/docs/themes/simple"},next:{title:"Dewdrop Theme",permalink:"/docs/themes/dewdrop"}},d={},a=[{value:"Initialization",id:"initialization",level:2},{value:"Color Themes",id:"color-themes",level:2},{value:"Slide Function Family",id:"slide-function-family",level:2},{value:"slides Function",id:"slides-function",level:2},{value:"Example",id:"example",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",hr:"hr",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"metropolis-theme",children:"Metropolis Theme"}),"\n",(0,s.jsxs)(n.p,{children:["This theme is inspired by the ",(0,s.jsx)(n.a,{href:"https://github.com/matze/mtheme",children:"Metropolis beamer"})," theme created by Matthias Vogelgesang and transformed by ",(0,s.jsx)(n.a,{href:"https://github.com/Enivex",children:"Enivex"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"The Metropolis theme is elegant and suitable for daily use. For the best results, it is recommended to install the Fira Sans and Fira Math fonts on your computer."}),"\n",(0,s.jsx)(n.h2,{id:"initialization",children:"Initialization"}),"\n",(0,s.jsx)(n.p,{children:"You can initialize the Metropolis theme using the following code:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let s = themes.metropolis.register(s, aspect-ratio: "16-9", footer: self => self.info.institution)\n#let s = (s.methods.info)(\n self: s,\n title: [Title],\n subtitle: [Subtitle],\n author: [Authors],\n date: datetime.today(),\n institution: [Institution],\n)\n#let s = (s.methods.enable-transparent-cover)(self: s)\n#let (init, slide, slides, title-slide, new-section-slide, focus-slide, touying-outline, alert) = utils.methods(s)\n#show: init\n\n#show strong: alert\n'})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"register"})," function takes parameters such as:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"aspect-ratio"}),': The aspect ratio of the slides, either "16-9" or "4-3," with the default being "16-9."']}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"header"}),": Content to be displayed in the header, with the default being ",(0,s.jsx)(n.code,{children:"states.current-section-title"}),". You can also pass a function like ",(0,s.jsx)(n.code,{children:"self => self.info.title"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"footer"}),": Content to be displayed in the footer, with the default being ",(0,s.jsx)(n.code,{children:"[]"}),". You can also pass a function like ",(0,s.jsx)(n.code,{children:"self => self.info.author"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"footer-right"}),": Content to be displayed on the right side of the footer, with the default being ",(0,s.jsx)(n.code,{children:'states.slide-counter.display() + " / " + states.last-slide-number'}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"footer-progress"}),": Whether to show the progress bar at the bottom of the slide, with the default being ",(0,s.jsx)(n.code,{children:"true"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The Metropolis theme also provides an ",(0,s.jsx)(n.code,{children:"#alert[..]"})," function that you can use with the ",(0,s.jsx)(n.code,{children:"#show strong: alert"})," syntax."]}),"\n",(0,s.jsx)(n.h2,{id:"color-themes",children:"Color Themes"}),"\n",(0,s.jsx)(n.p,{children:"Metropolis uses the following default color theme:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#let s = (s.methods.colors)(\n self: s,\n neutral-lightest: rgb("#fafafa"),\n primary-dark: rgb("#23373b"),\n secondary-light: rgb("#eb811b"),\n secondary-lighter: rgb("#d6c6b7"),\n)\n'})}),"\n",(0,s.jsxs)(n.p,{children:["You can modify the color theme using ",(0,s.jsx)(n.code,{children:"#let s = (s.methods.colors)(self: s, ..)"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"slide-function-family",children:"Slide Function Family"}),"\n",(0,s.jsx)(n.p,{children:"Metropolis theme provides a series of custom slide functions:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#title-slide(extra: none, ..args)\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"title-slide"})," reads information from ",(0,s.jsx)(n.code,{children:"self.info"})," for display. You can also pass an ",(0,s.jsx)(n.code,{children:"extra"})," parameter to display additional information."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#slide(\n repeat: auto,\n setting: body => body,\n composer: utils.side-by-side,\n section: none,\n subsection: none,\n // metropolis theme\n title: auto,\n footer: auto,\n align: horizon,\n margin: (top: 3em, bottom: 1em, left: 0em, right: 0em),\n padding: 2em,\n)[\n ...\n]\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This is the default ordinary slide function with a title and footer according to your settings. The ",(0,s.jsx)(n.code,{children:"title"})," is set to the current section title by default, and the footer is as per your settings."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#focus-slide[\n ...\n]\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Used to draw attention. The background color is ",(0,s.jsx)(n.code,{children:"self.colors.primary-dark"}),"."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#new-section-slide(short-title: auto, title)\n"})}),"\n",(0,s.jsx)(n.p,{children:"Opens a new section with the given title."}),"\n",(0,s.jsxs)(n.h2,{id:"slides-function",children:[(0,s.jsx)(n.code,{children:"slides"})," Function"]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"slides"})," function has parameters:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"title-slide"}),": Default is ",(0,s.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"outline-slide"}),": Default is ",(0,s.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"outline-title"}),": Default is ",(0,s.jsx)(n.code,{children:"[Table of contents]"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["You can set these using ",(0,s.jsx)(n.code,{children:"#show: slides.with(..)"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let s = themes.metropolis.register(s, aspect-ratio: "16-9", footer: self => self.info.institution)\n#let s = (s.methods.info)(\n self: s,\n title: [Title],\n subtitle: [Subtitle],\n author: [Authors],\n date: datetime.today(),\n institution: [Institution],\n)\n#let s = (s.methods.enable-transparent-cover)(self: s)\n#let (init, slide, slides, title-slide, new-section-slide, focus-slide, touying-outline, alert) = utils.methods(s)\n#show: init\n\n#show strong: alert\n\n#show: slides\n\n= Title\n\n== First Slide\n\nHello, Touying!\n\n#pause\n\nHello, Typst!\n'})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let s = themes.metropolis.register(s, aspect-ratio: "16-9", footer: self => self.info.institution)\n#let s = (s.methods.info)(\n self: s,\n title: [Title],\n subtitle: [Subtitle],\n author: [Authors],\n date: datetime.today(),\n institution: [Institution],\n)\n#let s = (s.methods.enable-transparent-cover)(self: s)\n#let (init, slide, title-slide, new-section-slide, focus-slide, touying-outline, alert) = utils.methods(s)\n#show: init\n\n#show strong: alert\n\n#title-slide(extra: [Extra])\n\n#slide(title: [Table of contents])[\n #touying-outline()\n]\n\n#slide(title: [A long long long long long long long long long long long long long long long long long long long long long long long long Title])[\n A slide with some maths:\n $ x_(n+1) = (x_n + a/x_n) / 2 $\n\n #lorem(200)\n]\n\n#new-section-slide[First section]\n\n#slide[\n A slide without a title but with *important* infos\n]\n\n#new-section-slide[Second section]\n\n#focus-slide[\n Wake up!\n]\n\n// simple animations\n#slide[\n a simple #pause dynamic slide with #alert[alert]\n\n #pause\n \n text.\n]\n\n// appendix by freezing last-slide-number\n#let s = (s.methods.appendix)(self: s)\n#let (slide, new-section-slide) = utils.methods(s)\n\n#new-section-slide[Appendix]\n\n#slide[\n appendix\n]\n'})})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>l});var s=t(7294);const i={},o=s.createContext(i);function l(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/zh/assets/js/814f3328.03cf10ad.js b/assets/js/814f3328.a329f4f2.js similarity index 54% rename from zh/assets/js/814f3328.03cf10ad.js rename to assets/js/814f3328.a329f4f2.js index 9593c572e..a54ea449e 100644 --- a/zh/assets/js/814f3328.03cf10ad.js +++ b/assets/js/814f3328.a329f4f2.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2535],{5641:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"Touying 0.2.0","permalink":"/zh/blog/touying-0-2-0","unlisted":false}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2535],{5641:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"Touying 0.2.0","permalink":"/touying/blog/touying-0-2-0","unlisted":false}]}')}}]); \ No newline at end of file diff --git a/zh/assets/js/071d65f6.fe3f1633.js b/assets/js/83b73936.b2207eb7.js similarity index 52% rename from zh/assets/js/071d65f6.fe3f1633.js rename to assets/js/83b73936.b2207eb7.js index cbd2dde85..954eb77ba 100644 --- a/zh/assets/js/071d65f6.fe3f1633.js +++ b/assets/js/83b73936.b2207eb7.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1466],{5490:e=>{e.exports=JSON.parse('{"title":"Dynamic Slides","description":"To create animations in PDF, we need to create multiple slightly different pages for the same slide. This allows animation by switching between these pages, and we refer to these pages as subslides.","slug":"/category/dynamic-slides","permalink":"/zh/docs/category/dynamic-slides","navigation":{"previous":{"title":"\u4ee3\u7801\u98ce\u683c","permalink":"/zh/docs/style"},"next":{"title":"\u7b80\u5355\u52a8\u753b","permalink":"/zh/docs/dynamic/simple"}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4873],{2347:e=>{e.exports=JSON.parse('{"title":"Dynamic Slides","description":"To create animations in PDF, we need to create multiple slightly different pages for the same slide. This allows animation by switching between these pages, and we refer to these pages as subslides.","slug":"/category/dynamic-slides","permalink":"/touying/docs/category/dynamic-slides","navigation":{"previous":{"title":"Code Styles","permalink":"/touying/docs/style"},"next":{"title":"Simple Animations","permalink":"/touying/docs/dynamic/simple"}}}')}}]); \ No newline at end of file diff --git a/assets/js/8ac96054.41a2b54e.js b/assets/js/8ac96054.41a2b54e.js deleted file mode 100644 index 162e56914..000000000 --- a/assets/js/8ac96054.41a2b54e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9527],{3680:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>d,default:()=>p,frontMatter:()=>s,metadata:()=>r,toc:()=>c});var i=t(5893),o=t(1151);const s={sidebar_position:1},d="Pdfpc",r={id:"external/pdfpc",title:"Pdfpc",description:'pdfpc is a "Presenter Console with multi-monitor support for PDF files." This means you can use it to display slides in the form of PDF pages and it comes with some known excellent features, much like PowerPoint.',source:"@site/docs/external/pdfpc.md",sourceDirName:"external",slug:"/external/pdfpc",permalink:"/docs/external/pdfpc",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/external/pdfpc.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"External Tools",permalink:"/docs/category/external-tools"},next:{title:"Typst Preview",permalink:"/docs/external/typst-preview"}},a={},c=[{value:"Adding Metadata",id:"adding-metadata",level:2},{value:"Pdfpc Configuration",id:"pdfpc-configuration",level:2},{value:"Exporting .pdfpc File",id:"exporting-pdfpc-file",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"pdfpc",children:"Pdfpc"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://pdfpc.github.io/",children:"pdfpc"}),' is a "Presenter Console with multi-monitor support for PDF files." This means you can use it to display slides in the form of PDF pages and it comes with some known excellent features, much like PowerPoint.']}),"\n",(0,i.jsxs)(n.p,{children:["pdfpc has a JSON-formatted ",(0,i.jsx)(n.code,{children:".pdfpc"})," file that can provide additional information for PDF slides. While you can manually write this file, you can also manage it through Touying."]}),"\n",(0,i.jsx)(n.h2,{id:"adding-metadata",children:"Adding Metadata"}),"\n",(0,i.jsxs)(n.p,{children:["Touying remains consistent with ",(0,i.jsx)(n.a,{href:"https://polylux.dev/book/external/pdfpc.html",children:"Polylux"})," to avoid conflicts between APIs."]}),"\n",(0,i.jsxs)(n.p,{children:["For example, you can add notes using ",(0,i.jsx)(n.code,{children:'#pdfpc.speaker-note("This is a note that only the speaker will see.")'}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"pdfpc-configuration",children:"Pdfpc Configuration"}),"\n",(0,i.jsx)(n.p,{children:"To add pdfpc configurations, you can use"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:'#let s = (s.methods.append-preamble)(self: s, pdfpc.config(\n duration-minutes: 30,\n start-time: datetime(hour: 14, minute: 10, second: 0),\n end-time: datetime(hour: 14, minute: 40, second: 0),\n last-minutes: 5,\n note-font-size: 12,\n disable-markdown: false,\n default-transition: (\n type: "push",\n duration-seconds: 2,\n angle: ltr,\n alignment: "vertical",\n direction: "inward",\n ),\n))\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Add the corresponding configurations. Refer to ",(0,i.jsx)(n.a,{href:"https://polylux.dev/book/external/pdfpc.html",children:"Polylux"})," for specific configuration details."]}),"\n",(0,i.jsx)(n.h2,{id:"exporting-pdfpc-file",children:"Exporting .pdfpc File"}),"\n",(0,i.jsxs)(n.p,{children:["Assuming your document is ",(0,i.jsx)(n.code,{children:"./example.typ"}),", you can export the ",(0,i.jsx)(n.code,{children:".pdfpc"})," file directly using:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:'typst query --root . ./example.typ --field value --one "" > ./example.pdfpc\n'})}),"\n",(0,i.jsx)(n.p,{children:"With the compatibility of Touying and Polylux, you can make Polylux also support direct export by adding the following code:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0"\n\n#locate(loc => touying.pdfpc.pdfpc-file(loc))\n'})})]})}function p(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>d});var i=t(7294);const o={},s=i.createContext(o);function d(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:d(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8ac96054.cf3179a7.js b/assets/js/8ac96054.cf3179a7.js new file mode 100644 index 000000000..a973d1f23 --- /dev/null +++ b/assets/js/8ac96054.cf3179a7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9527],{3680:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>d,default:()=>p,frontMatter:()=>s,metadata:()=>r,toc:()=>c});var i=t(5893),o=t(1151);const s={sidebar_position:1},d="Pdfpc",r={id:"external/pdfpc",title:"Pdfpc",description:'pdfpc is a "Presenter Console with multi-monitor support for PDF files." This means you can use it to display slides in the form of PDF pages and it comes with some known excellent features, much like PowerPoint.',source:"@site/docs/external/pdfpc.md",sourceDirName:"external",slug:"/external/pdfpc",permalink:"/touying/docs/external/pdfpc",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/external/pdfpc.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"External Tools",permalink:"/touying/docs/category/external-tools"},next:{title:"Typst Preview",permalink:"/touying/docs/external/typst-preview"}},a={},c=[{value:"Adding Metadata",id:"adding-metadata",level:2},{value:"Pdfpc Configuration",id:"pdfpc-configuration",level:2},{value:"Exporting .pdfpc File",id:"exporting-pdfpc-file",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"pdfpc",children:"Pdfpc"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://pdfpc.github.io/",children:"pdfpc"}),' is a "Presenter Console with multi-monitor support for PDF files." This means you can use it to display slides in the form of PDF pages and it comes with some known excellent features, much like PowerPoint.']}),"\n",(0,i.jsxs)(n.p,{children:["pdfpc has a JSON-formatted ",(0,i.jsx)(n.code,{children:".pdfpc"})," file that can provide additional information for PDF slides. While you can manually write this file, you can also manage it through Touying."]}),"\n",(0,i.jsx)(n.h2,{id:"adding-metadata",children:"Adding Metadata"}),"\n",(0,i.jsxs)(n.p,{children:["Touying remains consistent with ",(0,i.jsx)(n.a,{href:"https://polylux.dev/book/external/pdfpc.html",children:"Polylux"})," to avoid conflicts between APIs."]}),"\n",(0,i.jsxs)(n.p,{children:["For example, you can add notes using ",(0,i.jsx)(n.code,{children:'#pdfpc.speaker-note("This is a note that only the speaker will see.")'}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"pdfpc-configuration",children:"Pdfpc Configuration"}),"\n",(0,i.jsx)(n.p,{children:"To add pdfpc configurations, you can use"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:'#let s = (s.methods.append-preamble)(self: s, pdfpc.config(\n duration-minutes: 30,\n start-time: datetime(hour: 14, minute: 10, second: 0),\n end-time: datetime(hour: 14, minute: 40, second: 0),\n last-minutes: 5,\n note-font-size: 12,\n disable-markdown: false,\n default-transition: (\n type: "push",\n duration-seconds: 2,\n angle: ltr,\n alignment: "vertical",\n direction: "inward",\n ),\n))\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Add the corresponding configurations. Refer to ",(0,i.jsx)(n.a,{href:"https://polylux.dev/book/external/pdfpc.html",children:"Polylux"})," for specific configuration details."]}),"\n",(0,i.jsx)(n.h2,{id:"exporting-pdfpc-file",children:"Exporting .pdfpc File"}),"\n",(0,i.jsxs)(n.p,{children:["Assuming your document is ",(0,i.jsx)(n.code,{children:"./example.typ"}),", you can export the ",(0,i.jsx)(n.code,{children:".pdfpc"})," file directly using:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:'typst query --root . ./example.typ --field value --one "" > ./example.pdfpc\n'})}),"\n",(0,i.jsx)(n.p,{children:"With the compatibility of Touying and Polylux, you can make Polylux also support direct export by adding the following code:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0"\n\n#locate(loc => touying.pdfpc.pdfpc-file(loc))\n'})})]})}function p(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>d});var i=t(7294);const o={},s=i.createContext(o);function d(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:d(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8f3e3006.943d12a9.js b/assets/js/8f3e3006.943d12a9.js deleted file mode 100644 index 415779d4f..000000000 --- a/assets/js/8f3e3006.943d12a9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[5511],{6966:t=>{t.exports=JSON.parse('{"title":"External Tools","description":"Integrate external tools with Touying.","slug":"/category/external-tools","permalink":"/docs/category/external-tools","navigation":{"previous":{"title":"Fit to Height / Width","permalink":"/docs/utilities/fit-to"},"next":{"title":"Pdfpc","permalink":"/docs/external/pdfpc"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.101f6d7f.js b/assets/js/935f2afb.101f6d7f.js deleted file mode 100644 index d50d8fc7c..000000000 --- a/assets/js/935f2afb.101f6d7f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Introduction to Touying","href":"/docs/intro","docId":"intro","unlisted":false},{"type":"link","label":"Getting Started","href":"/docs/start","docId":"start","unlisted":false},{"type":"link","label":"Layout Your Contents","href":"/docs/layout","docId":"layout","unlisted":false},{"type":"link","label":"Code Styles","href":"/docs/style","docId":"style","unlisted":false},{"type":"category","label":"Dynamic Slides","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Simple Animations","href":"/docs/dynamic/simple","docId":"dynamic/simple","unlisted":false},{"type":"link","label":"Complex Animations","href":"/docs/dynamic/complex","docId":"dynamic/complex","unlisted":false},{"type":"link","label":"Math Equation Animations","href":"/docs/dynamic/equation","docId":"dynamic/equation","unlisted":false},{"type":"link","label":"Cover Function","href":"/docs/dynamic/cover","docId":"dynamic/cover","unlisted":false},{"type":"link","label":"Handout Mode","href":"/docs/dynamic/handout","docId":"dynamic/handout","unlisted":false}],"href":"/docs/category/dynamic-slides"},{"type":"category","label":"Themes","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Simple Theme","href":"/docs/themes/simple","docId":"themes/simple","unlisted":false},{"type":"link","label":"Metropolis Theme","href":"/docs/themes/metropolis","docId":"themes/metropolis","unlisted":false},{"type":"link","label":"Dewdrop Theme","href":"/docs/themes/dewdrop","docId":"themes/dewdrop","unlisted":false}],"href":"/docs/category/themes"},{"type":"link","label":"Build Your Own Theme","href":"/docs/build-your-own-theme","docId":"build-your-own-theme","unlisted":false},{"type":"category","label":"Progress","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Touying Counters","href":"/docs/progress/counters","docId":"progress/counters","unlisted":false},{"type":"link","label":"Touying Sections","href":"/docs/progress/sections","docId":"progress/sections","unlisted":false}],"href":"/docs/category/progress"},{"type":"category","label":"Utilities","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Object-Oriented Programming","href":"/docs/utilities/oop","docId":"utilities/oop","unlisted":false},{"type":"link","label":"Fit to Height / Width","href":"/docs/utilities/fit-to","docId":"utilities/fit-to","unlisted":false}],"href":"/docs/category/utilities"},{"type":"category","label":"External Tools","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Pdfpc","href":"/docs/external/pdfpc","docId":"external/pdfpc","unlisted":false},{"type":"link","label":"Typst Preview","href":"/docs/external/typst-preview","docId":"external/typst-preview","unlisted":false}],"href":"/docs/category/external-tools"},{"type":"link","label":"Changelog","href":"/docs/changelog","docId":"changelog","unlisted":false}]},"docs":{"build-your-own-theme":{"id":"build-your-own-theme","title":"Build Your Own Theme","description":"You can refer to the source code of themes. The main things to implement are:","sidebar":"tutorialSidebar"},"changelog":{"id":"changelog","title":"Changelog","description":"v0.2.0","sidebar":"tutorialSidebar"},"dynamic/complex":{"id":"dynamic/complex","title":"Complex Animations","description":"Thanks to the syntax provided by Polylux, we can also use only, uncover, and alternatives in Touying.","sidebar":"tutorialSidebar"},"dynamic/cover":{"id":"dynamic/cover","title":"Cover Function","description":"As you already know, both uncover and #pause use the cover function to conceal content that is not visible. So, what exactly is the cover function here?","sidebar":"tutorialSidebar"},"dynamic/equation":{"id":"dynamic/equation","title":"Math Equation Animations","description":"Touying also provides a unique and highly useful feature\u2014math equation animations, allowing you to conveniently use pause and meanwhile within math equations.","sidebar":"tutorialSidebar"},"dynamic/handout":{"id":"dynamic/handout","title":"Handout Mode","description":"While watching slides and attending lectures, the audience often wishes to have handouts for reviewing challenging concepts. Therefore, it\'s beneficial for the author to provide handouts for the audience, preferably before the lecture for better preparation.","sidebar":"tutorialSidebar"},"dynamic/simple":{"id":"dynamic/simple","title":"Simple Animations","description":"Touying provides two markers for simple animation effects: #pause and #meanwhile.","sidebar":"tutorialSidebar"},"external/pdfpc":{"id":"external/pdfpc","title":"Pdfpc","description":"pdfpc is a \\"Presenter Console with multi-monitor support for PDF files.\\" This means you can use it to display slides in the form of PDF pages and it comes with some known excellent features, much like PowerPoint.","sidebar":"tutorialSidebar"},"external/typst-preview":{"id":"external/typst-preview","title":"Typst Preview","description":"The Typst Preview extension for VS Code provides an excellent slide mode, allowing us to preview and present slides.","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Introduction to Touying","description":"Touying is a slide/presentation package developed for Typst, based on Polylux. Touying is similar to LaTeX Beamer but benefits from Typst, providing faster rendering speed and a more concise syntax. Hereafter, we use \\"slides\\" to refer to slideshows, \\"slide\\" for a single slide, and \\"subslide\\" for a sub-slide.","sidebar":"tutorialSidebar"},"layout":{"id":"layout","title":"Layout Your Contents","description":"To better manage every detail in the slides and achieve better rendering results, like Beamer, Touying has introduced some unique concepts. This helps you maintain global information better and easily switch between different themes.","sidebar":"tutorialSidebar"},"progress/counters":{"id":"progress/counters","title":"Touying Counters","description":"The states of Touying are placed under the states namespace, including all counters.","sidebar":"tutorialSidebar"},"progress/sections":{"id":"progress/sections","title":"Touying Sections","description":"Touying maintains its own sections state to record the sections and subsections of slides.","sidebar":"tutorialSidebar"},"start":{"id":"start","title":"Getting Started","description":"Before you begin, make sure you have installed the Typst environment. If not, you can use the Web App or the Typst LSP and Typst Preview plugins for VS Code.","sidebar":"tutorialSidebar"},"style":{"id":"style","title":"Code Styles","description":"show-slides Style","sidebar":"tutorialSidebar"},"themes/dewdrop":{"id":"themes/dewdrop","title":"Dewdrop Theme","description":"This theme is inspired by BeamerTheme created by Zhibo Wang and transformed by OrangeX4.","sidebar":"tutorialSidebar"},"themes/metropolis":{"id":"themes/metropolis","title":"Metropolis Theme","description":"This theme is inspired by the Metropolis beamer theme created by Matthias Vogelgesang and transformed by Enivex.","sidebar":"tutorialSidebar"},"themes/simple":{"id":"themes/simple","title":"Simple Theme","description":"This theme is derived from Polylux, created by Andreas Kr\xf6pelin.","sidebar":"tutorialSidebar"},"utilities/fit-to":{"id":"utilities/fit-to","title":"Fit to Height / Width","description":"Thanks to ntjess for the code.","sidebar":"tutorialSidebar"},"utilities/oop":{"id":"utilities/oop","title":"Object-Oriented Programming","description":"Touying provides some convenient utility functions for object-oriented programming.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.23d8684b.js b/assets/js/935f2afb.23d8684b.js new file mode 100644 index 000000000..2a9f81018 --- /dev/null +++ b/assets/js/935f2afb.23d8684b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Introduction to Touying","href":"/touying/docs/intro","docId":"intro","unlisted":false},{"type":"link","label":"Getting Started","href":"/touying/docs/start","docId":"start","unlisted":false},{"type":"link","label":"Layout Your Contents","href":"/touying/docs/layout","docId":"layout","unlisted":false},{"type":"link","label":"Code Styles","href":"/touying/docs/style","docId":"style","unlisted":false},{"type":"category","label":"Dynamic Slides","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Simple Animations","href":"/touying/docs/dynamic/simple","docId":"dynamic/simple","unlisted":false},{"type":"link","label":"Complex Animations","href":"/touying/docs/dynamic/complex","docId":"dynamic/complex","unlisted":false},{"type":"link","label":"Math Equation Animations","href":"/touying/docs/dynamic/equation","docId":"dynamic/equation","unlisted":false},{"type":"link","label":"Cover Function","href":"/touying/docs/dynamic/cover","docId":"dynamic/cover","unlisted":false},{"type":"link","label":"Handout Mode","href":"/touying/docs/dynamic/handout","docId":"dynamic/handout","unlisted":false}],"href":"/touying/docs/category/dynamic-slides"},{"type":"category","label":"Themes","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Simple Theme","href":"/touying/docs/themes/simple","docId":"themes/simple","unlisted":false},{"type":"link","label":"Metropolis Theme","href":"/touying/docs/themes/metropolis","docId":"themes/metropolis","unlisted":false},{"type":"link","label":"Dewdrop Theme","href":"/touying/docs/themes/dewdrop","docId":"themes/dewdrop","unlisted":false}],"href":"/touying/docs/category/themes"},{"type":"link","label":"Build Your Own Theme","href":"/touying/docs/build-your-own-theme","docId":"build-your-own-theme","unlisted":false},{"type":"category","label":"Progress","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Touying Counters","href":"/touying/docs/progress/counters","docId":"progress/counters","unlisted":false},{"type":"link","label":"Touying Sections","href":"/touying/docs/progress/sections","docId":"progress/sections","unlisted":false}],"href":"/touying/docs/category/progress"},{"type":"category","label":"Utilities","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Object-Oriented Programming","href":"/touying/docs/utilities/oop","docId":"utilities/oop","unlisted":false},{"type":"link","label":"Fit to Height / Width","href":"/touying/docs/utilities/fit-to","docId":"utilities/fit-to","unlisted":false}],"href":"/touying/docs/category/utilities"},{"type":"category","label":"External Tools","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Pdfpc","href":"/touying/docs/external/pdfpc","docId":"external/pdfpc","unlisted":false},{"type":"link","label":"Typst Preview","href":"/touying/docs/external/typst-preview","docId":"external/typst-preview","unlisted":false}],"href":"/touying/docs/category/external-tools"},{"type":"link","label":"Changelog","href":"/touying/docs/changelog","docId":"changelog","unlisted":false}]},"docs":{"build-your-own-theme":{"id":"build-your-own-theme","title":"Build Your Own Theme","description":"You can refer to the source code of themes. The main things to implement are:","sidebar":"tutorialSidebar"},"changelog":{"id":"changelog","title":"Changelog","description":"v0.2.0","sidebar":"tutorialSidebar"},"dynamic/complex":{"id":"dynamic/complex","title":"Complex Animations","description":"Thanks to the syntax provided by Polylux, we can also use only, uncover, and alternatives in Touying.","sidebar":"tutorialSidebar"},"dynamic/cover":{"id":"dynamic/cover","title":"Cover Function","description":"As you already know, both uncover and #pause use the cover function to conceal content that is not visible. So, what exactly is the cover function here?","sidebar":"tutorialSidebar"},"dynamic/equation":{"id":"dynamic/equation","title":"Math Equation Animations","description":"Touying also provides a unique and highly useful feature\u2014math equation animations, allowing you to conveniently use pause and meanwhile within math equations.","sidebar":"tutorialSidebar"},"dynamic/handout":{"id":"dynamic/handout","title":"Handout Mode","description":"While watching slides and attending lectures, the audience often wishes to have handouts for reviewing challenging concepts. Therefore, it\'s beneficial for the author to provide handouts for the audience, preferably before the lecture for better preparation.","sidebar":"tutorialSidebar"},"dynamic/simple":{"id":"dynamic/simple","title":"Simple Animations","description":"Touying provides two markers for simple animation effects: #pause and #meanwhile.","sidebar":"tutorialSidebar"},"external/pdfpc":{"id":"external/pdfpc","title":"Pdfpc","description":"pdfpc is a \\"Presenter Console with multi-monitor support for PDF files.\\" This means you can use it to display slides in the form of PDF pages and it comes with some known excellent features, much like PowerPoint.","sidebar":"tutorialSidebar"},"external/typst-preview":{"id":"external/typst-preview","title":"Typst Preview","description":"The Typst Preview extension for VS Code provides an excellent slide mode, allowing us to preview and present slides.","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Introduction to Touying","description":"Touying is a slide/presentation package developed for Typst, based on Polylux. Touying is similar to LaTeX Beamer but benefits from Typst, providing faster rendering speed and a more concise syntax. Hereafter, we use \\"slides\\" to refer to slideshows, \\"slide\\" for a single slide, and \\"subslide\\" for a sub-slide.","sidebar":"tutorialSidebar"},"layout":{"id":"layout","title":"Layout Your Contents","description":"To better manage every detail in the slides and achieve better rendering results, like Beamer, Touying has introduced some unique concepts. This helps you maintain global information better and easily switch between different themes.","sidebar":"tutorialSidebar"},"progress/counters":{"id":"progress/counters","title":"Touying Counters","description":"The states of Touying are placed under the states namespace, including all counters.","sidebar":"tutorialSidebar"},"progress/sections":{"id":"progress/sections","title":"Touying Sections","description":"Touying maintains its own sections state to record the sections and subsections of slides.","sidebar":"tutorialSidebar"},"start":{"id":"start","title":"Getting Started","description":"Before you begin, make sure you have installed the Typst environment. If not, you can use the Web App or the Typst LSP and Typst Preview plugins for VS Code.","sidebar":"tutorialSidebar"},"style":{"id":"style","title":"Code Styles","description":"show-slides Style","sidebar":"tutorialSidebar"},"themes/dewdrop":{"id":"themes/dewdrop","title":"Dewdrop Theme","description":"This theme is inspired by BeamerTheme created by Zhibo Wang and transformed by OrangeX4.","sidebar":"tutorialSidebar"},"themes/metropolis":{"id":"themes/metropolis","title":"Metropolis Theme","description":"This theme is inspired by the Metropolis beamer theme created by Matthias Vogelgesang and transformed by Enivex.","sidebar":"tutorialSidebar"},"themes/simple":{"id":"themes/simple","title":"Simple Theme","description":"This theme is derived from Polylux, created by Andreas Kr\xf6pelin.","sidebar":"tutorialSidebar"},"utilities/fit-to":{"id":"utilities/fit-to","title":"Fit to Height / Width","description":"Thanks to ntjess for the code.","sidebar":"tutorialSidebar"},"utilities/oop":{"id":"utilities/oop","title":"Object-Oriented Programming","description":"Touying provides some convenient utility functions for object-oriented programming.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/98ce8162.7a59dd03.js b/assets/js/98ce8162.7a59dd03.js deleted file mode 100644 index 4f1f76cff..000000000 --- a/assets/js/98ce8162.7a59dd03.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1543],{8194:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>p,frontMatter:()=>i,metadata:()=>r,toc:()=>d});var s=t(5893),o=t(1151);const i={sidebar_position:2},l="Getting Started",r={id:"start",title:"Getting Started",description:"Before you begin, make sure you have installed the Typst environment. If not, you can use the Web App or the Typst LSP and Typst Preview plugins for VS Code.",source:"@site/docs/start.md",sourceDirName:".",slug:"/start",permalink:"/docs/start",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/start.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Introduction to Touying",permalink:"/docs/intro"},next:{title:"Layout Your Contents",permalink:"/docs/layout"}},a={},d=[{value:"More Complex Examples",id:"more-complex-examples",level:2}];function u(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"getting-started",children:"Getting Started"}),"\n",(0,s.jsxs)(n.p,{children:["Before you begin, make sure you have installed the Typst environment. If not, you can use the ",(0,s.jsx)(n.a,{href:"https://typst.app/",children:"Web App"})," or the Typst LSP and Typst Preview plugins for VS Code."]}),"\n",(0,s.jsx)(n.p,{children:"To use Touying, you only need to include the following code in your document:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let (init, slide, slides) = utils.methods(s)\n#show: init\n\n#show: slides\n\n= Title\n\n== First Slide\n\nHello, Touying!\n\n#pause\n\nHello, Typst!\n'})}),"\n",(0,s.jsx)(n.p,{children:"It's simple. Congratulations on creating your first Touying slide! \ud83c\udf89"}),"\n",(0,s.jsx)(n.h2,{id:"more-complex-examples",children:"More Complex Examples"}),"\n",(0,s.jsxs)(n.p,{children:["In fact, Touying provides various styles for writing slides. For example, the above example uses first-level and second-level titles to create new slides. However, you can also use the ",(0,s.jsx)(n.code,{children:"#slide[..]"})," format to access more powerful features provided by Touying."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let s = (s.methods.enable-transparent-cover)(self: s)\n#let (init, slide) = utils.methods(s)\n#show: init\n\n// simple animations\n#slide[\n a simple #pause *dynamic*\n\n #pause\n \n slide.\n\n #meanwhile\n\n meanwhile #pause with pause.\n][\n second #pause pause.\n]\n\n// complex animations\n#slide(setting: body => {\n set text(fill: blue)\n body\n}, repeat: 3, self => [\n #let (uncover, only, alternatives) = utils.methods(self)\n\n in subslide #self.subslide\n\n test #uncover("2-")[uncover] function\n\n test #only("2-")[only] function\n\n #pause\n\n and paused text.\n])\n\n// math equation animations\n#slide[\n == Touying Equation\n\n #touying-equation(`\n f(x) &= pause x^2 + 2x + 1 \\\n &= pause (x + 1)^2 \\\n `)\n\n #meanwhile\n\n Touying equation is very simple.\n]\n\n// multiple pages for one slide\n#slide[\n == Multiple Pages for One Slide\n\n #lorem(200)\n]\n\n// appendix by freezing last-slide-number\n#let s = (s.methods.appendix)(self: s)\n#let (slide,) = utils.methods(s)\n\n#slide[\n == Appendix\n]\n'})}),"\n",(0,s.jsx)(n.p,{children:"In addition, Touying provides many built-in themes to easily create beautiful slides. Basically, you just need to add a line at the top of your document:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:'#let s = themes.metropolis.register(s, aspect-ratio: "16-9")\n'})}),"\n",(0,s.jsx)(n.p,{children:"This will allow you to use the Metropolis theme. For more detailed tutorials, you can refer to the following chapters."})]})}function p(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>l});var s=t(7294);const o={},i=s.createContext(o);function l(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/98ce8162.b2fca771.js b/assets/js/98ce8162.b2fca771.js new file mode 100644 index 000000000..8ce40c7e1 --- /dev/null +++ b/assets/js/98ce8162.b2fca771.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1543],{8194:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>p,frontMatter:()=>i,metadata:()=>r,toc:()=>d});var s=t(5893),o=t(1151);const i={sidebar_position:2},l="Getting Started",r={id:"start",title:"Getting Started",description:"Before you begin, make sure you have installed the Typst environment. If not, you can use the Web App or the Typst LSP and Typst Preview plugins for VS Code.",source:"@site/docs/start.md",sourceDirName:".",slug:"/start",permalink:"/touying/docs/start",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/start.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Introduction to Touying",permalink:"/touying/docs/intro"},next:{title:"Layout Your Contents",permalink:"/touying/docs/layout"}},a={},d=[{value:"More Complex Examples",id:"more-complex-examples",level:2}];function u(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"getting-started",children:"Getting Started"}),"\n",(0,s.jsxs)(n.p,{children:["Before you begin, make sure you have installed the Typst environment. If not, you can use the ",(0,s.jsx)(n.a,{href:"https://typst.app/",children:"Web App"})," or the Typst LSP and Typst Preview plugins for VS Code."]}),"\n",(0,s.jsx)(n.p,{children:"To use Touying, you only need to include the following code in your document:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let (init, slide, slides) = utils.methods(s)\n#show: init\n\n#show: slides\n\n= Title\n\n== First Slide\n\nHello, Touying!\n\n#pause\n\nHello, Typst!\n'})}),"\n",(0,s.jsx)(n.p,{children:"It's simple. Congratulations on creating your first Touying slide! \ud83c\udf89"}),"\n",(0,s.jsx)(n.h2,{id:"more-complex-examples",children:"More Complex Examples"}),"\n",(0,s.jsxs)(n.p,{children:["In fact, Touying provides various styles for writing slides. For example, the above example uses first-level and second-level titles to create new slides. However, you can also use the ",(0,s.jsx)(n.code,{children:"#slide[..]"})," format to access more powerful features provided by Touying."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let s = (s.methods.enable-transparent-cover)(self: s)\n#let (init, slide) = utils.methods(s)\n#show: init\n\n// simple animations\n#slide[\n a simple #pause *dynamic*\n\n #pause\n \n slide.\n\n #meanwhile\n\n meanwhile #pause with pause.\n][\n second #pause pause.\n]\n\n// complex animations\n#slide(setting: body => {\n set text(fill: blue)\n body\n}, repeat: 3, self => [\n #let (uncover, only, alternatives) = utils.methods(self)\n\n in subslide #self.subslide\n\n test #uncover("2-")[uncover] function\n\n test #only("2-")[only] function\n\n #pause\n\n and paused text.\n])\n\n// math equation animations\n#slide[\n == Touying Equation\n\n #touying-equation(`\n f(x) &= pause x^2 + 2x + 1 \\\n &= pause (x + 1)^2 \\\n `)\n\n #meanwhile\n\n Touying equation is very simple.\n]\n\n// multiple pages for one slide\n#slide[\n == Multiple Pages for One Slide\n\n #lorem(200)\n]\n\n// appendix by freezing last-slide-number\n#let s = (s.methods.appendix)(self: s)\n#let (slide,) = utils.methods(s)\n\n#slide[\n == Appendix\n]\n'})}),"\n",(0,s.jsx)(n.p,{children:"In addition, Touying provides many built-in themes to easily create beautiful slides. Basically, you just need to add a line at the top of your document:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:'#let s = themes.metropolis.register(s, aspect-ratio: "16-9")\n'})}),"\n",(0,s.jsx)(n.p,{children:"This will allow you to use the Metropolis theme. For more detailed tutorials, you can refer to the following chapters."})]})}function p(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>l});var s=t(7294);const o={},i=s.createContext(o);function l(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9beb87c2.07a7862c.js b/assets/js/9beb87c2.07a7862c.js deleted file mode 100644 index 39febeba5..000000000 --- a/assets/js/9beb87c2.07a7862c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3034],{4123:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>c,metadata:()=>d,toc:()=>r});var i=t(5893),n=t(1151);const c={sidebar_position:11},l="Changelog",d={id:"changelog",title:"Changelog",description:"v0.2.0",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/docs/changelog.md",tags:[],version:"current",sidebarPosition:11,frontMatter:{sidebar_position:11},sidebar:"tutorialSidebar",previous:{title:"Typst Preview",permalink:"/docs/external/typst-preview"}},o={},r=[{value:"v0.2.0",id:"v020",level:2}];function a(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",input:"input",li:"li",strong:"strong",ul:"ul",...(0,n.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h1,{id:"changelog",children:"Changelog"}),"\n",(0,i.jsx)(s.h2,{id:"v020",children:"v0.2.0"}),"\n",(0,i.jsxs)(s.ul,{className:"contains-task-list",children:["\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.strong,{children:"Object-oriented programming:"})," Singleton ",(0,i.jsx)(s.code,{children:"s"}),", binding methods ",(0,i.jsx)(s.code,{children:"utils.methods(s)"})," and ",(0,i.jsx)(s.code,{children:"(self: obj, ..) => {..}"})," methods."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.strong,{children:"Page arguments management:"})," Instead of using ",(0,i.jsx)(s.code,{children:"#set page(..)"}),", you should use ",(0,i.jsx)(s.code,{children:"self.page-args"})," to retrieve or set page parameters, thereby avoiding unnecessary creation of new pages."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsxs)(s.strong,{children:[(0,i.jsx)(s.code,{children:"#pause"})," for sequence content:"]})," You can use #pause at the outermost level of a slide, including inline and list."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsxs)(s.strong,{children:[(0,i.jsx)(s.code,{children:"#pause"})," for layout functions:"]})," You can use the ",(0,i.jsx)(s.code,{children:"composer"})," parameter to add yourself layout function like ",(0,i.jsx)(s.code,{children:"utils.side-by-side"}),", and simply use multiple pos parameters like ",(0,i.jsx)(s.code,{children:"#slide[..][..]"}),"."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsxs)(s.strong,{children:[(0,i.jsx)(s.code,{children:"#meanwhile"})," for synchronous display:"]})," Provide a ",(0,i.jsx)(s.code,{children:"#meanwhile"})," for resetting subslides counter."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsxs)(s.strong,{children:[(0,i.jsx)(s.code,{children:"#pause"})," and ",(0,i.jsx)(s.code,{children:"#meanwhile"})," for math equation:"]})," Provide a ",(0,i.jsx)(s.code,{children:'#touying-equation("x + y pause + z")'})," for math equation animations."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.strong,{children:"Slides:"})," Create simple slides using standard headings."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsxs)(s.strong,{children:["Callback-style ",(0,i.jsx)(s.code,{children:"uncover"}),", ",(0,i.jsx)(s.code,{children:"only"})," and ",(0,i.jsx)(s.code,{children:"alternatives"}),":"]})," Based on the concise syntax provided by Polylux, allow precise control of the timing for displaying content.","\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["You should manually control the number of subslides using the ",(0,i.jsx)(s.code,{children:"repeat"})," parameter."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.strong,{children:"Transparent cover:"})," Enable transparent cover using oop syntax like ",(0,i.jsx)(s.code,{children:"#let s = (s.methods.enable-transparent-cover)(self: s)"}),"."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.strong,{children:"Handout mode:"})," enable handout mode by ",(0,i.jsx)(s.code,{children:"#let s = (s.methods.enable-handout-mode)(self: s)"}),"."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.strong,{children:"Fit-to-width and fit-to-height:"})," Fit-to-width for title in header and fit-to-height for image.","\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.code,{children:"utils.fit-to-width(grow: true, shrink: true, width, body)"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.code,{children:"utils.fit-to-height(width: none, prescale-width: none, grow: true, shrink: true, height, body)"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.strong,{children:"Slides counter:"})," ",(0,i.jsx)(s.code,{children:'states.slide-counter.display() + " / " + states.last-slide-number'})," and ",(0,i.jsx)(s.code,{children:"states.touying-progress(ratio => ..)"}),"."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.strong,{children:"Appendix:"})," Freeze the ",(0,i.jsx)(s.code,{children:"last-slide-number"})," to prevent the slide number from increasing further."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.strong,{children:"Sections:"})," Touying's built-in section support can be used to display the current section title and show progress.","\n",(0,i.jsxs)(s.ul,{className:"contains-task-list",children:["\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.code,{children:"section"})," and ",(0,i.jsx)(s.code,{children:"subsection"})," parameter in ",(0,i.jsx)(s.code,{children:"#slide"})," to register a new section or subsection."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.code,{children:"states.current-section-title"})," to get the current section."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.code,{children:"states.touying-outline"})," or ",(0,i.jsx)(s.code,{children:"s.methods.touying-outline"})," to display a outline of sections."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.code,{children:"states.touying-final-sections(sections => ..)"})," for custom outline display."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.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,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.strong,{children:"Navigation bar"}),": Navigation bar like ",(0,i.jsx)(s.a,{href:"https://github.com/zbowang/BeamerTheme",children:"here"})," by ",(0,i.jsx)(s.code,{children:"states.touying-progress-with-sections(..)"}),", in ",(0,i.jsx)(s.code,{children:"dewdrop"})," theme."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.strong,{children:"Pdfpc:"})," pdfpc support and export ",(0,i.jsx)(s.code,{children:".pdfpc"})," file without external tool by ",(0,i.jsx)(s.code,{children:"typst query"})," command simply."]}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},1151:(e,s,t)=>{t.d(s,{Z:()=>d,a:()=>l});var i=t(7294);const n={},c=i.createContext(n);function l(e){const s=i.useContext(c);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function d(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:l(e.components),i.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9beb87c2.90d4a404.js b/assets/js/9beb87c2.90d4a404.js new file mode 100644 index 000000000..187e93cbc --- /dev/null +++ b/assets/js/9beb87c2.90d4a404.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3034],{4123:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>l,default:()=>h,frontMatter:()=>c,metadata:()=>o,toc:()=>r});var i=t(5893),n=t(1151);const c={sidebar_position:11},l="Changelog",o={id:"changelog",title:"Changelog",description:"v0.2.0",source:"@site/docs/changelog.md",sourceDirName:".",slug:"/changelog",permalink:"/touying/docs/changelog",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/changelog.md",tags:[],version:"current",sidebarPosition:11,frontMatter:{sidebar_position:11},sidebar:"tutorialSidebar",previous:{title:"Typst Preview",permalink:"/touying/docs/external/typst-preview"}},d={},r=[{value:"v0.2.0",id:"v020",level:2}];function a(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",input:"input",li:"li",strong:"strong",ul:"ul",...(0,n.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h1,{id:"changelog",children:"Changelog"}),"\n",(0,i.jsx)(s.h2,{id:"v020",children:"v0.2.0"}),"\n",(0,i.jsxs)(s.ul,{className:"contains-task-list",children:["\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.strong,{children:"Object-oriented programming:"})," Singleton ",(0,i.jsx)(s.code,{children:"s"}),", binding methods ",(0,i.jsx)(s.code,{children:"utils.methods(s)"})," and ",(0,i.jsx)(s.code,{children:"(self: obj, ..) => {..}"})," methods."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.strong,{children:"Page arguments management:"})," Instead of using ",(0,i.jsx)(s.code,{children:"#set page(..)"}),", you should use ",(0,i.jsx)(s.code,{children:"self.page-args"})," to retrieve or set page parameters, thereby avoiding unnecessary creation of new pages."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsxs)(s.strong,{children:[(0,i.jsx)(s.code,{children:"#pause"})," for sequence content:"]})," You can use #pause at the outermost level of a slide, including inline and list."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsxs)(s.strong,{children:[(0,i.jsx)(s.code,{children:"#pause"})," for layout functions:"]})," You can use the ",(0,i.jsx)(s.code,{children:"composer"})," parameter to add yourself layout function like ",(0,i.jsx)(s.code,{children:"utils.side-by-side"}),", and simply use multiple pos parameters like ",(0,i.jsx)(s.code,{children:"#slide[..][..]"}),"."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsxs)(s.strong,{children:[(0,i.jsx)(s.code,{children:"#meanwhile"})," for synchronous display:"]})," Provide a ",(0,i.jsx)(s.code,{children:"#meanwhile"})," for resetting subslides counter."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsxs)(s.strong,{children:[(0,i.jsx)(s.code,{children:"#pause"})," and ",(0,i.jsx)(s.code,{children:"#meanwhile"})," for math equation:"]})," Provide a ",(0,i.jsx)(s.code,{children:'#touying-equation("x + y pause + z")'})," for math equation animations."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.strong,{children:"Slides:"})," Create simple slides using standard headings."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsxs)(s.strong,{children:["Callback-style ",(0,i.jsx)(s.code,{children:"uncover"}),", ",(0,i.jsx)(s.code,{children:"only"})," and ",(0,i.jsx)(s.code,{children:"alternatives"}),":"]})," Based on the concise syntax provided by Polylux, allow precise control of the timing for displaying content.","\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["You should manually control the number of subslides using the ",(0,i.jsx)(s.code,{children:"repeat"})," parameter."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.strong,{children:"Transparent cover:"})," Enable transparent cover using oop syntax like ",(0,i.jsx)(s.code,{children:"#let s = (s.methods.enable-transparent-cover)(self: s)"}),"."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.strong,{children:"Handout mode:"})," enable handout mode by ",(0,i.jsx)(s.code,{children:"#let s = (s.methods.enable-handout-mode)(self: s)"}),"."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.strong,{children:"Fit-to-width and fit-to-height:"})," Fit-to-width for title in header and fit-to-height for image.","\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.code,{children:"utils.fit-to-width(grow: true, shrink: true, width, body)"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.code,{children:"utils.fit-to-height(width: none, prescale-width: none, grow: true, shrink: true, height, body)"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.strong,{children:"Slides counter:"})," ",(0,i.jsx)(s.code,{children:'states.slide-counter.display() + " / " + states.last-slide-number'})," and ",(0,i.jsx)(s.code,{children:"states.touying-progress(ratio => ..)"}),"."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.strong,{children:"Appendix:"})," Freeze the ",(0,i.jsx)(s.code,{children:"last-slide-number"})," to prevent the slide number from increasing further."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.strong,{children:"Sections:"})," Touying's built-in section support can be used to display the current section title and show progress.","\n",(0,i.jsxs)(s.ul,{className:"contains-task-list",children:["\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.code,{children:"section"})," and ",(0,i.jsx)(s.code,{children:"subsection"})," parameter in ",(0,i.jsx)(s.code,{children:"#slide"})," to register a new section or subsection."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.code,{children:"states.current-section-title"})," to get the current section."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.code,{children:"states.touying-outline"})," or ",(0,i.jsx)(s.code,{children:"s.methods.touying-outline"})," to display a outline of sections."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.code,{children:"states.touying-final-sections(sections => ..)"})," for custom outline display."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.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,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.strong,{children:"Navigation bar"}),": Navigation bar like ",(0,i.jsx)(s.a,{href:"https://github.com/zbowang/BeamerTheme",children:"here"})," by ",(0,i.jsx)(s.code,{children:"states.touying-progress-with-sections(..)"}),", in ",(0,i.jsx)(s.code,{children:"dewdrop"})," theme."]}),"\n",(0,i.jsxs)(s.li,{className:"task-list-item",children:[(0,i.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,i.jsx)(s.strong,{children:"Pdfpc:"})," pdfpc support and export ",(0,i.jsx)(s.code,{children:".pdfpc"})," file without external tool by ",(0,i.jsx)(s.code,{children:"typst query"})," command simply."]}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},1151:(e,s,t)=>{t.d(s,{Z:()=>o,a:()=>l});var i=t(7294);const n={},c=i.createContext(n);function l(e){const s=i.useContext(c);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:l(e.components),i.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9d0f4357.bc35b904.js b/assets/js/9d0f4357.bc35b904.js new file mode 100644 index 000000000..b16dbb33f --- /dev/null +++ b/assets/js/9d0f4357.bc35b904.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2026],{8762:i=>{i.exports=JSON.parse('{"title":"Utilities","description":"Some convenient utility functions.","slug":"/category/utilities","permalink":"/touying/docs/category/utilities","navigation":{"previous":{"title":"Touying Sections","permalink":"/touying/docs/progress/sections"},"next":{"title":"Object-Oriented Programming","permalink":"/touying/docs/utilities/oop"}}}')}}]); \ No newline at end of file diff --git a/assets/js/a7023ddc.925387c6.js b/assets/js/a7023ddc.925387c6.js deleted file mode 100644 index 949b84c84..000000000 --- a/assets/js/a7023ddc.925387c6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1713],{3457:e=>{e.exports=JSON.parse('[{"label":"development","permalink":"/blog/tags/development","count":1}]')}}]); \ No newline at end of file diff --git a/assets/js/a94a4682.822223b7.js b/assets/js/a94a4682.822223b7.js deleted file mode 100644 index ff83ada79..000000000 --- a/assets/js/a94a4682.822223b7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4599],{5376:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>l,default:()=>h,frontMatter:()=>c,metadata:()=>o,toc:()=>r});var n=t(5893),i=t(1151);const c={slug:"touying-0-2-0",title:"Touying 0.2.0",authors:"orangex4",tags:["development"]},l=void 0,o={permalink:"/blog/touying-0-2-0",editUrl:"https://github.com/touying-typ/touying/tree/main/docs/blog/2024-01-17-touying-0-2-0.md",source:"@site/blog/2024-01-17-touying-0-2-0.md",title:"Touying 0.2.0",description:"Touying 0.2.0 is done.",date:"2024-01-17T00:00:00.000Z",formattedDate:"January 17, 2024",tags:[{label:"development",permalink:"/blog/tags/development"}],readingTime:1.875,hasTruncateMarker:!1,authors:[{name:"OrangeX4",title:"Maintainer of Touying.",url:"https://github.com/OrangeX4",imageURL:"https://orangex4.cool/images/icons/profile.jpg",key:"orangex4"}],frontMatter:{slug:"touying-0-2-0",title:"Touying 0.2.0",authors:"orangex4",tags:["development"]},unlisted:!1},d={authorsImageUrls:[void 0]},r=[{value:"Implemented Features",id:"implemented-features",level:2}];function a(e){const s={a:"a",code:"code",h2:"h2",input:"input",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.p,{children:"Touying 0.2.0 is done."}),"\n",(0,n.jsx)(s.h2,{id:"implemented-features",children:"Implemented Features"}),"\n",(0,n.jsxs)(s.ul,{className:"contains-task-list",children:["\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Object-oriented programming:"})," Singleton ",(0,n.jsx)(s.code,{children:"s"}),", binding methods ",(0,n.jsx)(s.code,{children:"utils.methods(s)"})," and ",(0,n.jsx)(s.code,{children:"(self: obj, ..) => {..}"})," methods."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Page arguments management:"})," Instead of using ",(0,n.jsx)(s.code,{children:"#set page(..)"}),", you should use ",(0,n.jsx)(s.code,{children:"self.page-args"})," to retrieve or set page parameters, thereby avoiding unnecessary creation of new pages."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsxs)(s.strong,{children:[(0,n.jsx)(s.code,{children:"#pause"})," for sequence content:"]})," You can use #pause at the outermost level of a slide, including inline and list."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsxs)(s.strong,{children:[(0,n.jsx)(s.code,{children:"#pause"})," for layout functions:"]})," You can use the ",(0,n.jsx)(s.code,{children:"composer"})," parameter to add yourself layout function like ",(0,n.jsx)(s.code,{children:"utils.side-by-side"}),", and simply use multiple pos parameters like ",(0,n.jsx)(s.code,{children:"#slide[..][..]"}),"."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsxs)(s.strong,{children:[(0,n.jsx)(s.code,{children:"#meanwhile"})," for synchronous display:"]})," Provide a ",(0,n.jsx)(s.code,{children:"#meanwhile"})," for resetting subslides counter."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsxs)(s.strong,{children:[(0,n.jsx)(s.code,{children:"#pause"})," and ",(0,n.jsx)(s.code,{children:"#meanwhile"})," for math equation:"]})," Provide a ",(0,n.jsx)(s.code,{children:'#touying-equation("x + y pause + z")'})," for math equation animations."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Slides:"})," Create simple slides using standard headings."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsxs)(s.strong,{children:["Callback-style ",(0,n.jsx)(s.code,{children:"uncover"}),", ",(0,n.jsx)(s.code,{children:"only"})," and ",(0,n.jsx)(s.code,{children:"alternatives"}),":"]})," Based on the concise syntax provided by Polylux, allow precise control of the timing for displaying content.","\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["You should manually control the number of subslides using the ",(0,n.jsx)(s.code,{children:"repeat"})," parameter."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Transparent cover:"})," Enable transparent cover using oop syntax like ",(0,n.jsx)(s.code,{children:"#let s = (s.methods.enable-transparent-cover)(self: s)"}),"."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Handout mode:"})," enable handout mode by ",(0,n.jsx)(s.code,{children:"#let s = (s.methods.enable-handout-mode)(self: s)"}),"."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Fit-to-width and fit-to-height:"})," Fit-to-width for title in header and fit-to-height for image.","\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.code,{children:"utils.fit-to-width(grow: true, shrink: true, width, body)"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.code,{children:"utils.fit-to-height(width: none, prescale-width: none, grow: true, shrink: true, height, body)"})}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Slides counter:"})," ",(0,n.jsx)(s.code,{children:'states.slide-counter.display() + " / " + states.last-slide-number'})," and ",(0,n.jsx)(s.code,{children:"states.touying-progress(ratio => ..)"}),"."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Appendix:"})," Freeze the ",(0,n.jsx)(s.code,{children:"last-slide-number"})," to prevent the slide number from increasing further."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Sections:"})," Touying's built-in section support can be used to display the current section title and show progress.","\n",(0,n.jsxs)(s.ul,{className:"contains-task-list",children:["\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.code,{children:"section"})," and ",(0,n.jsx)(s.code,{children:"subsection"})," parameter in ",(0,n.jsx)(s.code,{children:"#slide"})," to register a new section or subsection."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.code,{children:"states.current-section-title"})," to get the current section."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.code,{children:"states.touying-outline"})," or ",(0,n.jsx)(s.code,{children:"s.methods.touying-outline"})," to display a outline of sections."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.code,{children:"states.touying-final-sections(sections => ..)"})," for custom outline display."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.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,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Navigation bar"}),": Navigation bar like ",(0,n.jsx)(s.a,{href:"https://github.com/zbowang/BeamerTheme",children:"here"})," by ",(0,n.jsx)(s.code,{children:"states.touying-progress-with-sections(..)"}),", in ",(0,n.jsx)(s.code,{children:"dewdrop"})," theme."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Pdfpc:"})," pdfpc support and export ",(0,n.jsx)(s.code,{children:".pdfpc"})," file without external tool by ",(0,n.jsx)(s.code,{children:"typst query"})," command simply."]}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},1151:(e,s,t)=>{t.d(s,{Z:()=>o,a:()=>l});var n=t(7294);const i={},c=n.createContext(i);function l(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a94a4682.f4cd98e8.js b/assets/js/a94a4682.f4cd98e8.js new file mode 100644 index 000000000..514acb14c --- /dev/null +++ b/assets/js/a94a4682.f4cd98e8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4599],{5376:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>c,metadata:()=>l,toc:()=>r});var n=t(5893),i=t(1151);const c={slug:"touying-0-2-0",title:"Touying 0.2.0",authors:"orangex4",tags:["development"]},o=void 0,l={permalink:"/touying/blog/touying-0-2-0",editUrl:"https://github.com/touying-typ/touying/tree/main/docs/blog/2024-01-17-touying-0-2-0.md",source:"@site/blog/2024-01-17-touying-0-2-0.md",title:"Touying 0.2.0",description:"Touying 0.2.0 is done.",date:"2024-01-17T00:00:00.000Z",formattedDate:"January 17, 2024",tags:[{label:"development",permalink:"/touying/blog/tags/development"}],readingTime:1.875,hasTruncateMarker:!1,authors:[{name:"OrangeX4",title:"Maintainer of Touying.",url:"https://github.com/OrangeX4",imageURL:"https://orangex4.cool/images/icons/profile.jpg",key:"orangex4"}],frontMatter:{slug:"touying-0-2-0",title:"Touying 0.2.0",authors:"orangex4",tags:["development"]},unlisted:!1},d={authorsImageUrls:[void 0]},r=[{value:"Implemented Features",id:"implemented-features",level:2}];function a(e){const s={a:"a",code:"code",h2:"h2",input:"input",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.p,{children:"Touying 0.2.0 is done."}),"\n",(0,n.jsx)(s.h2,{id:"implemented-features",children:"Implemented Features"}),"\n",(0,n.jsxs)(s.ul,{className:"contains-task-list",children:["\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Object-oriented programming:"})," Singleton ",(0,n.jsx)(s.code,{children:"s"}),", binding methods ",(0,n.jsx)(s.code,{children:"utils.methods(s)"})," and ",(0,n.jsx)(s.code,{children:"(self: obj, ..) => {..}"})," methods."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Page arguments management:"})," Instead of using ",(0,n.jsx)(s.code,{children:"#set page(..)"}),", you should use ",(0,n.jsx)(s.code,{children:"self.page-args"})," to retrieve or set page parameters, thereby avoiding unnecessary creation of new pages."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsxs)(s.strong,{children:[(0,n.jsx)(s.code,{children:"#pause"})," for sequence content:"]})," You can use #pause at the outermost level of a slide, including inline and list."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsxs)(s.strong,{children:[(0,n.jsx)(s.code,{children:"#pause"})," for layout functions:"]})," You can use the ",(0,n.jsx)(s.code,{children:"composer"})," parameter to add yourself layout function like ",(0,n.jsx)(s.code,{children:"utils.side-by-side"}),", and simply use multiple pos parameters like ",(0,n.jsx)(s.code,{children:"#slide[..][..]"}),"."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsxs)(s.strong,{children:[(0,n.jsx)(s.code,{children:"#meanwhile"})," for synchronous display:"]})," Provide a ",(0,n.jsx)(s.code,{children:"#meanwhile"})," for resetting subslides counter."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsxs)(s.strong,{children:[(0,n.jsx)(s.code,{children:"#pause"})," and ",(0,n.jsx)(s.code,{children:"#meanwhile"})," for math equation:"]})," Provide a ",(0,n.jsx)(s.code,{children:'#touying-equation("x + y pause + z")'})," for math equation animations."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Slides:"})," Create simple slides using standard headings."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsxs)(s.strong,{children:["Callback-style ",(0,n.jsx)(s.code,{children:"uncover"}),", ",(0,n.jsx)(s.code,{children:"only"})," and ",(0,n.jsx)(s.code,{children:"alternatives"}),":"]})," Based on the concise syntax provided by Polylux, allow precise control of the timing for displaying content.","\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["You should manually control the number of subslides using the ",(0,n.jsx)(s.code,{children:"repeat"})," parameter."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Transparent cover:"})," Enable transparent cover using oop syntax like ",(0,n.jsx)(s.code,{children:"#let s = (s.methods.enable-transparent-cover)(self: s)"}),"."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Handout mode:"})," enable handout mode by ",(0,n.jsx)(s.code,{children:"#let s = (s.methods.enable-handout-mode)(self: s)"}),"."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Fit-to-width and fit-to-height:"})," Fit-to-width for title in header and fit-to-height for image.","\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.code,{children:"utils.fit-to-width(grow: true, shrink: true, width, body)"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.code,{children:"utils.fit-to-height(width: none, prescale-width: none, grow: true, shrink: true, height, body)"})}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Slides counter:"})," ",(0,n.jsx)(s.code,{children:'states.slide-counter.display() + " / " + states.last-slide-number'})," and ",(0,n.jsx)(s.code,{children:"states.touying-progress(ratio => ..)"}),"."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Appendix:"})," Freeze the ",(0,n.jsx)(s.code,{children:"last-slide-number"})," to prevent the slide number from increasing further."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Sections:"})," Touying's built-in section support can be used to display the current section title and show progress.","\n",(0,n.jsxs)(s.ul,{className:"contains-task-list",children:["\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.code,{children:"section"})," and ",(0,n.jsx)(s.code,{children:"subsection"})," parameter in ",(0,n.jsx)(s.code,{children:"#slide"})," to register a new section or subsection."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.code,{children:"states.current-section-title"})," to get the current section."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.code,{children:"states.touying-outline"})," or ",(0,n.jsx)(s.code,{children:"s.methods.touying-outline"})," to display a outline of sections."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.code,{children:"states.touying-final-sections(sections => ..)"})," for custom outline display."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.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,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Navigation bar"}),": Navigation bar like ",(0,n.jsx)(s.a,{href:"https://github.com/zbowang/BeamerTheme",children:"here"})," by ",(0,n.jsx)(s.code,{children:"states.touying-progress-with-sections(..)"}),", in ",(0,n.jsx)(s.code,{children:"dewdrop"})," theme."]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ",(0,n.jsx)(s.strong,{children:"Pdfpc:"})," pdfpc support and export ",(0,n.jsx)(s.code,{children:".pdfpc"})," file without external tool by ",(0,n.jsx)(s.code,{children:"typst query"})," command simply."]}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},1151:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>o});var n=t(7294);const i={},c=n.createContext(i);function o(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b2b675dd.27f741ee.js b/assets/js/b2b675dd.27f741ee.js deleted file mode 100644 index 7f9b76926..000000000 --- a/assets/js/b2b675dd.27f741ee.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[533],{8017:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/b2f554cd.4d9fc7c5.js b/assets/js/b2f554cd.4d9fc7c5.js deleted file mode 100644 index 2474cb8e0..000000000 --- a/assets/js/b2f554cd.4d9fc7c5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1477],{10:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"touying-0-2-0","metadata":{"permalink":"/blog/touying-0-2-0","editUrl":"https://github.com/touying-typ/touying/tree/main/docs/blog/2024-01-17-touying-0-2-0.md","source":"@site/blog/2024-01-17-touying-0-2-0.md","title":"Touying 0.2.0","description":"Touying 0.2.0 is done.","date":"2024-01-17T00:00:00.000Z","formattedDate":"January 17, 2024","tags":[{"label":"development","permalink":"/blog/tags/development"}],"readingTime":1.875,"hasTruncateMarker":false,"authors":[{"name":"OrangeX4","title":"Maintainer of Touying.","url":"https://github.com/OrangeX4","imageURL":"https://orangex4.cool/images/icons/profile.jpg","key":"orangex4"}],"frontMatter":{"slug":"touying-0-2-0","title":"Touying 0.2.0","authors":"orangex4","tags":["development"]},"unlisted":false},"content":"Touying 0.2.0 is done.\\n\\n## Implemented Features\\n\\n- [x] **Object-oriented programming:** Singleton `s`, binding methods `utils.methods(s)` and `(self: obj, ..) => {..}` methods.\\n- [x] **Page arguments management:** Instead of using `#set page(..)`, you should use `self.page-args` to retrieve or set page parameters, thereby avoiding unnecessary creation of new pages.\\n- [x] **`#pause` for sequence content:** You can use #pause at the outermost level of a slide, including inline and list.\\n- [x] **`#pause` for layout functions:** You can use the `composer` parameter to add yourself layout function like `utils.side-by-side`, and simply use multiple pos parameters like `#slide[..][..]`.\\n- [x] **`#meanwhile` for synchronous display:** Provide a `#meanwhile` for resetting subslides counter.\\n- [x] **`#pause` and `#meanwhile` for math equation:** Provide a `#touying-equation(\\"x + y pause + z\\")` for math equation animations.\\n- [x] **Slides:** Create simple slides using standard headings.\\n- [x] **Callback-style `uncover`, `only` and `alternatives`:** Based on the concise syntax provided by Polylux, allow precise control of the timing for displaying content.\\n - You should manually control the number of subslides using the `repeat` parameter.\\n- [x] **Transparent cover:** Enable transparent cover using oop syntax like `#let s = (s.methods.enable-transparent-cover)(self: s)`.\\n- [x] **Handout mode:** enable handout mode by `#let s = (s.methods.enable-handout-mode)(self: s)`.\\n- [x] **Fit-to-width and fit-to-height:** Fit-to-width for title in header and fit-to-height for image.\\n - `utils.fit-to-width(grow: true, shrink: true, width, body)`\\n - `utils.fit-to-height(width: none, prescale-width: none, grow: true, shrink: true, height, body)`\\n- [x] **Slides counter:** `states.slide-counter.display() + \\" / \\" + states.last-slide-number` and `states.touying-progress(ratio => ..)`.\\n- [x] **Appendix:** Freeze the `last-slide-number` to prevent the slide number from increasing further.\\n- [x] **Sections:** Touying\'s built-in section support can be used to display the current section title and show progress.\\n - [x] `section` and `subsection` parameter in `#slide` to register a new section or subsection.\\n - [x] `states.current-section-title` to get the current section.\\n - [x] `states.touying-outline` or `s.methods.touying-outline` to display a outline of sections.\\n - [x] `states.touying-final-sections(sections => ..)` for custom outline display.\\n - [x] `states.touying-progress-with-sections((current-sections: .., final-sections: .., current-slide-number: .., last-slide-number: ..) => ..)` for powerful progress display.\\n- [x] **Navigation bar**: Navigation bar like [here](https://github.com/zbowang/BeamerTheme) by `states.touying-progress-with-sections(..)`, in `dewdrop` theme.\\n- [x] **Pdfpc:** pdfpc support and export `.pdfpc` file without external tool by `typst query` command simply."}]}')}}]); \ No newline at end of file diff --git a/assets/js/b5bb8785.df624773.js b/assets/js/b5bb8785.df624773.js deleted file mode 100644 index eb88da19e..000000000 --- a/assets/js/b5bb8785.df624773.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3597],{3321:e=>{e.exports=JSON.parse('{"title":"Themes","description":"One convenient aspect of using Touying is that you can use the themes provided by Touying or create your own themes or templates with the help of Touying.","slug":"/category/themes","permalink":"/docs/category/themes","navigation":{"previous":{"title":"Handout Mode","permalink":"/docs/dynamic/handout"},"next":{"title":"Simple Theme","permalink":"/docs/themes/simple"}}}')}}]); \ No newline at end of file diff --git a/assets/js/c9566e8a.82328414.js b/assets/js/c9566e8a.82328414.js new file mode 100644 index 000000000..aacb5bf70 --- /dev/null +++ b/assets/js/c9566e8a.82328414.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6118],{4091:(s,e,t)=>{t.r(e),t.d(e,{assets:()=>u,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var n=t(5893),i=t(1151);const o={sidebar_position:2},r="Touying Sections",c={id:"progress/sections",title:"Touying Sections",description:"Touying maintains its own sections state to record the sections and subsections of slides.",source:"@site/docs/progress/sections.md",sourceDirName:"progress",slug:"/progress/sections",permalink:"/touying/docs/progress/sections",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/progress/sections.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Touying Counters",permalink:"/touying/docs/progress/counters"},next:{title:"Utilities",permalink:"/touying/docs/category/utilities"}},u={},l=[{value:"touying-outline",id:"touying-outline",level:2},{value:"touying-final-sections",id:"touying-final-sections",level:2},{value:"touying-progress-with-sections",id:"touying-progress-with-sections",level:2}];function a(s){const e={code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,i.a)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h1,{id:"touying-sections",children:"Touying Sections"}),"\n",(0,n.jsx)(e.p,{children:"Touying maintains its own sections state to record the sections and subsections of slides."}),"\n",(0,n.jsx)(e.h2,{id:"touying-outline",children:"touying-outline"}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.code,{children:"#touying-outline(enum-args: (:), padding: 0pt)"})," is used to display a simple outline."]}),"\n",(0,n.jsx)(e.h2,{id:"touying-final-sections",children:"touying-final-sections"}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.code,{children:"#states.touying-final-sections(final-sections => ..)"})," is used to customize the display of the outline."]}),"\n",(0,n.jsx)(e.h2,{id:"touying-progress-with-sections",children:"touying-progress-with-sections"}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-typst",children:"#states.touying-progress-with-sections((current-sections: .., final-sections: .., current-slide-number: .., last-slide-number: ..) => ..)\n"})}),"\n",(0,n.jsx)(e.p,{children:"This is the most powerful one, allowing you to build any complex progress display with its functionalities."})]})}function d(s={}){const{wrapper:e}={...(0,i.a)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(a,{...s})}):a(s)}},1151:(s,e,t)=>{t.d(e,{Z:()=>c,a:()=>r});var n=t(7294);const i={},o=n.createContext(i);function r(s){const e=n.useContext(o);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function c(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(i):s.components||i:r(s.components),n.createElement(o.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/c9566e8a.ce3dc693.js b/assets/js/c9566e8a.ce3dc693.js deleted file mode 100644 index 6e8052a33..000000000 --- a/assets/js/c9566e8a.ce3dc693.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6118],{4091:(s,e,t)=>{t.r(e),t.d(e,{assets:()=>u,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var n=t(5893),i=t(1151);const o={sidebar_position:2},r="Touying Sections",c={id:"progress/sections",title:"Touying Sections",description:"Touying maintains its own sections state to record the sections and subsections of slides.",source:"@site/docs/progress/sections.md",sourceDirName:"progress",slug:"/progress/sections",permalink:"/docs/progress/sections",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/progress/sections.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Touying Counters",permalink:"/docs/progress/counters"},next:{title:"Utilities",permalink:"/docs/category/utilities"}},u={},l=[{value:"touying-outline",id:"touying-outline",level:2},{value:"touying-final-sections",id:"touying-final-sections",level:2},{value:"touying-progress-with-sections",id:"touying-progress-with-sections",level:2}];function a(s){const e={code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,i.a)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h1,{id:"touying-sections",children:"Touying Sections"}),"\n",(0,n.jsx)(e.p,{children:"Touying maintains its own sections state to record the sections and subsections of slides."}),"\n",(0,n.jsx)(e.h2,{id:"touying-outline",children:"touying-outline"}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.code,{children:"#touying-outline(enum-args: (:), padding: 0pt)"})," is used to display a simple outline."]}),"\n",(0,n.jsx)(e.h2,{id:"touying-final-sections",children:"touying-final-sections"}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.code,{children:"#states.touying-final-sections(final-sections => ..)"})," is used to customize the display of the outline."]}),"\n",(0,n.jsx)(e.h2,{id:"touying-progress-with-sections",children:"touying-progress-with-sections"}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-typst",children:"#states.touying-progress-with-sections((current-sections: .., final-sections: .., current-slide-number: .., last-slide-number: ..) => ..)\n"})}),"\n",(0,n.jsx)(e.p,{children:"This is the most powerful one, allowing you to build any complex progress display with its functionalities."})]})}function d(s={}){const{wrapper:e}={...(0,i.a)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(a,{...s})}):a(s)}},1151:(s,e,t)=>{t.d(e,{Z:()=>c,a:()=>r});var n=t(7294);const i={},o=n.createContext(i);function r(s){const e=n.useContext(o);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function c(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(i):s.components||i:r(s.components),n.createElement(o.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/d16cbc15.8094c876.js b/assets/js/d16cbc15.8094c876.js new file mode 100644 index 000000000..ca4442276 --- /dev/null +++ b/assets/js/d16cbc15.8094c876.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2403],{9741:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>r,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>d,toc:()=>a});var s=i(5893),t=i(1151);const l={sidebar_position:3},o="Dewdrop Theme",d={id:"themes/dewdrop",title:"Dewdrop Theme",description:"This theme is inspired by BeamerTheme created by Zhibo Wang and transformed by OrangeX4.",source:"@site/docs/themes/dewdrop.md",sourceDirName:"themes",slug:"/themes/dewdrop",permalink:"/touying/docs/themes/dewdrop",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/themes/dewdrop.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Metropolis Theme",permalink:"/touying/docs/themes/metropolis"},next:{title:"Build Your Own Theme",permalink:"/touying/docs/build-your-own-theme"}},r={},a=[{value:"Initialization",id:"initialization",level:2},{value:"Color Themes",id:"color-themes",level:2},{value:"Slide Function Family",id:"slide-function-family",level:2},{value:"Special Functions",id:"special-functions",level:2},{value:"slides Function",id:"slides-function",level:2},{value:"Example",id:"example",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",hr:"hr",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"dewdrop-theme",children:"Dewdrop Theme"}),"\n",(0,s.jsxs)(n.p,{children:["This theme is inspired by ",(0,s.jsx)(n.a,{href:"https://github.com/zbowang/BeamerTheme",children:"BeamerTheme"})," created by Zhibo Wang and transformed by ",(0,s.jsx)(n.a,{href:"https://github.com/OrangeX4",children:"OrangeX4"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["The Dewdrop theme features an elegant and aesthetic navigation, including ",(0,s.jsx)(n.code,{children:"sidebar"})," and ",(0,s.jsx)(n.code,{children:"mini-slides"})," modes."]}),"\n",(0,s.jsx)(n.h2,{id:"initialization",children:"Initialization"}),"\n",(0,s.jsx)(n.p,{children:"You can initialize the Dewdrop theme using the following code:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let s = themes.dewdrop.register(\n s,\n aspect-ratio: "16-9",\n footer: [Dewdrop],\n navigation: "mini-slides",\n // navigation: "sidebar",\n // navigation: none,\n)\n#let s = (s.methods.info)(\n self: s,\n title: [Title],\n subtitle: [Subtitle],\n author: [Authors],\n date: datetime.today(),\n institution: [Institution],\n)\n#let s = (s.methods.enable-transparent-cover)(self: s)\n#let (init, slide, slides, title-slide, focus-slide, touying-outline, alert) = utils.methods(s)\n#show: init\n\n#show strong: alert\n'})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"register"})," function takes parameters such as:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"aspect-ratio"}),': The aspect ratio of the slides, either "16-9" or "4-3," with the default being "16-9."']}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"navigation"}),': Style of the navigation bar, which can be "sidebar," "mini-slides," or ',(0,s.jsx)(n.code,{children:"none"}),', with the default being "sidebar."']}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"sidebar"}),": Settings for the sidebar navigation, with the default being ",(0,s.jsx)(n.code,{children:"(width: 10em)"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"mini-slides"}),": Settings for mini-slides, with the default being ",(0,s.jsx)(n.code,{children:"(height: 2em, x: 2em, section: false, subsection: true)"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"footer"}),": Content to be displayed in the footer, with the default being ",(0,s.jsx)(n.code,{children:"[]"}),". You can also pass a function like ",(0,s.jsx)(n.code,{children:"self => self.info.author"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"footer-right"}),": Content to be displayed on the right side of the footer, with the default being ",(0,s.jsx)(n.code,{children:'states.slide-counter.display() + " / " + states.last-slide-number'}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"primary"}),": Primary color, with the default being ",(0,s.jsx)(n.code,{children:'rgb("#0c4842")'}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"alpha"}),": Transparency, with the default being ",(0,s.jsx)(n.code,{children:"70%"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The Dewdrop theme also provides an ",(0,s.jsx)(n.code,{children:"#alert[..]"})," function that you can use with the ",(0,s.jsx)(n.code,{children:"#show strong: alert"})," syntax."]}),"\n",(0,s.jsx)(n.h2,{id:"color-themes",children:"Color Themes"}),"\n",(0,s.jsx)(n.p,{children:"Dewdrop uses the following default color theme:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#let s = (s.methods.colors)(\n self: s,\n neutral-darkest: rgb("#000000"),\n neutral-dark: rgb("#202020"),\n neutral-light: rgb("#f3f3f3"),\n neutral-lightest: rgb("#ffffff"),\n primary: primary,\n)\n'})}),"\n",(0,s.jsxs)(n.p,{children:["You can modify the color theme using ",(0,s.jsx)(n.code,{children:"#let s = (s.methods.colors)(self: s, ..)"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"slide-function-family",children:"Slide Function Family"}),"\n",(0,s.jsx)(n.p,{children:"Dewdrop theme provides a series of custom slide functions:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#title-slide(extra: none, ..args)\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"title-slide"})," reads information from ",(0,s.jsx)(n.code,{children:"self.info"})," for display. You can also pass an ",(0,s.jsx)(n.code,{children:"extra"})," parameter to display additional information."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#slide(\n repeat: auto,\n setting: body => body,\n composer: utils.side-by-side,\n section: none,\n subsection: none,\n // Dewdrop theme\n footer: auto,\n)[\n ...\n]\n"})}),"\n",(0,s.jsx)(n.p,{children:"This is the default ordinary slide function with a navigation bar and footer according to your settings."}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#focus-slide[\n ...\n]\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Used to draw attention. The background color is ",(0,s.jsx)(n.code,{children:"self.colors.primary"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"special-functions",children:"Special Functions"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#d-outline(enum-args: (:), list-args: (:), cover: true)\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Displays the current outline. The ",(0,s.jsx)(n.code,{children:"cover"})," parameter specifies whether to hide sections that are inactive."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#d-sidebar()\n"})}),"\n",(0,s.jsx)(n.p,{children:"An internal function for displaying the sidebar."}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#d-mini-slides()\n"})}),"\n",(0,s.jsx)(n.p,{children:"An internal function for displaying mini-slides."}),"\n",(0,s.jsxs)(n.h2,{id:"slides-function",children:[(0,s.jsx)(n.code,{children:"slides"})," Function"]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"slides"})," function has parameters:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"title-slide"}),": Default is ",(0,s.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"outline-slide"}),": Default is ",(0,s.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"outline-title"}),": Default is ",(0,s.jsx)(n.code,{children:"[Outline]"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["You can set these using ",(0,s.jsx)(n.code,{children:"#show: slides.with(..)"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let s = themes.dewdrop.register(s, aspect-ratio: "16-9", footer: [Dewdrop])\n#let s = (s.methods.info)(\n self: s,\n title: [Title],\n subtitle: [Subtitle],\n author: [Authors],\n date: datetime.today(),\n institution: [Institution],\n)\n#let s = (s.methods.enable-transparent-cover)(self: s)\n#let (init, slide, slides, title-slide, focus-slide, touying-outline, alert) = utils.methods(s)\n#show: init\n\n#show strong: alert\n\n#show: slides\n\n= Title\n\n== First Slide\n\nHello, Touying!\n\n#pause\n\nHello, Typst!\n'})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let s = themes.dewdrop.register(\n s,\n aspect-ratio: "16-9",\n footer: [Dewdrop],\n navigation: "mini-slides",\n // navigation: "sidebar",\n // navigation: none,\n)\n#let s = (s.methods.info)(\n self: s,\n title: [Title],\n subtitle: [Subtitle],\n author: [Authors],\n date: datetime.today(),\n institution: [Institution],\n)\n#let s = (s.methods.enable-transparent-cover)(self: s)\n// #let s = (s.methods.appendix-in-outline)(self: s, false)\n#let (init, slide, title-slide, focus-slide, touying-outline, alert) = utils.methods(s)\n#show: init\n\n#show strong: alert\n\n#title-slide()\n\n#slide[\n == Outline\n \n #touying-outline(cover: false)\n]\n\n#slide(section: [Section A])[\n == Outline\n \n #touying-outline()\n]\n\n#slide(subsection: [Subsection A.1])[\n == Title\n\n A slide with equation:\n\n $ x_(n+1) = (x_n + a/x_n) / 2 $\n]\n\n#slide(subsection: [Subsection A.2])[\n == Important\n\n A slide without a title but with *important* infos\n]\n\n#slide(section: [Section B])[\n == Outline\n \n #touying-outline()\n]\n\n#slide(subsection: [Subsection B.1])[\n == Another Subsection\n\n #lorem(80)\n]\n\n#focus-slide[\n Wake up!\n]\n\n// simple animations\n#slide(subsection: [Subsection B.2])[\n == Dynamic\n\n a simple #pause dynamic slide with #alert[alert]\n\n #pause\n \n text.\n]\n\n// appendix by freezing last-slide-number\n#let s = (s.methods.appendix)(self: s)\n#let (slide,) = utils.methods(s)\n\n#slide(section: [Appendix])[\n == Outline\n \n #touying-outline()\n]\n\n#slide[\n appendix\n]\n'})})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},1151:(e,n,i)=>{i.d(n,{Z:()=>d,a:()=>o});var s=i(7294);const t={},l=s.createContext(t);function o(e){const n=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d16cbc15.d6f7b5f0.js b/assets/js/d16cbc15.d6f7b5f0.js deleted file mode 100644 index 111e1b677..000000000 --- a/assets/js/d16cbc15.d6f7b5f0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2403],{9741:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>r,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>d,toc:()=>a});var s=i(5893),t=i(1151);const l={sidebar_position:3},o="Dewdrop Theme",d={id:"themes/dewdrop",title:"Dewdrop Theme",description:"This theme is inspired by BeamerTheme created by Zhibo Wang and transformed by OrangeX4.",source:"@site/docs/themes/dewdrop.md",sourceDirName:"themes",slug:"/themes/dewdrop",permalink:"/docs/themes/dewdrop",draft:!1,unlisted:!1,editUrl:"https://github.com/touying-typ/touying/tree/main/docs/docs/themes/dewdrop.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Metropolis Theme",permalink:"/docs/themes/metropolis"},next:{title:"Build Your Own Theme",permalink:"/docs/build-your-own-theme"}},r={},a=[{value:"Initialization",id:"initialization",level:2},{value:"Color Themes",id:"color-themes",level:2},{value:"Slide Function Family",id:"slide-function-family",level:2},{value:"Special Functions",id:"special-functions",level:2},{value:"slides Function",id:"slides-function",level:2},{value:"Example",id:"example",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",hr:"hr",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"dewdrop-theme",children:"Dewdrop Theme"}),"\n",(0,s.jsxs)(n.p,{children:["This theme is inspired by ",(0,s.jsx)(n.a,{href:"https://github.com/zbowang/BeamerTheme",children:"BeamerTheme"})," created by Zhibo Wang and transformed by ",(0,s.jsx)(n.a,{href:"https://github.com/OrangeX4",children:"OrangeX4"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["The Dewdrop theme features an elegant and aesthetic navigation, including ",(0,s.jsx)(n.code,{children:"sidebar"})," and ",(0,s.jsx)(n.code,{children:"mini-slides"})," modes."]}),"\n",(0,s.jsx)(n.h2,{id:"initialization",children:"Initialization"}),"\n",(0,s.jsx)(n.p,{children:"You can initialize the Dewdrop theme using the following code:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let s = themes.dewdrop.register(\n s,\n aspect-ratio: "16-9",\n footer: [Dewdrop],\n navigation: "mini-slides",\n // navigation: "sidebar",\n // navigation: none,\n)\n#let s = (s.methods.info)(\n self: s,\n title: [Title],\n subtitle: [Subtitle],\n author: [Authors],\n date: datetime.today(),\n institution: [Institution],\n)\n#let s = (s.methods.enable-transparent-cover)(self: s)\n#let (init, slide, slides, title-slide, focus-slide, touying-outline, alert) = utils.methods(s)\n#show: init\n\n#show strong: alert\n'})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"register"})," function takes parameters such as:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"aspect-ratio"}),': The aspect ratio of the slides, either "16-9" or "4-3," with the default being "16-9."']}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"navigation"}),': Style of the navigation bar, which can be "sidebar," "mini-slides," or ',(0,s.jsx)(n.code,{children:"none"}),', with the default being "sidebar."']}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"sidebar"}),": Settings for the sidebar navigation, with the default being ",(0,s.jsx)(n.code,{children:"(width: 10em)"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"mini-slides"}),": Settings for mini-slides, with the default being ",(0,s.jsx)(n.code,{children:"(height: 2em, x: 2em, section: false, subsection: true)"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"footer"}),": Content to be displayed in the footer, with the default being ",(0,s.jsx)(n.code,{children:"[]"}),". You can also pass a function like ",(0,s.jsx)(n.code,{children:"self => self.info.author"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"footer-right"}),": Content to be displayed on the right side of the footer, with the default being ",(0,s.jsx)(n.code,{children:'states.slide-counter.display() + " / " + states.last-slide-number'}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"primary"}),": Primary color, with the default being ",(0,s.jsx)(n.code,{children:'rgb("#0c4842")'}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"alpha"}),": Transparency, with the default being ",(0,s.jsx)(n.code,{children:"70%"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The Dewdrop theme also provides an ",(0,s.jsx)(n.code,{children:"#alert[..]"})," function that you can use with the ",(0,s.jsx)(n.code,{children:"#show strong: alert"})," syntax."]}),"\n",(0,s.jsx)(n.h2,{id:"color-themes",children:"Color Themes"}),"\n",(0,s.jsx)(n.p,{children:"Dewdrop uses the following default color theme:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#let s = (s.methods.colors)(\n self: s,\n neutral-darkest: rgb("#000000"),\n neutral-dark: rgb("#202020"),\n neutral-light: rgb("#f3f3f3"),\n neutral-lightest: rgb("#ffffff"),\n primary: primary,\n)\n'})}),"\n",(0,s.jsxs)(n.p,{children:["You can modify the color theme using ",(0,s.jsx)(n.code,{children:"#let s = (s.methods.colors)(self: s, ..)"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"slide-function-family",children:"Slide Function Family"}),"\n",(0,s.jsx)(n.p,{children:"Dewdrop theme provides a series of custom slide functions:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#title-slide(extra: none, ..args)\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"title-slide"})," reads information from ",(0,s.jsx)(n.code,{children:"self.info"})," for display. You can also pass an ",(0,s.jsx)(n.code,{children:"extra"})," parameter to display additional information."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#slide(\n repeat: auto,\n setting: body => body,\n composer: utils.side-by-side,\n section: none,\n subsection: none,\n // Dewdrop theme\n footer: auto,\n)[\n ...\n]\n"})}),"\n",(0,s.jsx)(n.p,{children:"This is the default ordinary slide function with a navigation bar and footer according to your settings."}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#focus-slide[\n ...\n]\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Used to draw attention. The background color is ",(0,s.jsx)(n.code,{children:"self.colors.primary"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"special-functions",children:"Special Functions"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#d-outline(enum-args: (:), list-args: (:), cover: true)\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Displays the current outline. The ",(0,s.jsx)(n.code,{children:"cover"})," parameter specifies whether to hide sections that are inactive."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#d-sidebar()\n"})}),"\n",(0,s.jsx)(n.p,{children:"An internal function for displaying the sidebar."}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:"#d-mini-slides()\n"})}),"\n",(0,s.jsx)(n.p,{children:"An internal function for displaying mini-slides."}),"\n",(0,s.jsxs)(n.h2,{id:"slides-function",children:[(0,s.jsx)(n.code,{children:"slides"})," Function"]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"slides"})," function has parameters:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"title-slide"}),": Default is ",(0,s.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"outline-slide"}),": Default is ",(0,s.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"outline-title"}),": Default is ",(0,s.jsx)(n.code,{children:"[Outline]"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["You can set these using ",(0,s.jsx)(n.code,{children:"#show: slides.with(..)"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let s = themes.dewdrop.register(s, aspect-ratio: "16-9", footer: [Dewdrop])\n#let s = (s.methods.info)(\n self: s,\n title: [Title],\n subtitle: [Subtitle],\n author: [Authors],\n date: datetime.today(),\n institution: [Institution],\n)\n#let s = (s.methods.enable-transparent-cover)(self: s)\n#let (init, slide, slides, title-slide, focus-slide, touying-outline, alert) = utils.methods(s)\n#show: init\n\n#show strong: alert\n\n#show: slides\n\n= Title\n\n== First Slide\n\nHello, Touying!\n\n#pause\n\nHello, Typst!\n'})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typst",children:'#import "@preview/touying:0.2.0": *\n\n#let s = themes.dewdrop.register(\n s,\n aspect-ratio: "16-9",\n footer: [Dewdrop],\n navigation: "mini-slides",\n // navigation: "sidebar",\n // navigation: none,\n)\n#let s = (s.methods.info)(\n self: s,\n title: [Title],\n subtitle: [Subtitle],\n author: [Authors],\n date: datetime.today(),\n institution: [Institution],\n)\n#let s = (s.methods.enable-transparent-cover)(self: s)\n// #let s = (s.methods.appendix-in-outline)(self: s, false)\n#let (init, slide, title-slide, focus-slide, touying-outline, alert) = utils.methods(s)\n#show: init\n\n#show strong: alert\n\n#title-slide()\n\n#slide[\n == Outline\n \n #touying-outline(cover: false)\n]\n\n#slide(section: [Section A])[\n == Outline\n \n #touying-outline()\n]\n\n#slide(subsection: [Subsection A.1])[\n == Title\n\n A slide with equation:\n\n $ x_(n+1) = (x_n + a/x_n) / 2 $\n]\n\n#slide(subsection: [Subsection A.2])[\n == Important\n\n A slide without a title but with *important* infos\n]\n\n#slide(section: [Section B])[\n == Outline\n \n #touying-outline()\n]\n\n#slide(subsection: [Subsection B.1])[\n == Another Subsection\n\n #lorem(80)\n]\n\n#focus-slide[\n Wake up!\n]\n\n// simple animations\n#slide(subsection: [Subsection B.2])[\n == Dynamic\n\n a simple #pause dynamic slide with #alert[alert]\n\n #pause\n \n text.\n]\n\n// appendix by freezing last-slide-number\n#let s = (s.methods.appendix)(self: s)\n#let (slide,) = utils.methods(s)\n\n#slide(section: [Appendix])[\n == Outline\n \n #touying-outline()\n]\n\n#slide[\n appendix\n]\n'})})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},1151:(e,n,i)=>{i.d(n,{Z:()=>d,a:()=>o});var s=i(7294);const t={},l=s.createContext(t);function o(e){const n=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d4a9b079.ddb803be.js b/assets/js/d4a9b079.ddb803be.js deleted file mode 100644 index 95ce808c2..000000000 --- a/assets/js/d4a9b079.ddb803be.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6629],{1504:s=>{s.exports=JSON.parse('{"title":"Progress","description":"Manage and display progress in Touying, such as counters and sections.","slug":"/category/progress","permalink":"/docs/category/progress","navigation":{"previous":{"title":"Build Your Own Theme","permalink":"/docs/build-your-own-theme"},"next":{"title":"Touying Counters","permalink":"/docs/progress/counters"}}}')}}]); \ No newline at end of file diff --git a/assets/js/f5938888.8dd127cf.js b/assets/js/f5938888.8dd127cf.js new file mode 100644 index 000000000..ed6687d4b --- /dev/null +++ b/assets/js/f5938888.8dd127cf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[8338],{8931:e=>{e.exports=JSON.parse('{"label":"development","permalink":"/touying/blog/tags/development","allTagsPath":"/touying/blog/tags","count":1,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/f8777534.85fe0a10.js b/assets/js/f8777534.85fe0a10.js new file mode 100644 index 000000000..fb7785f3f --- /dev/null +++ b/assets/js/f8777534.85fe0a10.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1581],{2498:e=>{e.exports=JSON.parse('{"permalink":"/touying/blog","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/main.293f3d63.js b/assets/js/main.293f3d63.js deleted file mode 100644 index 2c356cf03..000000000 --- a/assets/js/main.293f3d63.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.293f3d63.js.LICENSE.txt */ -(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});n(7294);var r=n(8356),o=n.n(r),a=n(6887);const i={"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,1223)),"@theme/BlogTagsListPage",1223],"09ecdeab":[()=>n.e(9139).then(n.bind(n,7396)),"@site/docs/dynamic/cover.md",7396],"0c7d33f3":[()=>n.e(4842).then(n.bind(n,5152)),"@site/docs/utilities/oop.md",5152],"0e384e19":[()=>n.e(9671).then(n.bind(n,7876)),"@site/docs/intro.md",7876],"14eb3368":[()=>Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,4228)),"@theme/DocCategoryGeneratedIndexPage",4228],17896441:[()=>Promise.all([n.e(532),n.e(1404),n.e(7918)]).then(n.bind(n,5154)),"@theme/DocItem",5154],"1f391b9e":[()=>Promise.all([n.e(532),n.e(1404),n.e(3085)]).then(n.bind(n,4247)),"@theme/MDXPage",4247],"2177108b":[()=>n.e(3943).then(n.t.bind(n,309,19)),"~docs/default/category-docs-tutorialsidebar-category-dynamic-slides-721.json",309],"29a36bd7":[()=>n.e(4694).then(n.t.bind(n,3061,19)),"~blog/default/blog-tags-development-9e5-list.json",3061],"2c0b54ac":[()=>n.e(80).then(n.bind(n,8925)),"@site/docs/utilities/fit-to.md",8925],"2d4a7f47":[()=>n.e(9183).then(n.bind(n,9763)),"@site/blog/2024-01-17-touying-0-2-0.md",9763],"32e572c7":[()=>n.e(2340).then(n.t.bind(n,1564,19)),"~docs/default/category-docs-tutorialsidebar-category-utilities-89d.json",1564],"393be207":[()=>n.e(7414).then(n.bind(n,1181)),"@site/src/pages/markdown-page.md",1181],"396cf6b9":[()=>n.e(9705).then(n.bind(n,4885)),"@site/docs/dynamic/simple.md",4885],"3b36ca8e":[()=>n.e(5022).then(n.t.bind(n,3769,19)),"/home/runner/work/touying/touying/docs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"472f8a66":[()=>n.e(8565).then(n.bind(n,2857)),"@site/docs/layout.md",2857],"4bb9edb3":[()=>n.e(3280).then(n.bind(n,567)),"@site/docs/dynamic/equation.md",567],"5035b6a4":[()=>n.e(5609).then(n.t.bind(n,5745,19)),"/home/runner/work/touying/touying/docs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"51a4d3bf":[()=>n.e(2289).then(n.bind(n,4728)),"@site/docs/dynamic/complex.md",4728],"5670b452":[()=>n.e(997).then(n.bind(n,2261)),"@site/docs/build-your-own-theme.md",2261],"5a57e638":[()=>n.e(2143).then(n.bind(n,8811)),"@site/docs/themes/simple.md",8811],"5b27bc59":[()=>n.e(3969).then(n.bind(n,4154)),"@site/docs/dynamic/handout.md",4154],"5e95c892":[()=>n.e(9661).then(n.bind(n,1892)),"@theme/DocsRoot",1892],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"661132b8":[()=>n.e(7092).then(n.t.bind(n,9572,19)),"~blog/default/blog-tags-development-9e5.json",9572],"6875c492":[()=>Promise.all([n.e(532),n.e(1404),n.e(9677),n.e(8610)]).then(n.bind(n,1714)),"@theme/BlogTagsPostsPage",1714],"6b839bb6":[()=>n.e(4863).then(n.bind(n,7310)),"@site/docs/style.md",7310],"6d7ce909":[()=>n.e(5695).then(n.bind(n,689)),"@site/docs/external/typst-preview.md",689],"77e3d78c":[()=>n.e(2191).then(n.bind(n,8465)),"@site/docs/progress/counters.md",8465],"80a0c88e":[()=>n.e(3209).then(n.bind(n,8135)),"@site/docs/themes/metropolis.md",8135],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],"8ac96054":[()=>n.e(9527).then(n.bind(n,3680)),"@site/docs/external/pdfpc.md",3680],"8ded3f77":[()=>n.e(5332).then(n.t.bind(n,4469,19)),"/home/runner/work/touying/touying/docs/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",4469],"8f3e3006":[()=>n.e(5511).then(n.t.bind(n,6966,19)),"~docs/default/category-docs-tutorialsidebar-category-external-tools-820.json",6966],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"98ce8162":[()=>n.e(1543).then(n.bind(n,8194)),"@site/docs/start.md",8194],"9beb87c2":[()=>n.e(3034).then(n.bind(n,4123)),"@site/docs/changelog.md",4123],"9e4087bc":[()=>n.e(3608).then(n.bind(n,3169)),"@theme/BlogArchivePage",3169],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(1404),n.e(9677),n.e(3089)]).then(n.bind(n,46)),"@theme/BlogListPage",46],a7023ddc:[()=>n.e(1713).then(n.t.bind(n,3457,19)),"~blog/default/blog-tags-tags-4c2.json",3457],a7bd4aaa:[()=>n.e(8518).then(n.bind(n,8564)),"@theme/DocVersionRoot",8564],a94703ab:[()=>Promise.all([n.e(532),n.e(4368)]).then(n.bind(n,2674)),"@theme/DocRoot",2674],a94a4682:[()=>n.e(4599).then(n.bind(n,5376)),"@site/blog/2024-01-17-touying-0-2-0.md?truncated=true",5376],b2b675dd:[()=>n.e(533).then(n.t.bind(n,8017,19)),"~blog/default/blog-c06.json",8017],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,10,19)),"~blog/default/blog-archive-80c.json",10],b5bb8785:[()=>n.e(3597).then(n.t.bind(n,3321,19)),"~docs/default/category-docs-tutorialsidebar-category-themes-bef.json",3321],c4f5d8e4:[()=>Promise.all([n.e(532),n.e(4195)]).then(n.bind(n,3261)),"@site/src/pages/index.js",3261],c9566e8a:[()=>n.e(6118).then(n.bind(n,4091)),"@site/docs/progress/sections.md",4091],ccc49370:[()=>Promise.all([n.e(532),n.e(1404),n.e(9677),n.e(6103)]).then(n.bind(n,5203)),"@theme/BlogPostPage",5203],d16cbc15:[()=>n.e(2403).then(n.bind(n,9741)),"@site/docs/themes/dewdrop.md",9741],d4a9b079:[()=>n.e(6629).then(n.t.bind(n,1504,19)),"~docs/default/category-docs-tutorialsidebar-category-progress-3e0.json",1504]};var l=n(5893);function s(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,l.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,l.jsx)("p",{children:String(t)}),(0,l.jsx)("div",{children:(0,l.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,l.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,l.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,l.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,l.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var u=n(9670),c=n(226);function d(e,t){if("*"===e)return o()({loading:s,loader:()=>n.e(1772).then(n.bind(n,1772)),modules:["@theme/NotFound"],webpack:()=>[1772],render(e,t){const n=e.default;return(0,l.jsx)(c.z,{value:{plugin:{name:"native",id:"default"}},children:(0,l.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],m=(0,u.Z)(r);return Object.entries(m).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:s,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const l=n.split(".");l.slice(0,-1).forEach((e=>{i=i[e]})),i[l[l.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;return delete o.__context,(0,l.jsx)(c.z,{value:i,children:(0,l.jsx)(a,{...o,...n})})}})}const p=[{path:"/blog",component:d("/blog","252"),exact:!0},{path:"/blog/archive",component:d("/blog/archive","576"),exact:!0},{path:"/blog/tags",component:d("/blog/tags","42b"),exact:!0},{path:"/blog/tags/development",component:d("/blog/tags/development","f49"),exact:!0},{path:"/blog/touying-0-2-0",component:d("/blog/touying-0-2-0","298"),exact:!0},{path:"/markdown-page",component:d("/markdown-page","41e"),exact:!0},{path:"/docs",component:d("/docs","9ab"),routes:[{path:"/docs",component:d("/docs","583"),routes:[{path:"/docs",component:d("/docs","cfc"),routes:[{path:"/docs/build-your-own-theme",component:d("/docs/build-your-own-theme","881"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/dynamic-slides",component:d("/docs/category/dynamic-slides","fbb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/external-tools",component:d("/docs/category/external-tools","333"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/progress",component:d("/docs/category/progress","eaa"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/themes",component:d("/docs/category/themes","389"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/utilities",component:d("/docs/category/utilities","9d3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/changelog",component:d("/docs/changelog","fe5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/dynamic/complex",component:d("/docs/dynamic/complex","465"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/dynamic/cover",component:d("/docs/dynamic/cover","212"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/dynamic/equation",component:d("/docs/dynamic/equation","ca7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/dynamic/handout",component:d("/docs/dynamic/handout","62a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/dynamic/simple",component:d("/docs/dynamic/simple","e64"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/external/pdfpc",component:d("/docs/external/pdfpc","17a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/external/typst-preview",component:d("/docs/external/typst-preview","17c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro",component:d("/docs/intro","aed"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/layout",component:d("/docs/layout","666"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/progress/counters",component:d("/docs/progress/counters","cb6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/progress/sections",component:d("/docs/progress/sections","803"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/start",component:d("/docs/start","23e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/style",component:d("/docs/style","4ca"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/themes/dewdrop",component:d("/docs/themes/dewdrop","b37"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/themes/metropolis",component:d("/docs/themes/metropolis","dcf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/themes/simple",component:d("/docs/themes/simple","529"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/utilities/fit-to",component:d("/docs/utilities/fit-to","b79"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/utilities/oop",component:d("/docs/utilities/oop","cb6"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"/",component:d("/","dbc"),exact:!0},{path:"*",component:d("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>i});var r=n(7294),o=n(5893);const a=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},7221:(e,t,n)=>{"use strict";var r=n(7294),o=n(745),a=n(3727),i=n(405),l=n(412);const s=[n(2497),n(3310),n(8320),n(2295)];var u=n(723),c=n(6550),d=n(8790),p=n(5893);function f(e){let{children:t}=e;return(0,p.jsx)(p.Fragment,{children:t})}var m=n(5742),g=n(2263),h=n(4996),y=n(6668),b=n(1944),v=n(4711),w=n(9727),k=n(3320),x=n(8780),S=n(197);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,g.Z)(),r=(0,v.l)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,p.jsxs)(m.Z,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,p.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,p.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function C(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.Z)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,g.Z)(),{pathname:r}=(0,c.TH)();return e+(0,x.applyTrailingSlash)((0,h.Z)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:r;return(0,p.jsxs)(m.Z,{children:[(0,p.jsx)("meta",{property:"og:url",content:o}),(0,p.jsx)("link",{rel:"canonical",href:o})]})}function _(){const{i18n:{currentLocale:e}}=(0,g.Z)(),{metadata:t,image:n}=(0,y.L)();return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(m.Z,{children:[(0,p.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,p.jsx)("body",{className:w.h})]}),n&&(0,p.jsx)(b.d,{image:n}),(0,p.jsx)(C,{}),(0,p.jsx)(E,{}),(0,p.jsx)(S.Z,{tag:k.HX,locale:e}),(0,p.jsx)(m.Z,{children:t.map(((e,t)=>(0,p.jsx)("meta",{...e},t)))})]})}const T=new Map;function j(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var A=n(8934),L=n(8940),N=n(469);function R(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const P=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,N.Z)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),R("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function O(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class D extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?R("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=R("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),O(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,p.jsx)(P,{previousLocation:this.previousLocation,location:t,children:(0,p.jsx)(c.AW,{location:t,render:()=>e})})}}const I=D,F="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",z="__docusaurus-base-url-issue-banner-suggestion-container";function B(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${F}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Y=n(9670);const K=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!K.has(e))(e))return!1;K.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(W).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Y.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Q(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),O(e))},te=Object.freeze(ee),ne=Boolean(!0);if(l.Z.canUseDOM){window.docusaurus=te;const e=document.getElementById("__docusaurus"),t=(0,p.jsx)(i.B6,{children:(0,p.jsx)(a.VK,{children:(0,p.jsx)(V,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},l=()=>{if(ne)r.startTransition((()=>{o.hydrateRoot(e,t,{onRecoverableError:n})}));else{const a=o.createRoot(e,{onRecoverableError:n});r.startTransition((()=>{a.render(t)}))}};O(window.location.pathname).then(l)}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>d,M:()=>p});var r=n(7294),o=n(6809);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"intro","docs":[{"id":"build-your-own-theme","path":"/docs/build-your-own-theme","sidebar":"tutorialSidebar"},{"id":"changelog","path":"/docs/changelog","sidebar":"tutorialSidebar"},{"id":"dynamic/complex","path":"/docs/dynamic/complex","sidebar":"tutorialSidebar"},{"id":"dynamic/cover","path":"/docs/dynamic/cover","sidebar":"tutorialSidebar"},{"id":"dynamic/equation","path":"/docs/dynamic/equation","sidebar":"tutorialSidebar"},{"id":"dynamic/handout","path":"/docs/dynamic/handout","sidebar":"tutorialSidebar"},{"id":"dynamic/simple","path":"/docs/dynamic/simple","sidebar":"tutorialSidebar"},{"id":"external/pdfpc","path":"/docs/external/pdfpc","sidebar":"tutorialSidebar"},{"id":"external/typst-preview","path":"/docs/external/typst-preview","sidebar":"tutorialSidebar"},{"id":"intro","path":"/docs/intro","sidebar":"tutorialSidebar"},{"id":"layout","path":"/docs/layout","sidebar":"tutorialSidebar"},{"id":"progress/counters","path":"/docs/progress/counters","sidebar":"tutorialSidebar"},{"id":"progress/sections","path":"/docs/progress/sections","sidebar":"tutorialSidebar"},{"id":"start","path":"/docs/start","sidebar":"tutorialSidebar"},{"id":"style","path":"/docs/style","sidebar":"tutorialSidebar"},{"id":"themes/dewdrop","path":"/docs/themes/dewdrop","sidebar":"tutorialSidebar"},{"id":"themes/metropolis","path":"/docs/themes/metropolis","sidebar":"tutorialSidebar"},{"id":"themes/simple","path":"/docs/themes/simple","sidebar":"tutorialSidebar"},{"id":"utilities/fit-to","path":"/docs/utilities/fit-to","sidebar":"tutorialSidebar"},{"id":"utilities/oop","path":"/docs/utilities/oop","sidebar":"tutorialSidebar"},{"id":"/category/dynamic-slides","path":"/docs/category/dynamic-slides","sidebar":"tutorialSidebar"},{"id":"/category/themes","path":"/docs/category/themes","sidebar":"tutorialSidebar"},{"id":"/category/progress","path":"/docs/category/progress","sidebar":"tutorialSidebar"},{"id":"/category/utilities","path":"/docs/category/utilities","sidebar":"tutorialSidebar"},{"id":"/category/external-tools","path":"/docs/category/external-tools","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/intro","label":"intro"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en","zh"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"},"zh":{"label":"\u4e2d\u6587","direction":"ltr","htmlLang":"zh","calendar":"gregory","path":"zh"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"3.1.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.1.0"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.1.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.1.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.1.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.1.0"}}}');var u=n(5893);const c={siteConfig:o.default,siteMetadata:s,globalData:a,i18n:i,codeTranslations:l},d=r.createContext(c);function p(e){let{children:t}=e;return(0,u.jsx)(d.Provider,{value:c,children:t})}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(412),a=n(5742),i=n(8780),l=n(6040),s=n(5893);function u(e){let{error:t,tryAgain:n}=e;return(0,s.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,s.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,s.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,s.jsx)(c,{error:t})]})}function c(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,s.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function d(e){let{error:t,tryAgain:n}=e;return(0,s.jsxs)(f,{fallback:()=>(0,s.jsx)(u,{error:t,tryAgain:n}),children:[(0,s.jsx)(a.Z,{children:(0,s.jsx)("title",{children:"Page Error"})}),(0,s.jsx)(l.Z,{children:(0,s.jsx)(u,{error:t,tryAgain:n})})]})}const p=e=>(0,s.jsx)(d,{...e});class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??p)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(7294);var r=n(405),o=n(5893);function a(e){return(0,o.jsx)(r.ql,{...e})}},3692:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(3727),a=n(8780),i=n(2263),l=n(3919),s=n(412),u=n(8138),c=n(4996),d=n(5893);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":h,autoAddBaseUrl:y=!0,...b}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,i.Z)(),{withBaseUrl:k}=(0,c.C)(),x=(0,u.Z)(),S=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>S.current));const E=p||f;const C=(0,l.Z)(E),_=E?.replace("pathname://","");let T=void 0!==_?(j=_,y&&(e=>e.startsWith("/"))(j)?k(j):j):void 0;var j;T&&C&&(T=(0,a.applyTrailingSlash)(T,{trailingSlash:v,baseUrl:w}));const A=(0,r.useRef)(!1),L=n?o.OL:o.rU,N=s.Z.canUseIntersectionObserver,R=(0,r.useRef)(),P=()=>{A.current||null==T||(window.docusaurus.preload(T),A.current=!0)};(0,r.useEffect)((()=>(!N&&C&&null!=T&&window.docusaurus.prefetch(T),()=>{N&&R.current&&R.current.disconnect()})),[R,T,N,C]);const O=T?.startsWith("#")??!1,D=!T||!C||O;return D||h||x.collectLink(T),D?(0,d.jsx)("a",{ref:S,href:T,...E&&!C&&{target:"_blank",rel:"noopener noreferrer"},...b}):(0,d.jsx)(L,{...b,onMouseEnter:P,onTouchStart:P,innerRef:e=>{S.current=e,N&&e&&C&&(R.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(R.current.unobserve(e),R.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),R.current.observe(e))},to:T,...n&&{isActive:g,activeClassName:m}})}const f=r.forwardRef(p)},1875:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=()=>null},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u,I:()=>s});var r=n(7294),o=n(5893);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(7529);function l(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function s(e,t){let{message:n,id:r}=e;return a(l({message:n,id:r}),t)}function u(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const i=l({message:t,id:n});return(0,o.jsx)(o.Fragment,{children:a(i,r)})}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),o=n(2263),a=n(3919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},8138:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7294);n(5893);const o=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,r.useContext)(o);function i(){return a()}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8940);function a(){return(0,r.useContext)(o._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8934);function a(){return(0,r.useContext)(o._)}},469:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const o=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const l=o?`${o}.${a}`:a;r(i)?e(i,l):t[l]=i}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>i});var r=n(7294),o=n(5893);const a=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(a),l=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,o.jsx)(a.Provider,{value:l,children:t})}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>g,gA:()=>p,_r:()=>c,Jo:()=>h,zh:()=>d,yW:()=>m,gB:()=>f});var r=n(6550),o=n(2263),a=n(9935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const u={},c=()=>i("docusaurus-plugin-content-docs")??u,d=e=>function(e,t,n){void 0===t&&(t=a.m),void 0===n&&(n={});const r=i(e),o=r?.[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0});function p(e){void 0===e&&(e={});const t=c(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function f(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function g(e){const t=d(e),{pathname:n}=(0,r.TH)();return s(t,n)}function h(e){const t=d(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(4865),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(2573),o=n(6809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(6854),n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.p1)},2503:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});n(7294);var r=n(512),o=n(5999),a=n(6668),i=n(3692),l=n(8138);const s={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var u=n(5893);function c(e){let{as:t,id:n,...c}=e;const d=(0,l.Z)(),{navbar:{hideOnScroll:p}}=(0,a.L)();if("h1"===t||!n)return(0,u.jsx)(t,{...c,id:void 0});d.collectAnchor(n);const f=(0,o.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof c.children?c.children:n});return(0,u.jsxs)(t,{...c,className:(0,r.Z)("anchor",p?s.anchorWithHideOnScrollNavbar:s.anchorWithStickyNavbar,c.className),id:n,children:[c.children,(0,u.jsx)(i.Z,{className:"hash-link",to:`#${n}`,"aria-label":f,title:f,children:"\u200b"})]})}},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(7294);const r={iconExternalLink:"iconExternalLink_nPIU"};var o=n(5893);function a(e){let{width:t=13.5,height:n=13.5}=e;return(0,o.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,o.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},6040:(e,t,n)=>{"use strict";n.d(t,{Z:()=>ft});var r=n(7294),o=n(512),a=n(4763),i=n(1944),l=n(6550),s=n(5999),u=n(5936),c=n(5893);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,l.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,u.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,s.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){const t=e.children??m,{containerRef:n,onClick:r}=f();return(0,c.jsx)("div",{ref:n,role:"region","aria-label":m,children:(0,c.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var h=n(5281),y=n(9727);const b={skipToContent:"skipToContent_fXgn"};function v(){return(0,c.jsx)(g,{className:b.skipToContent})}var w=n(6668),k=n(9689);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:o=1.2,className:a,...i}=e;return(0,c.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,c.jsx)("g",{stroke:r,strokeWidth:o,children:(0,c.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function E(e){return(0,c.jsx)("button",{type:"button","aria-label":(0,s.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.Z)("clean-btn close",S.closeButton,e.className),children:(0,c.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const C={content:"content_knG7"};function _(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return(0,c.jsx)("div",{...e,className:(0,o.Z)(C.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function j(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,k.nT)();if(!t)return null;const{backgroundColor:r,textColor:o,isCloseable:a}=e;return(0,c.jsxs)("div",{className:T.announcementBar,style:{backgroundColor:r,color:o},role:"banner",children:[a&&(0,c.jsx)("div",{className:T.announcementBarPlaceholder}),(0,c.jsx)(_,{className:T.announcementBarContent}),a&&(0,c.jsx)(E,{onClick:n,className:T.announcementBarClose})]})}var A=n(2961),L=n(2466);var N=n(902),R=n(3102);const P=r.createContext(null);function O(e){let{children:t}=e;const n=function(){const e=(0,A.e)(),t=(0,R.HY)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,N.D9)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return(0,c.jsx)(P.Provider,{value:n,children:t})}function D(e){if(e.component){const t=e.component;return(0,c.jsx)(t,{...e.props})}}function I(){const e=(0,r.useContext)(P);if(!e)throw new N.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,R.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:D(a)})),[o,a,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:a}=I();return(0,c.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,c.jsxs)("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a}),children:[(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var M=n(2949),z=n(2389);function B(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function $(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function q(e){let{className:t,buttonClassName:n,value:r,onChange:a}=e;const i=(0,z.Z)(),l=(0,s.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,s.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,s.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,c.jsx)("div",{className:(0,o.Z)(U.toggle,t),children:(0,c.jsxs)("button",{className:(0,o.Z)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>a("dark"===r?"light":"dark"),disabled:!i,title:l,"aria-label":l,"aria-live":"polite",children:[(0,c.jsx)(B,{className:(0,o.Z)(U.toggleIcon,U.lightToggleIcon)}),(0,c.jsx)($,{className:(0,o.Z)(U.toggleIcon,U.darkToggleIcon)})]})})}const H=r.memo(q),Z={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function G(e){let{className:t}=e;const n=(0,w.L)().navbar.style,r=(0,w.L)().colorMode.disableSwitch,{colorMode:o,setColorMode:a}=(0,M.I)();return r?null:(0,c.jsx)(H,{className:t,buttonClassName:"dark"===n?Z.darkNavbarColorModeToggle:void 0,value:o,onChange:a})}var V=n(1327);function W(){return(0,c.jsx)(V.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Q(){const e=(0,A.e)();return(0,c.jsx)("button",{type:"button","aria-label":(0,s.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,c.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function Y(){return(0,c.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,c.jsx)(W,{}),(0,c.jsx)(G,{className:"margin-right--md"}),(0,c.jsx)(Q,{})]})}var K=n(3692),X=n(4996),J=n(3919);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(9471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:o,label:a,html:i,isDropdownLink:l,prependBaseUrlToHref:s,...u}=e;const d=(0,X.Z)(r),p=(0,X.Z)(t),f=(0,X.Z)(o,{forcePrependBaseUrl:!0}),m=a&&o&&!(0,J.Z)(o),g=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,c.jsxs)(c.Fragment,{children:[a,m&&(0,c.jsx)(te.Z,{...l&&{width:12,height:12}})]})};return o?(0,c.jsx)(K.Z,{href:s?f:o,...u,...g}):(0,c.jsx)(K.Z,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},...u,...g})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const a=(0,c.jsx)(ne,{className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,c.jsx)("li",{children:a}):a}function oe(e){let{className:t,isDropdownItem:n,...r}=e;return(0,c.jsx)("li",{className:"menu__list-item",children:(0,c.jsx)(ne,{className:(0,o.Z)("menu__link",t),...r})})}function ae(e){let{mobile:t=!1,position:n,...r}=e;const o=t?oe:re;return(0,c.jsx)(o,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(6043),le=n(8596),se=n(2263);const ue={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ce(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:a,onClick:i,...l}=e;const s=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{s.current&&!s.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[s]),(0,c.jsxs)("div",{ref:s,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u}),children:[(0,c.jsx)(ne,{"aria-haspopup":"true","aria-expanded":u,role:"button",href:l.to?void 0:"#",className:(0,o.Z)("navbar__link",a),...l,onClick:l.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))},children:l.children??l.label}),(0,c.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(Ce,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){let{items:t,className:n,position:a,onClick:i,...s}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,l.TH)();return t.replace(e,"/")}(),d=ce(t,u),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[u,d,m]),(0,c.jsxs)("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,c.jsx)(ne,{role:"button",className:(0,o.Z)(ue.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...s,onClick:e=>{e.preventDefault(),f()},children:s.children??s.label}),(0,c.jsx)(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(Ce,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?pe:de;return(0,c.jsx)(r,{...n})}var me=n(4711);function ge(e){let{width:t=20,height:n=20,...r}=e;return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,c.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const he="iconLanguage_nlXk";var ye=n(1875);const be={navbarSearchContainer:"navbarSearchContainer_Bca1"};function ve(e){let{children:t,className:n}=e;return(0,c.jsx)("div",{className:(0,o.Z)(n,be.navbarSearchContainer),children:t})}var we=n(143),ke=n(2802);var xe=n(373);const Se=e=>e.docs.find((t=>t.id===e.mainDocId));const Ee={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:o="",...a}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:d}}=(0,se.Z)(),p=(0,me.l)(),{search:f,hash:m}=(0,l.TH)(),g=[...n,...u.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}${o}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],h=t?(0,s.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,c.jsx)(fe,{...a,mobile:t,label:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(ge,{className:he}),h]}),items:g})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,c.jsx)(ve,{className:n,children:(0,c.jsx)(ye.Z,{})})},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:a=!1}=e;const i=a?"li":"div";return(0,c.jsx)(i,{className:(0,o.Z)({navbar__item:!r&&!a,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,we.Iw)(r),i=(0,ke.vY)(t,r),l=a?.path===i?.path;return null===i||i.unlisted&&!l?null:(0,c.jsx)(ae,{exact:!0,...o,isActive:()=>l||!!a?.sidebar&&a.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,we.Iw)(r),i=(0,ke.oz)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,c.jsx)(ae,{exact:!0,...o,isActive:()=>a?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...o}=e;const a=(0,ke.lO)(r)[0],i=t??a.label,l=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return(0,c.jsx)(ae,{...o,label:i,to:l})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:o,dropdownItemsAfter:a,...i}=e;const{search:u,hash:d}=(0,l.TH)(),p=(0,we.Iw)(n),f=(0,we.gB)(n),{savePreferredVersionName:m}=(0,xe.J)(n),g=[...o,...f.map((e=>{const t=p.alternateDocVersions[e.name]??Se(e);return{label:e.label,to:`${t.path}${u}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>m(e.name)}})),...a],h=(0,ke.lO)(n)[0],y=t&&g.length>1?(0,s.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):h.label,b=t&&g.length>1?void 0:Se(h).path;return g.length<=1?(0,c.jsx)(ae,{...i,mobile:t,label:y,to:b,isActive:r?()=>!1:void 0}):(0,c.jsx)(fe,{...i,mobile:t,label:y,to:b,items:g,isActive:r?()=>!1:void 0})}};function Ce(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Ee[r];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,c.jsx)(o,{...n})}function _e(){const e=(0,A.e)(),t=(0,w.L)().navbar.items;return(0,c.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(Ce,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function Te(e){return(0,c.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,c.jsx)(s.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function je(){const e=0===(0,w.L)().navbar.items.length,t=I();return(0,c.jsxs)(c.Fragment,{children:[!e&&(0,c.jsx)(Te,{onClick:()=>t.hide()}),t.content]})}function Ae(){const e=(0,A.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,c.jsx)(F,{header:(0,c.jsx)(Y,{}),primaryMenu:(0,c.jsx)(_e,{}),secondaryMenu:(0,c.jsx)(je,{})}):null}const Le={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ne(e){return(0,c.jsx)("div",{role:"presentation",...e,className:(0,o.Z)("navbar-sidebar__backdrop",e.className)})}function Re(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.L)(),i=(0,A.e)(),{navbarRef:l,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,L.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+u{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,c.jsxs)("nav",{ref:l,"aria-label":(0,s.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[Le.navbarHideable,!d&&Le.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown}),children:[t,(0,c.jsx)(Ne,{onClick:i.toggle}),(0,c.jsx)(Ae,{})]})}var Pe=n(8780);const Oe={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function De(e){return(0,c.jsx)("button",{type:"button",...e,children:(0,c.jsx)(s.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function Ie(e){let{error:t}=e;const n=(0,Pe.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{className:Oe.errorBoundaryError,children:n})}class Fe extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Me="right";function ze(e){let{width:t=30,height:n=30,className:r,...o}=e;return(0,c.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...o,children:(0,c.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function Be(){const{toggle:e,shown:t}=(0,A.e)();return(0,c.jsx)("button",{onClick:e,"aria-label":(0,s.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,c.jsx)(ze,{})})}const $e={colorModeToggle:"colorModeToggle_DEke"};function Ue(e){let{items:t}=e;return(0,c.jsx)(c.Fragment,{children:t.map(((e,t)=>(0,c.jsx)(Fe,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,c.jsx)(Ce,{...e})},t)))})}function qe(e){let{left:t,right:n}=e;return(0,c.jsxs)("div",{className:"navbar__inner",children:[(0,c.jsx)("div",{className:"navbar__items",children:t}),(0,c.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function He(){const e=(0,A.e)(),t=(0,w.L)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Me)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return(0,c.jsx)(qe,{left:(0,c.jsxs)(c.Fragment,{children:[!e.disabled&&(0,c.jsx)(Be,{}),(0,c.jsx)(W,{}),(0,c.jsx)(Ue,{items:n})]}),right:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(Ue,{items:r}),(0,c.jsx)(G,{className:$e.colorModeToggle}),!o&&(0,c.jsx)(ve,{children:(0,c.jsx)(ye.Z,{})})]})})}function Ze(){return(0,c.jsx)(Re,{children:(0,c.jsx)(He,{})})}function Ge(e){let{item:t}=e;const{to:n,href:r,label:o,prependBaseUrlToHref:a,...i}=t,l=(0,X.Z)(n),s=(0,X.Z)(r,{forcePrependBaseUrl:!0});return(0,c.jsxs)(K.Z,{className:"footer__link-item",...r?{href:a?s:r}:{to:l},...i,children:[o,r&&!(0,J.Z)(r)&&(0,c.jsx)(te.Z,{})]})}function Ve(e){let{item:t}=e;return t.html?(0,c.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)("li",{className:"footer__item",children:(0,c.jsx)(Ge,{item:t})},t.href??t.to)}function We(e){let{column:t}=e;return(0,c.jsxs)("div",{className:"col footer__col",children:[(0,c.jsx)("div",{className:"footer__title",children:t.title}),(0,c.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,c.jsx)(Ve,{item:e},t)))})]})}function Qe(e){let{columns:t}=e;return(0,c.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,c.jsx)(We,{column:e},t)))})}function Ye(){return(0,c.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function Ke(e){let{item:t}=e;return t.html?(0,c.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)(Ge,{item:t})}function Xe(e){let{links:t}=e;return(0,c.jsx)("div",{className:"footer__links text--center",children:(0,c.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,c.jsxs)(r.Fragment,{children:[(0,c.jsx)(Ke,{item:e}),t.length!==n+1&&(0,c.jsx)(Ye,{})]},n)))})})}function Je(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,c.jsx)(Qe,{columns:t}):(0,c.jsx)(Xe,{links:t})}var et=n(9965);const tt={footerLogoLink:"footerLogoLink_BH7S"};function nt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,c.jsx)(et.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function rt(e){let{logo:t}=e;return t.href?(0,c.jsx)(K.Z,{href:t.href,className:tt.footerLogoLink,target:t.target,children:(0,c.jsx)(nt,{logo:t})}):(0,c.jsx)(nt,{logo:t})}function ot(e){let{copyright:t}=e;return(0,c.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function at(e){let{style:t,links:n,logo:r,copyright:a}=e;return(0,c.jsx)("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t}),children:(0,c.jsxs)("div",{className:"container container-fluid",children:[n,(r||a)&&(0,c.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,c.jsx)("div",{className:"margin-bottom--sm",children:r}),a]})]})})}function it(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return(0,c.jsx)(at,{style:o,links:n&&n.length>0&&(0,c.jsx)(Je,{links:n}),logo:r&&(0,c.jsx)(rt,{logo:r}),copyright:t&&(0,c.jsx)(ot,{copyright:t})})}const lt=r.memo(it),st=(0,N.Qc)([M.S,k.pl,L.OC,xe.L5,i.VC,function(e){let{children:t}=e;return(0,c.jsx)(R.n2,{children:(0,c.jsx)(A.M,{children:(0,c.jsx)(O,{children:t})})})}]);function ut(e){let{children:t}=e;return(0,c.jsx)(st,{children:t})}var ct=n(2503);function dt(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)("main",{className:"container margin-vert--xl",children:(0,c.jsx)("div",{className:"row",children:(0,c.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,c.jsx)(ct.Z,{as:"h1",className:"hero__title",children:(0,c.jsx)(s.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,c.jsx)("div",{className:"margin-vert--lg",children:(0,c.jsx)(De,{onClick:n,className:"button button--primary shadow--lw"})}),(0,c.jsx)("hr",{}),(0,c.jsx)("div",{className:"margin-vert--md",children:(0,c.jsx)(Ie,{error:t})})]})})})}const pt={mainWrapper:"mainWrapper_z2l0"};function ft(e){const{children:t,noFooter:n,wrapperClassName:r,title:l,description:s}=e;return(0,y.t)(),(0,c.jsxs)(ut,{children:[(0,c.jsx)(i.d,{title:l,description:s}),(0,c.jsx)(v,{}),(0,c.jsx)(j,{}),(0,c.jsx)(Ze,{}),(0,c.jsx)("div",{id:d,className:(0,o.Z)(h.k.wrapper.main,pt.mainWrapper,r),children:(0,c.jsx)(a.Z,{fallback:e=>(0,c.jsx)(dt,{...e}),children:t})}),!n&&(0,c.jsx)(lt,{})]})}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});n(7294);var r=n(3692),o=n(4996),a=n(2263),i=n(6668),l=n(9965),s=n(5893);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,o.Z)(t.src),dark:(0,o.Z)(t.srcDark||t.src)},i=(0,s.jsx)(l.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,s.jsx)("div",{className:r,children:i}):i}function c(e){const{siteConfig:{title:t}}=(0,a.Z)(),{navbar:{title:n,logo:l}}=(0,i.L)(),{imageClassName:c,titleClassName:d,...p}=e,f=(0,o.Z)(l?.href||"/"),m=n?"":t,g=l?.alt??m;return(0,s.jsxs)(r.Z,{to:f,...p,...l?.target&&{target:l.target},children:[l&&(0,s.jsx)(u,{logo:l,alt:g,imageClassName:c}),null!=n&&(0,s.jsx)("b",{className:d,children:n})]})}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(7294);var r=n(5742),o=n(5893);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return(0,o.jsxs)(r.Z,{children:[t&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,o.jsx)("meta",{name:"docusaurus_version",content:n}),a&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:a}),i&&(0,o.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,o.jsx)("meta",{name:"docsearch:version",content:n}),a&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:a})]})}},9965:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(7294),o=n(512),a=n(2389),i=n(2949);const l={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var s=n(5893);function u(e){let{className:t,children:n}=e;const u=(0,a.Z)(),{colorMode:c}=(0,i.I)();return(0,s.jsx)(s.Fragment,{children:(u?"dark"===c?["dark"]:["light"]:["light","dark"]).map((e=>{const a=n({theme:e,className:(0,o.Z)(t,l.themedComponent,l[`themedComponent--${e}`])});return(0,s.jsx)(r.Fragment,{children:a},e)}))})}function c(e){const{sources:t,className:n,alt:r,...o}=e;return(0,s.jsx)(u,{className:n,children:e=>{let{theme:n,className:a}=e;return(0,s.jsx)("img",{src:t[n],alt:r,className:a,...o})}})}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>u,z:()=>y});var r=n(7294),o=n(412),a=n(469),i=n(1442),l=n(5893);const s="ease-in-out";function u(e){let{initialState:t}=e;const[n,o]=(0,r.useState)(t??!1),a=(0,r.useCallback)((()=>{o((e=>!e))}),[]);return{collapsed:n,setCollapsed:o,toggleCollapsed:a}}const c={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?c:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:o}=e;const a=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=o?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${o?.easing??s}`,height:`${t}px`}}function l(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return p(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(l(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{l()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,o])}function m(e){if(!o.Z.canUseDOM)return e?c:d}function g(e){let{as:t="div",collapsed:n,children:o,animation:a,onCollapseTransitionEnd:i,className:s,disableSSRStyle:u}=e;const c=(0,r.useRef)(null);return f({collapsibleRef:c,collapsed:n,animation:a}),(0,l.jsx)(t,{ref:c,style:u?void 0:m(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(c.current,n),i?.(n))},className:s,children:o})}function h(e){let{collapsed:t,...n}=e;const[o,i]=(0,r.useState)(!t),[s,u]=(0,r.useState)(t);return(0,a.Z)((()=>{t||i(!0)}),[t]),(0,a.Z)((()=>{o&&u(t)}),[o,t]),o?(0,l.jsx)(g,{...n,collapsed:s}):null}function y(e){let{lazy:t,...n}=e;const r=t?h:g;return(0,l.jsx)(r,{...n})}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>g,pl:()=>m});var r=n(7294),o=n(2389),a=n(12),i=n(902),l=n(6668),s=n(5893);const u=(0,a.WA)("docusaurus.announcement.dismiss"),c=(0,a.WA)("docusaurus.announcement.id"),d=()=>"true"===u.get(),p=e=>u.set(String(e)),f=r.createContext(null);function m(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{a(d())}),[]);const i=(0,r.useCallback)((()=>{p(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&p(!1),!r&&d()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,s.jsx)(f.Provider,{value:n,children:t})}function g(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>y,S:()=>h});var r=n(7294),o=n(412),a=n(902),i=n(12),l=n(6668),s=n(5893);const u=r.createContext(void 0),c="theme",d=(0,i.WA)(c),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,m=e=>o.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),g=e=>{d.set(f(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[o,a]=(0,r.useState)(m(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&g(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=d.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[o,i])}();return(0,s.jsx)(u.Provider,{value:n,children:t})}function y(){const e=(0,r.useContext)(u);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>y});var r=n(7294),o=n(143),a=n(9935),i=n(6668),l=n(2802),s=n(902),u=n(12),c=n(5893);const d=e=>`docs-preferred-version-${e}`,p={save:(e,t,n)=>{(0,u.WA)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.WA)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.WA)(d(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const m=r.createContext(null);function g(){const e=(0,o._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=p.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){p.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=g();return(0,c.jsx)(m.Provider,{value:n,children:t})}function y(e){let{children:t}=e;return l.cE?(0,c.jsx)(h,{children:t}):(0,c.jsx)(c.Fragment,{children:t})}function b(){const e=(0,r.useContext)(m);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=a.m);const t=(0,o.zh)(e),[n,i]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>u,b:()=>s});var r=n(7294),o=n(902),a=n(5893);const i=Symbol("EmptyContext"),l=r.createContext(i);function s(e){let{children:t,name:n,items:o}=e;const i=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return(0,a.jsx)(l.Provider,{value:i,children:t})}function u(){const e=(0,r.useContext)(l);if(e===i)throw new o.i6("DocsSidebarProvider");return e}},4477:(e,t,n)=>{"use strict";n.d(t,{E:()=>s,q:()=>l});var r=n(7294),o=n(902),a=n(5893);const i=r.createContext(null);function l(e){let{children:t,version:n}=e;return(0,a.jsx)(i.Provider,{value:n,children:t})}function s(){const e=(0,r.useContext)(i);if(null===e)throw new o.i6("DocsVersionProvider");return e}},2961:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>m});var r=n(7294),o=n(3102),a=n(7524),i=n(6550),l=n(902);function s(e){!function(e){const t=(0,i.k6)(),n=(0,l.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var u=n(6668),c=n(5893);const d=r.createContext(void 0);function p(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,u.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[i,l]=(0,r.useState)(!1);s((()=>{if(i)return l(!1),!1}));const c=(0,r.useCallback)((()=>{l((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:i})),[e,n,c,i])}function f(e){let{children:t}=e;const n=p();return(0,c.jsx)(d.Provider,{value:n,children:t})}function m(){const e=r.useContext(d);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>s,Zo:()=>u,n2:()=>l});var r=n(7294),o=n(902),a=n(5893);const i=r.createContext(null);function l(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,a.jsx)(i.Provider,{value:n,children:t})}function s(){const e=(0,r.useContext)(i);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function u(e){let{component:t,props:n}=e;const a=(0,r.useContext)(i);if(!a)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,l]=a,s=(0,o.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(7294);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>l});var r=n(7294),o=n(412);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,l]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){l(function(e){if(!o.Z.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},1442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},2802:(e,t,n)=>{"use strict";n.d(t,{MN:()=>T,LM:()=>m,_F:()=>b,cE:()=>p,jA:()=>g,xz:()=>f,SN:()=>_,lO:()=>S,vY:()=>C,oz:()=>E,s1:()=>x,f:()=>w});var r=n(7294),o=n(6550),a=n(8790),i=n(143),l=n(373),s=n(4477),u=n(1116);function c(e){return Array.from(new Set(e))}var d=n(8596);const p=!!i._r;function f(e){const t=(0,s.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function m(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=m(t);if(e)return e}}(e):void 0:e.href}function g(){const{pathname:e}=(0,o.TH)(),t=(0,u.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=k({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const h=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),y=(e,t)=>e.some((e=>b(e,t)));function b(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||y(e.items,t))}function v(e,t){switch(e.type){case"category":return b(e,t)||e.items.some((e=>v(e,t)));case"link":return!e.unlisted||b(e,t);default:return!0}}function w(e,t){return(0,r.useMemo)((()=>e.filter((e=>v(e,t)))),[e,t])}function k(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,d.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,d.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function x(){const e=(0,u.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?k({sidebarItems:e.items,pathname:t}):null}function S(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)((()=>c([t,n,o].filter(Boolean))),[t,n,o])}function E(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function C(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${c(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function _(e){let{route:t}=e;const n=(0,o.TH)(),r=(0,s.E)(),i=t.routes,l=i.find((e=>(0,o.LX)(n.pathname,e)));if(!l)return null;const u=l.sidebar,c=u?r.docsSidebars[u]:void 0;return{docElement:(0,a.H)(i),sidebarName:u,sidebarItems:c}}function T(e){return e.filter((e=>!("category"===e.type||"link"===e.type)||!!m(e)))}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>d,VC:()=>m});var r=n(7294),o=n(512),a=n(5742),i=n(226);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),u=n(2263);var c=n(5893);function d(e){let{title:t,description:n,keywords:r,image:o,children:i}=e;const l=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),p=o?d(o,{absolute:!0}):void 0;return(0,c.jsxs)(a.Z,{children:[t&&(0,c.jsx)("title",{children:l}),t&&(0,c.jsx)("meta",{property:"og:title",content:l}),n&&(0,c.jsx)("meta",{name:"description",content:n}),n&&(0,c.jsx)("meta",{property:"og:description",content:n}),r&&(0,c.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,c.jsx)("meta",{property:"og:image",content:p}),p&&(0,c.jsx)("meta",{name:"twitter:image",content:p}),i]})}const p=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(p),l=(0,o.Z)(i,t);return(0,c.jsxs)(p.Provider,{value:l,children:[(0,c.jsx)(a.Z,{children:(0,c.jsx)("html",{className:l})}),n]})}function m(e){let{children:t}=e;const n=l(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${n.plugin.id}`;return(0,c.jsx)(f,{className:(0,o.Z)(r,a),children:t})}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>l,Qc:()=>c,Ql:()=>u,i6:()=>s,zX:()=>i});var r=n(7294),o=n(469),a=n(5893);function i(e){const t=(0,r.useRef)(e);return(0,o.Z)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function l(e){const t=(0,r.useRef)();return(0,o.Z)((()=>{t.current=e})),t.current}class s extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function u(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return(0,a.jsx)(a.Fragment,{children:e.reduceRight(((e,t)=>(0,a.jsx)(t,{children:e})),n)})}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),o=n(723),a=n(2263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,a.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>u,RF:()=>p});var r=n(7294),o=n(412),a=n(2389),i=(n(469),n(902)),l=n(5893);const s=r.createContext(void 0);function u(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,l.jsx)(s.Provider,{value:n,children:t})}function c(){const e=(0,r.useContext)(s);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const d=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function p(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),o=(0,r.useRef)(d()),a=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,a.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&ot&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>o});n(2263);const r="default";function o(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{WA:()=>s});n(7294);const r="localStorage";function o(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function a(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function s(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=a(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),o({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),o({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(2263),o=n(6550),a=n(8780);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.Z)(),{pathname:s}=(0,o.TH)(),u=(0,a.applyTrailingSlash)(s,{trailingSlash:n,baseUrl:e}),c=l===i?e:e.replace(`/${l}/`,"/"),d=u.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${c}`:`${c}${e}/`}(n)}${d}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),o=n(6550),a=n(902);function i(e){const t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(2263);function o(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),a="/"===o||o===r?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,a)}},4143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>_,ob:()=>f,PP:()=>j,Ep:()=>p});var r=n(7462);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r=0;p--){var f=i[p];"."===f?a(i,p):".."===f?(a(i,p),d++):d&&(a(i,p),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function f(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,g(),w.location);c.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(9864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=f(n);o&&o!==m&&e(t,o,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=s(n),h=0;h{"use strict";e.exports=function(e,t,n,r,o,a,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,o,a,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function o(e,t,n){return en?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),u=a.querySelector(r.barSelector),c=r.speed,d=r.easing;return a.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){s(a,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),l=e?"-100":a(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function u(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=p(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},4779:(e,t,n)=>{var r=n(5826);e.exports=f,e.exports.parse=a,e.exports.compile=function(e,t){return l(a(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=p;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],p=n[1],f=n.index;if(l+=e.slice(i,f),i=f+d.length,p)l+=p[1];else{var m=e[i],g=n[2],h=n[3],y=n[4],b=n[5],v=n[6],w=n[7];l&&(r.push(l),l="");var k=null!=g&&null!=m&&m!==g,x="+"===v||"*"===v,S="?"===v||"*"===v,E=n[2]||c,C=y||b;r.push({name:h||a++,prefix:g||"",delimiter:E,optional:S,repeat:x,partial:k,asterisk:!!w,pattern:C?u(C):w?".*":"[^"+s(E)+"]+?"})}}return i{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(9901),o=n(9642),a=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),a.add(e)}))}i.silent=!1,e.exports=i},6854:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,l=i.length;-1!==n.code.indexOf(o=t(r,l));)++l;return i[l]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=a.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=a[o],d=n.tokenStack[c],p="string"==typeof u?u:u.content,f=t(r,c),m=p.indexOf(f);if(m>-1){++o;var g=p.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=p.substring(m+f.length),b=[];g&&b.push.apply(b,i([g])),b.push(h),y&&b.push.apply(b,i([y])),"string"==typeof u?l.splice.apply(l,[s,1].concat(b)):u.content=b}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(Prism)},6726:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6726},6500:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6500},9642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n "));var l={},s=e[r];if(s){function u(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var i in o(t,a),l[t]=!0,n[t])l[i]=!0}t(s.require,u),t(s.optional,u),t(s.modify,u)}n[r]=l,a.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,i,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var a=r[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),u=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var a=e[o];t(a&&a.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[r]||r}}(s);i=i.map(u),l=(l||[]).map(u);var c=n(i),d=n(l);i.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(c[t]=!0,e(t))}))}));for(var p,f=r(s),m=c;o(m);){for(var g in p={},m){var h=s[g];t(h&&h.modify,(function(e){e in d&&(p[e]=!0)}))}for(var y in d)if(!(y in c))for(var b in f(y))if(b in c){p[y]=!0;break}for(var v in m=p)c[v]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,o){var a=o?o.series:void 0,i=o?o.parallel:e,l={},s={};function u(e){if(e in l)return l[e];s[e]=!0;var o,c=[];for(var d in t(e))d in n&&c.push(d);if(0===c.length)o=r(e);else{var p=i(c.map((function(e){var t=u(e);return delete s[e],t})));a?o=a(p,(function(){return r(e)})):r(e)}return l[e]=o}for(var c in n)u(c);var d=[];for(var p in s)d.push(l[p]);return i(d)}(f,c,t,n)}};return w}}();e.exports=t},2703:(e,t,n)=>{"use strict";var r=n(414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),o=n(3840);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n