部分markdown零基础入门教程

语法速查可以参考以下链接:
http://xianbai.me/learn-md/
https://www.runoob.com/markdown/md-tutorial.html
最偷懒的办法是用typora所见即所得,然后复制代码:
https://sspai.com/post/54912
https://zhuanlan.zhihu.com/p/39872673

10 个赞

所以说是新手凑合用,有直观的优点。大部分老手可能vscode插件了。
无论如何,编辑长文时,先保存在本地是好习惯。

2 个赞

对不同的人不一样嘛,就好像有的高中生还不会解一元一次方程……
另外,直观的预览有一定的省脑优势。
多一个选择总比少一个好~
【一位群友教了两小时数学,这是他心态发生的变化-哔哩哔哩】https://b23.tv/rtfXoc

3 个赞

It’s the fault of Knuth((逃

3 个赞

(好奇一下为什么knuth没有选lisp?(超小声(

2 个赞

(不负责任行为
https://www.thetype.com/typechat/ep-147/
(概括的说 就是数学语言本身就同时是相当的结构化和非结构化的
不论是 amsTeX 还是 MathML 都无法解决这样的问题
高度结构化的程序语言就更不能解决了

5 个赞

要说的话… 能画ast的其实都能fallback到lisp()(超小声())
不过说回来tex的语法… 四舍五入也是lisp x()(超小声(
不懂懂数学所以不好多说呢… qwq(超小声(
但是… 我们的思维大概都是线性的所以其实很好地搓成纯文本这种线性结构其实也很有希望的样子?(超小声(

嘟嘟, OT警察(超小声(被打死(((((((
那么要不要放个((xe|lua)la)tex教程呢x(超小声(

1 个赞

https://zhuanlan.zhihu.com/p/22389755

ref

实际上,高中或者大学的某些数学之所以对一部分人困难,就是因为我们就放弃了构造主义!首先,高中的数学和初中是很不一样的——并不是说初中研究了线性函数和二次函数,高中就研究三次四次函数,大学再研究五次六次函数。回头看来,两者最大的区别是,用的数学基础发生了重大变化——初中的数学,无所谓基础,所有的研究对象都是实数轴上的一次或者二次函数,所有的函数都可以在计算器上摁出来,其实在学生脑子里默默建构了构造主义的习惯。而高中开始,数学就慢慢地建立在集合论的基础上了。

集合论带来的,是非构造性。两个集合之间的映射,定义起来并不平凡:(LaTeX omitted)真正理解这个定义的人,难免痛恨 “一个映射/函数就是一个公式” 的常见误解(鄙人就曾经是痛恨者中的一员)。回过头来看,这种误解其实代表着构造主义和集合论的冲突。按照集合论的定义,实数轴上的实值函数,其实是的一类的子集,对每个 “分配” 了一个值——有没有让人窥见选择公理的影子?大多数这样的函数,都是 “不可计算” 的。

就是这一点点非构造主义,以奇怪的形式把很多人绊倒在构造在集合论基础上的现代数学的门槛上。门槛本身在哪里并不重要——可能在集合论,也可能在数学分析,或者实变函数论,但归根结底都是那一点点非构造主义。

类似的例子还有抽象代数。很多人在初次学习的时候本能地拒绝 “一个群是一个集合加上一个满足某些条件的二元运算” 这样的抽象定义,但是能接受矩阵群的概念,本质上也是非构造主义在作祟。用面向对象编程的语言来说,矩阵和一个抽象的集合的元素的区别在于,矩阵群自带元素的 constructor 和 methods. 但是用抽象的集合给出的群,就好像只带着 virtual methods 的 object, 会被一些人脑子里的编译器拒绝。

3 个赞

? lisp 果然容易出邪教徒((x

写作之难,在于把网状的思考,用树状的语法结构,转换成线性字符串。
——《风格感觉》,史蒂芬·平克

3 个赞

唔… 至少senioria没有感觉到自己的思想有很明显的二维结构… (超小声(
更像是某种伪并行(超小声(
所以其实存在可以描述这个的线性记号体系? 不清楚呢qwq(超小声(

以及果然邪教徒的最高境界是意识不到自己是邪教徒x(超小声(
(任何ast的方便记号都可以四舍五入成lisp语法呀x()(超小声(

1 个赞

TeX 没有 AST 这是 common sense((
虽然它基于 macro expansion

2 个赞

唔… 所以senioria感觉还是理解不同的样子… (超小声(
senioria喜欢定义扩大化又不是第一次了x(超小声()(
具体到这个讨论串的开头, tex用来写数学的那个部分树状结构还是蛮明显的? (超小声(
就senioria所知的数学… lisp那种中序遍历还是蛮清晰的(逃(超小声(

1 个赞

想要更丰富的展现?.md

3 个赞

感觉Asciidoc功能更丰富一点…

1 个赞

asciidoc 仿佛会成为下一个 TeX

3 个赞

那么… senioria也借楼发一下关于语义化的argue和另外的markdown教程好了 >< (超小声(

当然暖暖发的教程应该已经足够好了, senioria只是在此之外补充一点对ll, 和对也许更多的写作可能有帮助的一点tips. (超小声(

如果有什么senioria没有提及的部分, 欢迎bb >_< (超小声(

ll & discourse的标记语言介绍

嗯, ll和discourse的标记语言是markdown和bbcode的混合, 不过缺少了很多其它markdown和bbcode实现里具有的功能, 所以只能用内嵌HTML来实现.

如果想要输入一个字符, 但它又具有特殊的语法意义, 那么可以在它前面加上\来转义它. 比如 *这样* (源码是 \*这样\*), 如果不使用转义的话, 会变成 这样 (源码是*这样*).

值得一提的是, ll的markdown使用的是硬换行语法, 即源代码中的每个换行渲染出来之后也是一个换行. 同时, 没有任何办法在ll中换行源码但不换行渲染输出的文本. 如果使用两个换行, 或者说, 加入一个空行, 那么会新起一段.

更多关于换行的事情

其实这种硬换行同时不允许任何软换行 (源码中的换行渲染之后被删除或者替换成空格) 的行为在markdown中较为少见, 一般的markdown实现相反: 默认软换行, 通过各种特殊的语法实现硬换行. 比如常用的一种语法是在行末加\, 或者解释成转义这个换行; github markdown和pandoc markdown都使用这种语法. 还有一种相对不常用的语法是在行末加空格, 不过这在markdown的来源 — 纯文本邮件中的语义恰好相反, 纯文本邮件使用的是硬换行, 在行末加空格表示文本中的下一行实际上也属于这一行, i.e. 表示这个换行是软换行.

以及, ll的markdown里能够直接嵌入HTML标签, 不过很多块级标签里都要新起一段才能用markdown, 虽然很多markdown实现并无此限制, 比如:

*这里用不了markdown*

这里可以

源码:

<p>
*这里用不了markdown*

*这里可以*
</p>

隐藏的细节

就是这样:

一点描述

内容…

可以分很多段, 也可以用 markdown标签.

还能有标题

和引用

源码:

[details=一点描述]
内容...

可以分很多段, 也可以用 *markdown标签*.

## 还能有标题

> 和引用
[/details]

当然用HTML也能实现, 这样的话, 可以加上open属性来默认打开里面的内容:

比如这样 这是内容.

源码:

<details open>
<summary>比如这样</summary>
这是内容.
</details>

投票

不会, 不想记用法和语法, GUI它不香吗 x (超小声(被打死((((((((((

这个不是标准的HTML元素.

字体大小, 颜色, 和一些标注

这个按照bbcode标准也是有的, 只是可惜ll不支持其中的很多部分… 注意: 这些用法, 不论是HTML还是bbcode版本(毕竟bbcode也有对应的HTML实现), 在现在的HTML标准里都是弃用的, 除非在ll这样极度受限的环境里, 否则请使用CSS实现这些效果. 以及未来的浏览器可能取消对它们的支持 (虽然这种可能非常小).

大字体 小字体 [color=magenta]不同的字体颜色[/color] [color=#03c]另一种指定颜色的语法[/color]

源码, 当然, 这里的空格可以去掉, 效果也是一样的, 不去掉只是防止眼瞎:

<big>大字体</big> <small>小字体</small> [color=magenta]不同的字体颜色[/color] [color=#03c]另一种指定颜色的语法[/color]

也即, 颜色可以用颜色名称或者hexcolor的语法表示.

另外, HTML里还有一种用于注音的元素<ruby>:

比如c10s强强.
一般而言, 推荐的使用方式是加上<rp>元素来使得在不支持它的浏览器上它也能显示得好看点:
比如这样(在支持<ruby>的浏览器上看不到<rp>元素里的内容)
一般推荐分别标注音, 虽然<rb>元素确实可以实现一起标, 但它被弃用了,
而且一起标会让不支持<ruby>的浏览器渲染得十分令人费解.
分别标注音的例子: (hi)(na).
<ruby>标签里在<rt>标签前的部分会被认为是这个<rt>标签里的标注标注的部分.

上一段的源码:

比如<ruby>c10s<rt>强强</rt></ruby>.
一般而言, 推荐的使用方式是加上`<rp>`元素来使得在不支持它的浏览器上它也能显示得好看点:
<ruby>比如这样<rp>(</rp><rt>在支持`<ruby>`的浏览器上看不到`<rp>`元素里的内容</rt><rp>)</rp></ruby>
一般推荐分别标注音, 虽然`<rb>`元素确实可以实现一起标, 但它被弃用了,
而且一起标会让不支持`<ruby>`的浏览器渲染得十分令人费解.
分别标注音的例子: <ruby>ひ<rp>(</rp><rt>hi</rt><rp>)</rp>な<rp>(</rp><rt>na</rt><rp>)</rp></ruby>.
`<ruby>`标签里在`<rt>`标签前的部分会被认为是这个`<rt>`标签里的标注标注的部分.

各种链接

一般来说, 链接会被自动识别成链接, 比如 https://example.com 虽然严格来说这是不符合markdown语法的. 链接前后一般都要有空格, 有时候后面的空格可以省略, 但什么时候可以省略的规则过于微妙所以不在此解释. 手动创建链接也是可以的, 同时也可以给链接不同的文本:

比如这样
或者带标题的链接

源码:

[比如这样](joke://随便的一个URL)
[或者带标题的链接](https://example.org "这里是标题")

还可以创建跳转到一个位置的链接: 在链接的目标是以#xxx结尾的到网页的地址时, 这个链接会跳转到对应网页上id为xxx的元素的位置, 比如 (遗憾的是这在ll里不可用, 因为ll会删除HTML标签的多余属性):

这个元素有特定的id
跳转到上一行的元素

源码:

<span id="link-example">这个元素有特定的id</span>
[跳转到上一行的元素](#link-example)

如果用的是单独一个链接的格式 (比如 https://example.com ), ll会尽力识别它应该具有的文本, 比如 https://limelight.moe/t/topic/7169 , 目前所知的最好的避免这样的自动识别的方式是手动指定URL本身作为文本, 比如 https://limelight.moe/t/topic/7169 ([https://limelight.moe/t/topic/7169](https://limelight.moe/t/topic/7169)). 如果链接单独成一行, 则可能会自动提供一些控件, 比如(同一个链接):

https://limelight.moe/t/topic/7169

另外, 如果一个链接多次出现, 可以给它指定一个名字, 比如:

example
当然文本也可以不同, 但要在后面指定链接的名字
不过对于第一种指定名字的链接, 更推荐的语法是example.

源码:

[example]
[当然文本也可以不同, 但要在后面指定链接的名字][example]
不过对于第一种指定名字的链接, 更推荐的语法是[example][].

[example]: https://example.moe "一个示例链接, 这里是这个链接的标题"

圈人和裸链接也类似, 比如 @91khr .

引用

站内引用基本来说可以通过选择一片文本来创建, 或者在此基础上修改, 它们都比较直观, 而且直接输入源码也都显得过于麻烦. 除此之外, 还有markdown的引用 (摘自 In Catilina, Cicero 的第一段):

Quo usque tandem abutere, Catilina, patientia nostra?
quam diu etiam furor iste tuus nos eludet?
quem ad finem sese effrenata iactabit audacia?

源码:

> Quo usque tandem abutere, Catilina, patientia nostra?
> quam diu etiam furor iste tuus nos eludet?
> quem ad finem sese effrenata iactabit audacia?

当然把这搞成站内引用那样的形式也不是不行, 但万一哪天来了个叫Cicero的用户就不好了不是 (大雾).

语义化

关于语义化的解释

语义化的缘起

首先, 语义化是什么? 我们考虑下面这样的一篇文章:

标题

作者 日期

正文: 第一段

另一段正文, 一些强调的内容, 一些着重的内容.

列举的列表:

  • 一项
  • 另一项

步骤/递进的列表:

  1. 第一步
  2. 第二步

可以看到, 一些特殊的元素会拥有不同的样式: 标题的字号较大, 底下的作者和日期的字号较小, 强调和着重内容的字体不同, 各种列表有列表项目 (比如列举的列表前的点和递进的列表前的数字). 而我们在表达时, 实际上是先想到一个元素的作用, 然后才是考虑它应该使用什么样式, 比如, 我们会先想到添加一个标题/小标题, 然后才去选择合适的样式来写下这个标题.

那么, 所谓语义化, 指的就是直接表达这些元素的作用和地位, 这样, 在具体的写作时, 我们就可以尽量少考虑或者不考虑文章的样式和排版. 比如, 考虑上面那段文章的markdown源码:

# 标题

<small class=author>作者</small> <small class=date>日期</small>

正文: 第一段


另一段正文, *一些强调的内容*, **一些着重的内容**.

列举的列表:

- 一项
- 另一项

步骤/递进的列表:

1. 第一步
1. 第二步

我们可以看到, 标题和各种内容都是用特殊的标记表示的, 而作者和日期, 因为markdown里没有对应的元素标记, 直接使用了HTML的<small>标签指定了它们使用的样式: 更小的字体, 并且用class属性指定了它们的语义 — 也就是这个元素具体的作用.

为什么要语义化

自然, 我们强调的东西都是我们缺少的: 知乎上(以及不少其它地方)可以见到不少文章直接使用标题来放大字体表示强调, 不少教程对* *** **使用的名字是斜体和粗体, 以及很多人在office中仍然惯于直接手动调整每个元素的格式, 或者使用格式刷, 而非在office高版本中已经有显著地位的样式功能.

语义化的具体理由有很多, 其中经常被提起的一点是这样能够方便今后的各种修改工作. 例如, 使用语义化标记来标注每个元素的内容往往比起手动指定每个元素的样式和排版的工作量更小, 而且使用语义化标注可以把具体的排版工作放到最后再进行, 创作时只需要专注于内容, 直到发布时才调整具体的样式和排版, 这样就免去了直接排版时需要的手动调整每个元素的样式, 不用打断思路就可以获得元素的丰富变化. 另外, 同样常用的一个例子是需要对同一篇文章使用多种不同的样式和排版, 比如向多篇期刊投稿同一篇论文, 有了语义化标记, 在不同的排版之间切换会相对容易很多.

然而, senioria最想要强调的一点是语义化的语义本身. 说到底, 我们用什么样式表示什么元素本身其实更多只是一种约定, 样式只是表示元素语义的一种方式而已; 这样, 追求样式本身其实就是一种舍本逐末, 而表达语义才是唯一需要关注的.

另外还有道德问题: 我们自己身为少数群体, 关注别的少数群体某种程度上也是一种更自然的道德要求 — 如果我们自己不关注其它少数群体的话, 又凭什么要求别人关注我们呢? 而具体到这里, 语义化是可访问性的重要组成部分. 充分语义化了的标记有助于可访问性设施更好地识别一个元素具有什么功能, 帮助它们更好地处理这些元素; 而单纯的样式标记就很难识别和处理. 的确, 我们可以为不同的可访问性目标制作不同的排版和样式, 但这些目标终究是过大, 过粗的划分, 处在不同划分的中间部分的人可能很难根据自己的状况作出选择, 更糟糕的, 可能所有这些划分都是不适用的; 同时, 不同的版式带来的差异可能显著影响交流, 这在很大程度上也是一种歧视; 而直接指定良好的语义, 用一种版式适合所有人则没有这种问题. 另外, 很多语义化的部分本身具有某种标准, 可访问性设施的使用者可能调整了其中的一些部分来让自己拥有最好的体验, 或者设施本身有专门的优化使得它更加简洁舒适, 而我们自己专门定制的部分在这些方面相对来说就很破坏体验了.

对于具体的元素的语义化… 其实只有* *** **是比较纠缠不清的… senioria自己的习惯是, * *是强调, 用于标示话语中意义的重点和防止歧义; 而** **是着重, 用于标示话语中值得注意和铭记的部分.

以及, markdown的引用元素除了表示引用文献或者资料, 有时候也用于表示引语, 或者表示题外话. 后面的这种用法严格来说并不是语义化的行为, 但有些文章中可能出现…

4 个赞

那个叫backtick, 反引号, 以及这个东西叫inline code, 三个或多个的叫code block, 对于code block, 可以标注语言 (其实inline code也有可以的, ll md不行而已). (超小声(
如果要在code里嵌套code, 可以用不同的反引号数量, 内层直接毗邻的反引号前后加空格, 比如: 1 `` 2 ` 3 ` `` , 如果真的需要加空格, 就加多个空格. 或者一句话, 行内代码由任意数量的反引号开始, 后面接可选的一个空格, 由可选的一个空格接同样数量的反引号结束 (超小声(
pandoc在这里讨厌的一点是忽略空格是无限制的… 所以行内代码前后没法加空格… > < (超小声(

关于换行的问题是源码排版的一部分其实 (超小声(
python其实也可以换行, 只要前一行有语法结构提示这一行仍然属于同一语句即可; js的话其实分号是结束语句必须的, 但有个烦人的东西叫分号自动补全… 它的规则一般情况下还算好用, 但反正… 跟c++的重载决议一样, 懒得记 x x (超小声(
latex的话是软换行呀 (姐姐是不是没看senioria关于换行的说明 qwq), 源码中单纯的换行被解释成普通的空白; pandoc md中有个拓展是可以使得CJK字符前后的换行被忽略, 这样CJK句子也可以比较随意地换行了. (超小声(
以及分段缩进之类的属于具体的排版选项而非语义内容了 (超小声(

这是个html标签, 而且正确的用法是<br/>… qwq… (超小声

斜体下划线

源码:

[i]斜体[/i][u]下划线[/u]

同样, 不语义化所以建议别用… qwq… (超小声(

以及用引用来强调有点过于orz了… qwq… (超小声(

因为如果不分行的话默认是同一段, 而这些块级元素是作用于整段的 (超小声(
无序列表其实常用于枚举, 相反, 有序列表在很多时候因为可以被连续的一堆标题更好地代替, 才更应该是不常用的那个吧… (超小声(

嗯… 论文里的sections, 对应到这里的概念就是headers, 也就是标题… (超小声(
拆article这种操作有时候是不必要的… 而且标题的作用是按照语义把文章分割成一棵文档树, 再给每个节点分配一个标签; 文档树的节点之间是依靠标题软性分割而非依靠页面硬性分割的… (超小声(
以及… 感觉会说出这种话的人一般一篇latex文章的源码也会是单个的文档吧… ? (超小声(

这个是术语的不同, 叫枚举和列出也没有什么不妥的 (超小声(
所以稍微了解点排版相关的东西嘛… qwq… > < (超小声(

CJK的baseline设定其实似乎确实有点orz… (sigh… 下划线似乎是在baseline稍靠下一点的地方划的, 对CJK而言这个距离还要再往下点才好看… > < (超小声(
以及斜体纯粹是字体设计的问题… CJK本身就不适合字符斜过来, 更适合使用另一套字体… 或者说… 西文里斜体对应的功能在CJK排版里本身就应该用其它样式来实现… > < (超小声(

<xxx>叫start tag/opening tag, 起始标签; 对应的是</xxx>, end tag/closing tag, 结束标签… (超小声(
确实senioria去翻了翻mdn和spec, <br>确实经常直接用… 但<xxx/>的语法在这样的空节点(i.e. 不含子节点)中的语义是标记这个节点是关闭的(self-closing, 在spec文档里没有找到对应的翻译), 对<br>这样的标签, 由于它本身语义上就是空节点, 所以不产生作用. 建议用<br/>的原因是这样与其它地方的关闭节点具有一样的语法, 也更清晰地标注了这个节点不含子节点. (超小声(

不能直接说视为空格呀… qwq… 这个叫soft break… 虽然一般都是一个空格, 但严格来说和空格是不同的说… qwq… (超小声(
(严格来说, 空格的话就是那一个占据一个空格宽度的空格字符, 而一个soft break是一个可以有一定调整间隙和重新排版自由度的空白, seniorai是这么理解的… (超小声(

在做markdown本身的代码演示的时候 (确信 (超小声(
其实shell也有一种substitution用到了backtick… (超小声(

唔… 这个符号本身总之是叫做backtick, google翻译也是这么叫的; senioria没有找到对应的国标, wiktionary上也没有对应的词汇… 但latex上, `'也只是翻译成对应的引号而已, senioria不认为这个符号在latex里的叫法会是这样… (超小声(

严格来说return里的返回值仍然是约束变量吧… (超小声(