F 的分享 | 如何在思源中使用 KaTex 宏

本贴最后更新于 402 天前,其中的信息可能已经水流花落

思源笔记当中「设置」-「编辑器」中有一个「Katex 宏定义」的设置选项,长久以来一直被人忽略,甚至连官方文档里面都没有提到他——但实际上这个东西非常有用。

image.png

在 KaTeX 中,「宏」允许你将一个长且复杂的表达式缩写成一个简短的标识符。

他实际上就是一种字符串替换规则:首先定义一个简短的字符串(宏名),并告诉 KaTeX 当你写下这个宏名时,应该用哪个更长的字符串(通常是一个数学表达式)来替换它。

这样一来,在编写数学公式时,只需输入宏名,KaTeX 就会自动将其替换为对应的完整表达式。这使得重复输入复杂表达式变得快速且不易出错。

定义宏首先要指定一个用 \ 开头的文本,比如 \foo;然后,指定一个字符串来描述这个宏应该展开成什么,就像在一个字典或者映射表中一样。在实际使用的时候,KaTex 引擎就会用后面的替代文本来替代前面的键。

思源中支持用 Json 格式来声明宏定义,其中的键是宏的名称,值是宏的替代文本。例如下面这个例子中,当你在 KaTeX 中使用 \foo 时,它会被替换为 {x^2}

{ "\\foo": "{x^2}" }

注:之所以这里用 \\foo 而不是 \foo 是因为程序处理 json 的时候,需要转义 \ 字符。

更加复杂的案例

这里给一个更复杂一些的案例:

{ "\\aligned": "\\begin{aligned}#1\\end{aligned}", }

有了这个宏只需写 \aligned{...},并把方程组作为参数放在大括号中,就能定义一个 aligned 环境。

我们可以使用刚刚定义的 \aligned 宏来整洁地表示一个复数的极坐标和直角坐标之间的转换。

\aligned{ &z = (real, imag) = (M, \theta)\\ & M = \sqrt{real^2 + imag^2}\\ &\theta = \arctan{\left(\frac{imag}{real}\right)}\\ & real = M\cos{\theta}\\ & imag = M\sin{\theta} }

以上代码就会被展开为:

\begin{aligned} &z = (real, imag) = (M, \theta)\\ & M = \sqrt{real^2 + imag^2}\\ &\theta = \arctan{\left(\frac{imag}{real}\right)}\\ & real = M\cos{\theta}\\ & imag = M\sin{\theta} \end{aligned}

宏参数

上面的案例用到了宏参数,它用 # 后跟一个数字表示,例如 #1,#2 等。这些数字指的是宏使用时相应位置的参数。

例如,如果定义了一个宏 \foo 来表示某个带有一个参数的数学操作,就像这样:

{ "\\foo": "f(#1)" }

在这里,#1 将会被替换为在使用宏时提供的第一个参数。当你在数学表达式中写下 \foo{x} 时,KaTeX 会将其展开为 f(x)

如果定义的宏需要多个参数,你可以在定义中包含 #1,#2,#3 等,以此类推,对应使用时的第一、第二、第三个括号里面的内容。

举一个多参数宏的例子:

{ "\\binomial": "\\left(\\frac{#1}{#2}\\right)" }

在这个宏定义中,\binomial 用来创建一个二项式系数。使用 \binomial{n}{k} 时,#1 会被替换为 n,而 #2 会被替换为 k,所以它会展开为 \left(\frac{n}{k}\right)

\binomial{2}{3}
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    25909 引用 • 107376 回帖 • 1 关注
  • KaTex
    3 引用 • 11 回帖
1 操作
Frostime 在 2024-05-06 11:18:03 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 78 关注
  • 国际化

    i18n(其来源是英文单词 internationalization 的首末字符 i 和 n,18 为中间的字符数)是“国际化”的简称。对程序来说,国际化是指在不修改代码的情况下,能根据不同语言及地区显示相应的界面。

    8 引用 • 26 回帖
  • RemNote
    2 引用 • 16 回帖 • 19 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 502 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 176 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 612 关注
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 1 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 676 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    56 引用 • 85 回帖 • 1 关注
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 120 关注
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 395 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 569 关注
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    79 引用 • 431 回帖 • 1 关注
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    92 引用 • 752 回帖
  • gRpc
    11 引用 • 9 回帖 • 99 关注
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    209 引用 • 2040 回帖 • 1 关注
  • CodeMirror
    2 引用 • 17 回帖 • 167 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 7 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    10 引用 • 54 回帖 • 177 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖 • 1 关注
  • Outlook
    1 引用 • 5 回帖 • 4 关注
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    268 引用 • 666 回帖 • 1 关注
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 183 关注