#subscript #compile #github #macro #latex #moved #com

已删除 ss-dom-tree

该包是Subscript(WIP)的内部依赖

0.1.1 2019年5月23日
0.1.0 2019年5月23日

#8 in #subscript

AGPL-3.0-or-later

97KB
2.5K SLoC

已迁移至 github.com/subscript-publishing/subscript

Subscript - 使用Web技术进行出版

注意,最初Subscript指的是一个前端UI框架,但那已经废弃了,我现在将旧Subscript名称用于一个新项目。旧项目可以在这里找到 colbyn/subscript-old

Preview

Subscript是什么?

  • 如果你是一位Web开发者

    • Subscript类似于Parcel这样的Web应用程序打包器,但更适合静态内容的发布。对于那些有不同的看法的人,请参阅我的旧GitHub仓库(colbyn/school-notes),使用Parcel导致许多问题,特别是Parcel和PostHTML之间的交互不好,尤其是在嵌套的资源文件和相对路径方面。
      • 例如,模块A和B都包含模块C,其中模块C包含资源D。PostHTML以自上而下的方式处理<include>文件,因此,在将模块C内联到A和B之后 - A和B现在引用模块资源D,使用相对于模块C的文件路径...你可以想象Parcel会在这里抛出错误...根据合同,Subscript主要以自下而上的方式工作,其中首先处理模块C,然后是模块A和B。
  • 如果你来自学术界

    • Subscript类似于LaTeX,两者都是用于显示内容的标记语言。

      此外,两者默认都针对基于STEM的内容(与不支持例如数学符号的Sile排版器不同)。

      然而,Subscript基于Web技术,因此可以利用构成Web的庞大生态系统。例如,需要显示一个y=x^2的图表?只需使用一个嵌入Desmos的宏,并在其中简单地写入

      <desmos height="200px">
          <expr>y=x^2</expr>
      </desmos>
      

      或者,你需要嵌入乐谱吗?创建一个嵌入VexFlow的宏。

      此外,下标宏比LaTeX更强大,因为下标宏可以访问整个HTML树,这对于例如在指定位置包含生成目录的宏(如<toc>)非常有用。

      [†]:关于Sile及其创新的布局系统,由于Subscript基于Web技术,它可以提供适用于不同PDF分辨率的响应式网格布局。

高级TODO

  • CSS分页媒体:支持传统打印用例,或者只是渲染到PDF。这是我目前正在计划用于渲染到例如PDFs的:PagedJS

示例

请注意,您可以使用以下方式之一进行编译:

cargo run -- compile --root=example --input example/pages/**/*.html --output=example/output --trim pages

或者:

subscript compile --root=example --input example/pages/**/*.html --output=example/output --trim pages

以下文件来自./example/pages/index.html

<include src="../template/base.html">
    <h1>Hello World</h1>
    <items>
        <p>First Paragraph</p>
        <p>Second Paragraph</p>
        <li>Third Item</li>
    </items>
</include>

转换为

<html>
  <head>
    <title>Note</title>
  </head>
  <body>
    <h1>Hello World</h1>
    <ul>
      <li>
        <p>First Paragraph</p>
      </li>
      <li>
        <p>Second Paragraph</p>
      </li>
      <li>Third Item</li>
    </ul>
  </body>
</html>

数学预览

Preview

附带VS Code的语法高亮扩展。

VS-Code Preview

它将来自latex-workshop的LaTeX语法注入到<tex><texblock>HTML标签中。

对于VS-Code中的自动完成,目前,请使用editors/vscode-html-macros中的自定义数据定义。

Subscript中的多功能性是通过宏实现的(其语法类似于Web组件,但在编译时相对于运行时扩展,即宏)。

例如,要显示数学公式,您可以使用<tex>宏,要绘制y = x^2,您可以使用例如<desmos>宏,等等。此外,如果您想发布带有乐谱的内容,您可以为例如VexFlow提供一个高级接口的宏。

目前,所有支持的宏都已在核心编译器中实现。

从长远来看,我希望摆脱当前的单一架构,并以更通用的方式通过某种脚本语言支持可扩展性。为此,我计划嵌入Deno,这将提供NodeJS无法提供的多种好处(Deno是NodeJS的创造者)。

依赖项

~12MB
~223K SLoC