Linux 中优秀的文本化编辑思想大碰撞(Markdown、LaTeX、MathJax)
这样一个标题可能不太准确,因为确实无法准确地解释什么叫“文本化编辑思想”。其实我这篇随笔主要是想探讨 Markdown、LaTeX、MathJax,有兴趣的朋友可以继续往下看,同时别忘记了顺手点个赞。
引言
大家写文章用什么工具?Windows 的记事本吗?肯定不会吧!一般人应该至少会用一个类似 Word 的“所见即所得”的可视化编辑器。理由:因为文章不仅仅只是文字嘛,它还包含有各种各样的格式,比如字体、字号、颜色、标题、列表等等。“所见即所得”编辑器提供的编辑方法确实是最朴素的编辑思想:当你想要改变某些文字的样式时,你只需要选中它,然后在各种菜单、对话框里设置它的格式即可。这种排版很美观、样式很丰富的文章,可以称之为“富文本”。
如果进行更深层次的思考,就会发现“富文本”存在很多缺点,特别是对于我们这些程序员、理工男来说更是这样。下面略举几例:
- “富文本”编辑起来太慢了,写文章时,即要考虑文章内容,又要考虑文章格式,写几段字就要点半天鼠标;
- “富文本”需要专业的编辑器来编辑和阅读,如果没有编辑器,或者编辑器不兼容,那只有欲哭无泪了;
- “富文本”往往让形式取代逻辑,文章可能从外观上看各级标题的文字大小、缩进都很正确,但是逻辑上无法指定层级关系;
- “富文本”中的格式信息太冗余了,淹没了文章的内容;
- “富文本”对计算机不友好,存储格式不透明不说,也让基于文本行比较的工具(如 diff 之类)无用武之地。
所以,优秀的思想应该是这样的:
- 文章就应该存储为纯文本的格式,用任何工具都可以阅读和编辑;
- 该纯文本的内容即要适合人类阅读,也要计算机容易理解;
- 能正确指定文章各部分的逻辑结构;
- 内容和显示分离,作者只用考虑文章的内容和逻辑结构,而文章怎么显示得好看是专业的人和工具的事。
这就是我标题中说的“文本化编辑思想”。这种思想在计算机领域由来已久,并逐渐形成一种哲学。比如互联网上广泛使用的 HTML、XML 等,就是把信息储存为纯文本,用任何工具都可以阅读和编辑,并且能正确地指定内容的逻辑结构,而浏览器和 CSS 则控制文章如何显示。但是,HTML 标签还是太多了,如果没有浏览器,完全靠人工脑补阅读起来还是太困难了。于是,就诞生了 Markdown。
在文本编辑领域还有另外一个难题,那就是数学公式(或者其它类似数学公式的东西,比如乐谱),它们显示起来是二维的,而且其中使用的很多符号标准键盘根本无法输入,使用的字体和正文也不一样。好在 Unix/Linux 世界中,它们有一个比较好的解决方法,那就是 LaTeX。当然,也有很多可视化的编辑器提供数学公式编辑的功能,比如 Word 的公式编辑器,比如 TexMacs。但是正如前文所述,从优秀的“文本化编辑思想”来思考,最好的依然是 LaTeX,因为使用 LaTeX 就是使用纯文本的方式输入数学公式,输入速度快,人和计算机都容易理解。LaTeX 的思想影响广泛,很多编辑器都支持以 LaTeX 语法输入数学公式。要在网页上显示数学公式,则非 MathJax 莫属了,它是一个 JavaScript 库,可以识别网页中的 LaTeX 格式的数学公式并将其完美显示出来。博客园的数学公式支持用的就是这个。
Markdown 的特点和工具
Markdown 的宗旨就是“易读易写”,所以用 Markdown 语法写的文档,以纯文本的格式直接阅读也是非常方便的。如果对外观的要求非常高,就可以通过相应的工具将 Markdown 文档转化成 HTML 或者 PDF。Markdown 的语法非常简单,一般情况下一个多小时就学会了。参考地址在这里:Markdown语法说明(简体中文)。
目前,我在博客园中发博客基本上就是使用博客园的 Markdown 编辑器了。博客园的 Markdown 实现目前尚不完善,比如说没有即时预览功能、没有续行为段功能、对 `\`$\` `
的解释不正确等等,但是用起来已经很舒服了,除了上传图片,基本上不用动鼠标。
为什么续行为段功能很重要?
续行为段,换一种说法就是忽略非空白行后面的换行符。这个功能很重要。如果没有这个功能,则一段文字就是一个很长很长很长的行,这对基于文本行比较的自动化工具(比如 diff)来说,无疑是一个致命的打击。对于可以显示行号的编辑器来讲,行号也会很跳跃,让人看着不舒服。不过最重要的,就是用户永远也不知道那个换行究竟是它自己加上去的,还是因为电脑屏幕不够宽而自动换的行。
所以无论是 Markdown 还是 LaTeX,都允许作者在源代码中任意换行,只要多行文字中没有空白行分割,就会把这些行合并成一个段落。在 Markdown 中如果要换行,则需在上一个行的末尾增加至少两个空格,而 LaTeX 也允许用户使用
\\
手动换行。那么问题来了,博客园为什么要去掉这么一个重要的功能呢?
在 Linux 桌面系统中,我使用 ReText 编辑 Markdown 文档。在 Ubuntu 中只需要sudo apt-get install retext
即可以安装该软件,其效果如下:
配置 ReText 使用比较漂亮的 CSS
刚安装的 ReText 对于文档的预览效果可能没有我上图中的那么好,应该是这样的:
上图中的引用和代码和正文的区分并不明显,而且整个文档的字体显示也不好看。之所以会出现这种情况,是因为没有给 ReText 指定相应的 CSS 文件。唯一的遗憾是 ReText 的某些配置无法通过菜单来完成,必须手动修改配置文件~/.config/ReText project/ReText.conf
,我的配置文件如下图:
至于到哪里去找一个漂亮的 CSS,那就仁者见仁、智者见智了。博客园中就有许多不错的可以借鉴。
开启数学公式支持
在网页中显示数学公式全靠 MathJax。博客园开启数学公式支持非常简单,在后台管理页面中打个勾就行了。由于 MathJax 使用$
来界定数学公式,所以文章或评论中有很多$
符号的同学们就要注意了。想想看,我的文章中用$
多吗?还真不少,介绍 AT&T 汇编语法时用过,探讨 Bash 脚本编程的时候也用过,所以那两篇文章的排版还真费了我不少劲。除了$
,MathJax还使用\(
和\)
、$$
和$$
、\[
和\]
来界定数学公式。
由于 MathJax 是如此的出名和优秀,所以 ReText 也有相应的 MathJax 扩展,不过这次修改的配置文件是~/.config/markdown-extensions.txt
。我的配置文件如下图:
从图中可以看出,配置文件的第1行就是开启 mathjax 扩展。至于其它的扩展和功能,大家可以阅读 ReText 的帮助文档。
看看博客园中数学公式的效果:\[\int_0^{+\infty} x^n e^{-x} \,dx = n!\]
下图是 ReText 中使用数学公式的效果:
效果和效率都是不错的哦!至此,我的文字工作正式被 Markdown 和 MathJax 全面接管。妈妈再也不用担心我的语文作业和数学作业了。至于 LaTeX 编辑数学公式的语法,我这里再为大家送上一份资料:一份不太短的LaTeX 2e介绍
(京山游侠于2014-12-22发布于博客园,转载请注明出处。)
Linux 中优秀的文本化编辑思想大碰撞(Markdown、LaTeX、MathJax)的更多相关文章
- Linux 桌面玩家指南:12. 优秀的文本化编辑思想大碰撞(Markdown、LaTeX、MathJax)
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...
- linux中vi和vim编辑工具
linux中知名的还有emacs,功能比vim还要强大 vim 如果文件存在vim是打开这个文件,若果不存在,则先新建再打开 命令模式:任何模式都可以通过Esc回到命令模式,命令模式可以通过命令进行选 ...
- Linux 中 /proc/kcore为啥如此之大
What Is /proc/kcore?None of the files in /proc are really there--they're all, "pretend," f ...
- linux中没有tree命令,command not found,解决办法
在有网络的情况下: 1.包管理器安装 centos 中用 yum -y install tree ubuntu 中用 apt-get install tree 当然如果需要权限不要忘了在前面加上 ...
- Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式
Linux就这个范儿 第15章 七种武器 linux 同步IO: sync.fsync与fdatasync Linux中的内存大页面huge page/large page David Cut ...
- linux中vi编辑
crt退出全屏:点击Alt+enter键 linux上传下载文件 Xftp.Filezilla.Winscp等工具 命令 sz test.txt #下载test.txt文件 ...
- Linux中内容查看命令"大PK"
众所周知linux中命令cat.more.less均可用来查看文件内容,当然还有我们"非主流"的vim以及使用较少的head.tail.tac. 下面我将介绍各种命令的用法及对比. ...
- Linux 中交换空间 (swap)应该分多大才好?
前一段时间,我们机房中一台Linux服务器运行缓慢,系统服务出现间歇性停止响应,让我过去处理一下这一问题,登录到服务器之后,发现此服务器的物理内存是16G,而最初装机的时候,系统管理人员却只分配了4G ...
- [转帖]NotePad++编辑Linux中的文件
NotePad++编辑Linux中的文件 https://blog.csdn.net/chengqiuming/article/details/78882692 原作者 未经允许不允许转帖 加密自己参 ...
随机推荐
- In-Memory:在内存中创建临时表和表变量
在Disk-Base数据库中,由于临时表和表变量的数据存储在tempdb中,如果系统频繁地创建和更新临时表和表变量,大量的IO操作集中在tempdb中,tempdb很可能成为系统性能的瓶颈.在SQL ...
- Markdown 图片助手-MarkdownPicPicker
title: Markdown 图片助手 v0.1 toc: true comments: true date: 2016-06-04 16:40:06 tags: [Python, Markdown ...
- POCO Controller 你这么厉害,ASP.NET vNext 知道吗?
写在前面 阅读目录: POCO 是什么? 为什么会有 POJO? POJO 的意义 POJO 与 PO.VO 的区别 POJO 的扩展 POCO VS DTO Controller 是什么? 关于 P ...
- linux基础学习笔记
我用的是centOS7.0版本的系统.linux的shell终端窗口类似于wind的command窗口 shell命令提示符格式:用户名@主机名:目录名 提示符 @前面的是已登录的用户名,@之后的为计 ...
- node模块加载层级优化
模块加载痛点 大家也或多或少的了解node模块的加载机制,最为粗浅的表述就是依次从当前目录向上级查询node_modules目录,若发现依赖则加载.但是随着应用规模的加大,目录层级越来越深,若是在某个 ...
- LINQ to SQL Where条件
1. 适用场景 实现条件的过滤和查询等功能. 2. 说明 跟SQL语句中的where作用相似,都起到了范围的限定即过滤的作用,而判断条件是紧跟后面的条件子句.where主要分为三种形式:简单形式.条件 ...
- Dynamics CRM 之ADFS 使用 WID 的联合服务器场
使用 WID 的联合服务器场 默认拓扑 Active Directory 联合身份验证服务 (AD FS) 是联合服务器场,使用 Windows 内部数据库 (WID). 在这种拓扑, AD FS 使 ...
- Android 死锁和重入锁
死锁的定义: 1.一般的死锁 一般的死锁是指多个线程的执行必须同时拥有多个资源,由于不同的线程需要的资源被不同的线程占用,最终导致僵持的状态,这就是一般死锁的定义. package com.cxt.t ...
- Atitit.你这些项目不都是模板吗?不是原创 集成和整合的方式大总结
Atitit.你这些项目不都是模板吗?不是原创 集成和整合的方式大总结 1.1. 乔布斯的名言:创新即整合(Creativity is just connecting things).1 1.2. ...
- [Django]用户权限学习系列之User权限基本操作指令
针对Django 后台自带的用户管理系统,虽说感觉还可以,但是为了方便用户一些操作,特别设计自定义的用户权限管理系统. 在制作权限页面前,首先需要了解权限和用户配置权限的指令,上章讲到权限的添加,删除 ...