TeX、LaTeX、XeLaTeX

TeX

TeX:由Donald Knuth开发的高质量排版系统

  • TeX的范畴包括标记语法(命令)、具体实现(引擎),在不同 场合含义不同,类似语言、编译器

  • 初版TeX包含300左右命令,随后Donald添加Plain TeX扩展包 定义了600左右常用宏命令

  • TeX中将标记关键字称为命令,其实关键字确实类似命令,可能 系统对应命令、语言对应关键字

TeX宏包

  • *.cls类文件:定义文档结构
  • *.sty包/样式文件:提供类未包括的任何东西
    • 对类文件功能的补充:提供从属于类文件的功能
    • 对类文件功能的修改:改变类文件的风格

基础排版宏包

  • LaTeX:Leslie Lamport设计的更高层次、更抽象的排版格式

    • 包含以TeX命令为基础的一系列高层、抽象宏命令,包括 \section\usepackage
    • 用户可以使用模板而不必决定具体排版、打印,使用更加 方便
    • 是学界事实上的标准排版格式
  • ConTeXt:Pragma-ADE公司设计的文档制造格式

    • 为TeX提供对先进打印特性的易用接口
    • 生成的编译文件更美观,适合专业印刷行业使用
  • TeXinfo:FSF(Free Software Foundation)设计的格式

    • 是Linux系统的标准文档系统

中文排版宏包

  • xeCJK:在XeTeX引擎下处理中日韩文字断行、标点调整、字体 选择的基础性宏包

    • 基础从CCT、CJK以来的标点禁则、标点压缩、NFSS字体补丁
    • 实际上仅对简体中文处理机制比较完全
    • XeTeX本身已经能够大概处理中文文档的排版,但在某些 细节部分仍然可以改进
    • 类似的宏包还有:zhspacing、xCJK、xCCT
  • CTeX:提供了编写中文文档时常用的宏命令

其他宏包

  • AMS-TeX/AMS-LaTeX:AMS(American Mathematical Society) 设计的格式
    • 提供了额外的数学字体、多行数学表述排版

TeX引擎

  • pdfTex:将TeX文本编译输出为pdf格式的引擎实现

    • 最初TeX/LaTeX实现将TeX编译为DVI格式,然后方便转换为 PostScript文件用于打印
    • 而pdf格式超越PostScript格式成为更流行的预打印格式
    • 因此事实上,现在LaTeX发行版中包含4个部分:TeX、 pdfTeX、LaTeX、pdfLaTeX
  • XeTeX:扩展了TeX的字符、字体支持的引擎实现

    • 最初TeX/LaTeX仅仅支持英语数字、字母
    • XeTeX提供了对Unicode字符和TrueType/OpenType字体的 直接支持
  • LuaTeX:将TeX扩展为更sensible的编程语言的实现

TeX发行版

TeX Live

TeX Live:TUG(TeX User Group)发布、维护的TeX系统

  • TeX Live包含
    • 与TeX系统相关的各种程序
      • pdfTeX
      • XeTeX
      • LuaTeX
    • 编辑查看工具
      • DVIOUT DVI Viewer
      • PS View
      • TeXworks
    • 常用宏包
      • LaTeX
    • 常用字体
    • 多个语言支持

MiKTeX

MiKTeX:Christian Schenk开发的在MSWin下运行文字处理系统

CTeX

CTeX:CTeX学会开发,将MiKTeX及常用应用封装

  • 集成WinEdt编辑器
  • 强化了对中文的处理

配置文件笔记

Ini

Toml

Yaml

基本语法规则

  • 大小写敏感
  • 缩进代表层级关系
  • 必须空格缩进
    • 不要求空格数目
    • 同层左对齐

数据结构

  • -:?等符号后总是需要空格
  • #表示注释

对象/映射

对象/映射:键值对集合,:表示、{}行内表示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// `:`后要空格
key: value

// 多层级对象
key:
child_key1: val1
child_key2: val2
// 流式表示
key: {child_key1: val1, child_key2: value2}


// 复杂对象格式:键、值都是数组
// `? `(空格)表示复杂key
?
- complex_key1
- complex_key2
// `: `(空格)表示复杂value
:
- complex_val1
- complex_val2

数组

数组:-开头、[]行内表示

1
2
3
4
5
6
7
8
9
10
11
12
13
// `[[ele1, ele2]]`
-
- ele1
- ele2


// `pkey: [{key1: val1}, {key2: val2, key3: val3}]`
pkey:
-
key1: val1
-
key2: val2
key3: val3

标量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
boolean: 
- TRUE # true, True均可
- FALSE # false, False均可

float:
- 3.14
- 3.14e+2 # 科学计数法

int:
- 13
- 0b1010_1010_1010_1010 #二进制

null:
key: ~ # `~`表示null

string:
- 'hello world' # 单、双引号包括特殊字符
- line1
line2 # 字符串可以拆成多行,换行转换为空格

datetime:
- 2019-07-10 # ISO 8601格式,`yyyy-MM-dd`
- 2019-07-10T17:53:23+08:00 # ISO 8601格式,`<date>T<time>+<timezone>`

特殊符号

  • ---:表示文档开始
  • ...:文档结束
    • 二者配合在文件中记录多个yaml配置项
  • !!:强制类型转换
  • >:折叠换行符为空格
  • |:保留换行符
  • &:锚点
    • 不能独立定义,即非列表、映射值
  • *:锚点引用
    • 可以多次引用
    • 被引用值可能会之后被覆盖
  • <<:合并内容
    • 主要配合锚点使用
    • 相当于unlist解构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
---							# 文档开始
string:
- !!str 13
- !!str true
... # 文档结束

---!!set # 强转为set
- A1: &A1 {x: 1, y: 2} # 定义名称为`A1`锚点
- A2: &A2 {a: 3, b: 4} # 定义名称为`A2`锚点
- B: > # 折叠换行符
this line
will collapse
- C: | # 保留换行符
this paragraph
keeps the <CR>
- D: *A` # 引用名为`SS`的锚点
- E: # E等价于`{x:1, y:2, a:34, b:4}`
<<: [*A1, *A2]
a: 34
...

API

  • Java
    • package:org.yaml.snakeyaml.Yaml
  • Python
    • package:PyYaml
    • import yaml

Xml

二进制文件格式

IDX

IDX:MNIST数据集独创的数据格式

  • 用于存储多维数组

  • 后可以跟数字表示存储数组的维度

    • idx1:存储1维数组
    • idx3:存储3维数组

格式

  • 2bytes:格式版本号

    • 一直是0x0000
  • 1bytes:数组中每个元素的数据类型

    • 0x08unsigned byte
    • 0x09signed byte
    • 0x0Bshort(2bytes)
    • 0x0Cint(4bytes)
    • 0x0Dfloat(4bytes)
    • 0x0Edouble(8bytes)
  • 1bytes:数组维度d

  • d * 4bytes(int):数组各维度长度

  • 数据部分

    • 数据类型已知、长度已知
    • 若元素格式符合文件头要求,表明解析正确,否则文件损坏

Cmd Markdown Reference


我们理解您需要更便捷更高效的工具记录思想,整理笔记、知识,并将其中承载的价值传播给他人,Cmd Markdown 是我们给出的答案 —— 我们为记录思想和分享知识提供更专业的工具。 您可以使用 Cmd Markdown:

  • 整理知识,学习笔记
  • 发布日记,杂文,所见所想
  • 撰写发布技术文稿(代码支持)
  • 撰写发布学术论文(LaTeX 公式支持)

cmd-markdown-logo

除了您现在看到的这个 Cmd Markdown 在线版本,您还可以前往以下网址下载:

Windows/Mac/Linux 全平台客户端

请保留此份 Cmd Markdown 的欢迎稿兼使用说明,如需撰写新稿件,点击顶部工具栏右侧的 新文稿 或者使用快捷键 Ctrl+Alt+N


什么是 Markdown

Markdown 是一种方便记忆、书写的纯文本标记语言,用户可以使用这些标记符号以最小的输入代价生成极富表现力的文档:譬如您正在阅读的这份文档。它使用简单的符号标记不同的标题,分割不同的段落,粗体 或者 斜体 某些文字,更棒的是,它还可以

1. 制作一份待办事宜 Todo 列表

  • [ ] 支持以 PDF 格式导出文稿
  • [ ] 改进 Cmd 渲染算法,使用局部渲染技术提高渲染效率
  • [x] 新增 Todo 列表功能
  • [x] 修复 LaTex 公式渲染问题
  • [x] 新增 LaTex 公式编号功能

2. 书写一个质能守恒公式LaTeX

3. 高亮一段代码code

1
2
3
4
5
6
7
@requires_authorization
class SomeClass:
pass

if __name__ == '__main__':
# A comment
print 'hello world'

4. 高效绘制 流程图

1
2
3
4
5
6
7
8
st=>start: Start
op=>operation: Your Operation
cond=>condition: Yes or No?
e=>end

st->op->cond
cond(yes)->e
cond(no)->op

5. 高效绘制 序列图

1
2
3
Alice->Bob: Hello Bob, how are you?
Note right of Bob: Bob thinks
Bob-->Alice: I am good thanks!

6. 高效绘制 甘特图

1
2
3
4
5
6
7
8
9
10
11
12
13
title 项目开发流程
section 项目确定
需求分析 :a1, 2016-06-22, 3d
可行性报告 :after a1, 5d
概念验证 : 5d
section 项目实施
概要设计 :2016-07-05 , 5d
详细设计 :2016-07-08, 10d
编码 :2016-07-15, 10d
测试 :2016-07-22, 5d
section 发布验收
发布: 2d
验收: 3d

7. 绘制表格

项目 价格 数量
计算机 $1600 5
手机 $12 12
管线 $1 234

8. 更详细语法说明

想要查看更详细的语法说明,可以参考我们准备的 Cmd Markdown 简明语法手册,进阶用户可以参考 Cmd Markdown 高阶语法手册 了解更多高级功能。

总而言之,不同于其它 所见即所得 的编辑器:你只需使用键盘专注于书写文本内容,就可以生成印刷级的排版格式,省却在键盘和工具栏之间来回切换,调整内容和格式的麻烦。Markdown 在流畅的书写和印刷级的阅读体验之间找到了平衡。 目前它已经成为世界上最大的技术分享网站 GitHub 和 技术问答网站 StackOverFlow 的御用书写格式。


什么是 Cmd Markdown

您可以使用很多工具书写 Markdown,但是 Cmd Markdown 是这个星球上我们已知的、最好的 Markdown 工具——没有之一 :)因为深信文字的力量,所以我们和你一样,对流畅书写,分享思想和知识,以及阅读体验有极致的追求,我们把对于这些诉求的回应整合在 Cmd Markdown,并且一次,两次,三次,乃至无数次地提升这个工具的体验,最终将它演化成一个 编辑/发布/阅读 Markdown 的在线平台——您可以在任何地方,任何系统/设备上管理这里的文字。

1. 实时同步预览

我们将 Cmd Markdown 的主界面一分为二,左边为编辑区,右边为预览区,在编辑区的操作会实时地渲染到预览区方便查看最终的版面效果,并且如果你在其中一个区拖动滚动条,我们有一个巧妙的算法把另一个区的滚动条同步到等价的位置,超酷!

2. 编辑工具栏

也许您还是一个 Markdown 语法的新手,在您完全熟悉它之前,我们在 编辑区 的顶部放置了一个如下图所示的工具栏,您可以使用鼠标在工具栏上调整格式,不过我们仍旧鼓励你使用键盘标记格式,提高书写的流畅度。

tool-editor

3. 编辑模式

完全心无旁骛的方式编辑文字:点击 编辑工具栏 最右侧的拉伸按钮或者按下 Ctrl + M,将 Cmd Markdown 切换到独立的编辑模式,这是一个极度简洁的写作环境,所有可能会引起分心的元素都已经被挪除,超清爽!

4. 实时的云端文稿

为了保障数据安全,Cmd Markdown 会将您每一次击键的内容保存至云端,同时在 编辑工具栏 的最右侧提示 已保存 的字样。无需担心浏览器崩溃,机器掉电或者地震,海啸——在编辑的过程中随时关闭浏览器或者机器,下一次回到 Cmd Markdown 的时候继续写作。

5. 离线模式

在网络环境不稳定的情况下记录文字一样很安全!在您写作的时候,如果电脑突然失去网络连接,Cmd Markdown 会智能切换至离线模式,将您后续键入的文字保存在本地,直到网络恢复再将他们传送至云端,即使在网络恢复前关闭浏览器或者电脑,一样没有问题,等到下次开启 Cmd Markdown 的时候,她会提醒您将离线保存的文字传送至云端。简而言之,我们尽最大的努力保障您文字的安全。

6. 管理工具栏

为了便于管理您的文稿,在 预览区 的顶部放置了如下所示的 管理工具栏

tool-manager

通过管理工具栏可以:

</i> 发布:将当前的文稿生成固定链接,在网络上发布,分享 新建:开始撰写一篇新的文稿 </i> 删除:删除当前的文稿 导出:将当前的文稿转化为 Markdown 文本或者 Html 格式,并导出到本地 </i> 列表:所有新增和过往的文稿都可以在这里查看、操作 模式:切换 普通/Vim/Emacs 编辑模式

7. 阅读工具栏

tool-manager

通过 预览区 右上角的 阅读工具栏,可以查看当前文稿的目录并增强阅读体验。

工具栏上的五个图标依次为:

</i> 目录:快速导航当前文稿的目录结构以跳转到感兴趣的段落 视图:互换左边编辑区和右边预览区的位置 </i> 主题:内置了黑白两种模式的主题,试试 黑色主题,超炫! 阅读:心无旁骛的阅读模式提供超一流的阅读体验 全屏:简洁,简洁,再简洁,一个完全沉浸式的写作和阅读环境

8. 阅读模式

阅读工具栏 点击 或者按下 Ctrl+Alt+M 随即进入独立的阅读模式界面,我们在版面渲染上的每一个细节:字体,字号,行间距,前背景色都倾注了大量的时间,努力提升阅读的体验和品质。

9. 标签、分类和搜索

在编辑区任意行首位置输入以下格式的文字可以标签当前文档:

标签: 未分类

标签以后的文稿在【文件列表】(Ctrl+Alt+F)里会按照标签分类,用户可以同时使用键盘或者鼠标浏览查看,或者在【文件列表】的搜索文本框内搜索标题关键字过滤文稿,如下图所示:

file-list

10. 文稿发布和分享

在您使用 Cmd Markdown 记录,创作,整理,阅读文稿的同时,我们不仅希望它是一个有力的工具,更希望您的思想和知识通过这个平台,连同优质的阅读体验,将他们分享给有相同志趣的人,进而鼓励更多的人来到这里记录分享他们的思想和知识,尝试点击 (Ctrl+Alt+P) 发布这份文档给好友吧!


再一次感谢您花费时间阅读这份欢迎稿,点击 (Ctrl+Alt+N) 开始撰写新的文稿吧!祝您在这里记录、阅读、分享愉快!

作者 @ghosert
2016 年 07月 07日

LaTeX. 支持 LaTeX 编辑显示支持,例如:$\sum_{i=1}^n a_i=0$, 访问 MathJax 参考更多使用方法。
code. 代码高亮功能支持包括 Java, Python, JavaScript 在内的,四十一种主流编程语言。

MarkDown Basics


[TOC]

标题

  • Setext形式: 以底线的形式
    • = 表示最高阶标题
    • - 表示次阶标题
  • Atx形式: 在行首插入1-6各#表示1-6阶标题

  • [TOC]可以生成标题链接目录(兼容性不好,不是标准实现)

段落

  • 类似html格式, md忽略文件中的换行符
  • 如果需要新开段落, 手动使用空行(可包含不可见<space> <tab>字符)

区块引用

  • 使用email形式的>标识
  • 可嵌套, 根据层次添加不同数量的>
  • 其中可使用其他形式的语法, 如: 标题, 列表, 代码区块
  • 也可以只给整个”段落”第一行加上>

修辞和强调

  • *_包裹输出为html标签<em>
  • **__包裹则是输出为html标签<strong>
  • ~~包裹输出<del>(删除线)
  • 符号两边如果有空格则会当作普通符号
  • 可以\*, \_转义的方式输出普通符号

列表

  • 无序列表: -, +, *都可以输出无序列表
  • 有序列表: 数字接半角句点.
  • 列表项目标记一般放在最左边, 也可以缩进, 最多3个空格, 项目 标记后面一定要<space><tab>
  • MD其实不关心有序列表中数字的顺序正确性, 只是单纯的输出为 <li>, 如果需要避免将1.类似输出为有序列表, 需要转义 1\.
  • 在列表项目增加空行, 会把列表内容用<p>包裹, 列表 项目可以包含多个段落, 此时列表内段落间也需要空行分隔, 且 项目下所有段落都需要缩进<tab>或4个<space> (这里的段落是指MD意义上的一段, 不是源文件的一段, 即缩进 也只是需要在MD意义上一段的第一行缩进, 当然所有行都缩进 比较美观)
  • 在列表项目内添加引用, >需要缩进, 而代码块本身就需要 缩进, 所以需要缩进2个<tab>或8个<space>

链接

  • 行内形式: 直接在链接内容之后用括号添加链接
       [link_content](link "title(optional)")
    
  • 参考形式: 为链接定义一个名称, 然后可以在其他地方给出地址
       [link_content][id]
       [id]: link "title(optional)"
       [id]: link 'title'
       [id]: link (title)
    

参考形式中

  • 三种定义title的方式都可以
  • id可以包括空格, 不区分大小写
  • 隐式链接标记功能可以省略id, 此时链接标记(id)视为等同 于链接内容

自动链接

  • <link>: 自动转换为链接, 内容就是链接地址
  • <email>: 自动转换为邮箱链接

图片

  • 行内形式: ![alt text](link "title(optional)")
  • 参考形式: ![alt text][id] [id]: link "title(optional)"

代码

  • 段落内代码: 使用`包裹回输出html标签<code>
  • 代码区块
    • 每行缩进<tab>或者4个<space>
    • 3个`包裹, 后面还可以接代码类型, 可能会有代码高亮
1
2
def fn():
print('hello markdown')
def fn():
    print('hello markdown')

表格

  • |: 纵向边界
  • -: 表头和内容边界, 可用于设置对齐
    • :----: 左对齐
    • -----: 默认左对齐
    • :---:: 居中对齐
    • ----:: 右对齐

特殊字符

对于html中特殊字符<(起始标签)和&(标记html实体)会自动 “智能”转义. 如果使用的&字符是html实体字符的一部分, 那么会 保留原状, 否则会转换为&amp

如: 输入©会被保留, 直接显示为copyright字符

分隔线

一行中3个以上的-, *, _可以建立分隔线, 符号之间可以有 空格, 不能有其他东西

其他

  • 注脚: 在注脚文字后接[^footer1]footer1, 然后在其他 地方[^footer1]: 注脚内容