使用mathjax
为何要用mathjax
在书写数值计算类文章,特别是机器学习相关算法时,难免需要插入复杂的数学公式。一种是用图片在网页上展示,另外一种是使用 MathJax 来展示复杂的数学公式。它直接使用 Javascript 使用矢量字库或 SVG 文件来显示数学公式。优点是效果好,比如在 Retina 屏幕上也不会变得模糊。并且可以直接把公式写在 Markdown 文章里。
hexo支持MathJax
我是使用Typora书写markdown
文档的,它自身就支持MathJax
了,就不用特别的想办法支持MathJax
了。
最好写好的markdown
文档要hexo-next
主题渲染出来,它支持MathJax
的方法很简单,还是简单记录一下,直接在_config.yml
文件里加入以下代码段就可以了。
12345 |
# MathJax Supportmathjax: enable: true per_page: false cdn: //cdn.bootcss.com/mathjax/2.4.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML |
---|
但默认的hexo使用的markdown渲染引擎与mathjax有些冲突,建议还是换用hexo-renderer-pandoc作为markdown的渲染引擎。
安装方法也很简单:
# MathJax Support
mathjax:
enable: true
per_page: false
cdn: //cdn.bootcss.com/mathjax/2.4.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML
LaTex简明教程
先看个例子
brew install pandoc
yarn remove hexo-renderer-marked
yarn add hexo-renderer-pandoc
上面的LaTex 格式书写的数学公式经过 MathJax 展示后效果如下:
这个公式是线性回归算法里的成本函数。
规则
关于在 Markdown 书写 LaTex 数学公式有几个规则常用规则需要记住:
行内公式
行内公式使用 $
号作为公式的左右边界,如 $h(x) = theta_0 + theta_1 x$
,示例如下:
梯度递减公式:
行内公式
公式需要独立显示一行时,使用 $$
来作为公式的左右边界
常用LaTex代码
需要记住的几个常用的符号,这样书写起来会快一点
记住这几个就差不多了,完整的符号列表要看这里,倒回去看一下线性回归算法的成本函数的公式及其 LaTex 代码,对着练习个10分钟基本就可以掌握常用公式的写法了。要特别注意公式里空格和 {}
的运用规则。基本原则是,空格可加可不加,但如果会引起歧义,最好加上空格。{}
是用来组成群组的。比如写一个分式时,分母是一个复杂公式时,可以用 {}
包含起来,这样整个复杂公式都会变成分母了。
几个非常有用的资源
- 这是一篇质量很高的介绍 MathJax 的中文博客文章,需要注意的是如果是用 markdown 编写 MathJax 公式,当公式里需要两个斜杠 时要写四个斜杠 。因为 会被 markdown 转义一次。
- Github 上有个在线 Markdown MathJax 编辑器,可以在这里练习,平时写公式时也可以在这里先写好再拷贝到文章里
- 这是 LaTex 完整教程,包含完整的 LaTex 数学公式的内容,包括更高级的格式控制等
- 这是一份PDF 格式的 MathJax 支持的数学符号表,当需要书写复杂数学公式时,一些非常特殊的符号的转义字符可以从这里查到
- 别人整理出的一份技巧
好啦,这样差不多就可以写出优美的数学公式啦。
- 使用ACS和Kubernetes部署Red Hat JBoss Fuse
- 教你快速安装OpenShift容器平台3.6
- 面向开发者的Cloud Foundry
- 云数据库安全与农场和餐馆:知道来源的重要性
- 云数据库安全,农场和餐馆:知道你的来源的重要性
- NO.32 不堪重负:线程池拒绝策略
- 工厂模式进阶之Android中工厂模式源码分析
- C加加游戏编程,大神十年的绝技,正确的入门,这才叫学习
- 我们应该担心吗?人工智能现在可以通过交谈来学习新单词!
- 印度财政部:比特币是纯粹投机行为 区块链资产是“庞氏骗局”
- 法律人工智能实验室成立,法官和律师会丢饭碗吗?
- 让GridView中CheckBox列支持FireFox
- 在ASP.NET MVC中通过URL路由实现对多语言的支持
- AI加持下的假肢将会越来越聪明
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- vue列表点击切换颜色
- JVM加载过程科普
- 我没学过计算机,是怎么接了四个私活还挣了两个 iPad 的?
- Helm安装Prometheus Operator
- 【每日一题】【vue2源码学习】vue如何检测数组的变化
- JavaScript 实现输入框内容一键复制(附上 Vue 3 实现方式)
- python 迭代器/iterator与生成器/generator的区别
- CSS 实现文本超出容器范围用省略号显示(单行+多行)
- ESP8266和ROS收发消息读取模拟量控制LED亮度
- 纯 CSS 实现下拉菜单尖角图标(实心+空心)
- 3分钟短文:书接上回,Laravel数据库迁移的那些个小技巧
- 解密 Docker 挂载文件,宿主机修改后容器里文件没有修改
- SAP Spartacus的单元测试目录结构
- 突击并发编程JUC系列-并发工具 CyclicBarrier
- 详解 | Linux系统是如何实现存储并读写文件的?