我希望列表、表格、代码块可以选择不要有前后段间距

诉求:只要我没用空行把表格/列表/代码块和其它块间隔开,obsidian就应该把这一部分当成一整个块,即,
第一,在渲染的时候不要擅自加上间隔;
第二,在块引用的时候把这一整个块全部包含进去。


举个例子,列表块的例子。随便搜了一个题目:

我要是在markdown里用列表来更清晰地表示这个题目,我会在甲乙丙丁说的话前面加上序号,构成一个列表

看着很好。但是,渲染结果是这样的:

额……
最后一句话渲染成缩进我能理解,这(似乎)是markdown的规矩。
但是,为什么第一句话和列表之间要渲染出一个间距啊?
比如说,这是我以前用onenote做的一段笔记。

里面有一个列表块。
这要让obsidian的markdown来渲染,这个列表块就得前后加上间距,就像这样:

这样不好。
不仅是因为我觉得难看,而是因为间距本来就是一个用来表达语言逻辑的方式,obsidian给我列表前后强加上间距,语言逻辑不对了,比如这个例子里,中间孤零零一个“由于”,是不是显得非常怪异,文章哪有这么写的?我反正是觉得非常怪异。

所以,我希望只要我写成

由于
- a
- b

的形式,Obsidian就不要渲染成

由于

- a
- b

的样式。

还想要后面这种渲染方式的人,就手动加上空行就行了。


这个段间距不止是“间距”的问题。
第二个例子。

如果我在Obsidian里写这个内容,然后之后想要块引用/块嵌入这个表格+下面的说明(也就是使用[[^]]的语法,我应该怎么做?
我试了试,没有办法一次性引用这一部分,只能分两次引用,表格一次,下面的说明一次。这样嵌入麻烦,而且无论是引用用浮窗查看,还是嵌入查看,看到的都不是原来的样子。
当然还有曲线救国的方法,比如加一个标题(Heading),然后引用标题。但加上标题并不是完美解,比如块嵌入时就会显示这个标题,我要是不想显示呢?对吧。

我想表达的是,
往往列表/代码/表格本身并不能完整表达意思,我还需要在前面后面加上一部分补充说明。
所以,如果块引用/块嵌入的时候只加载列表/代码/表格本身,往往并不能获得好的效果,我还需要去看补充说明。

所以说,我的期望就是,如果我把表格/列表/代码块写成

当x→0时,
- a
- b

^blocktest

这种样式,在块引用/嵌入![[^^blocktest]]的时候就把完整的这一部分嵌入进来。而不是只嵌入表格/列表/代码块。
当然,如果写成

当x→0时,

- a
- b

^blocktest

这种样式,那么![[^^blocktest]]的时候就只嵌入列表/表格/代码块。

  • 写个css脚本可以解决
  • 因为不依赖复杂的语法和数据标记引用的范围,使用最简短的引用标识符,只能实现单个块的引用。
  • 楼主希望灵活地制定引用范围,但这样要引入新文件或复杂语法/智能分块算法,是有悖于简洁的主旨的。
  • 写个css脚本可以解决

我是这样想的。
我提的这两个问题,本质上都是因为obsidian现在遇到表格/列表/代码块就要把它们独立看成一个块,而我觉得这没有道理,不应该这样无差别对待。
而因为这种实现,导致我遇到了上述两个问题,我想解决这两个问题,本质上就是要obsidian改变这个实现方式。
实现方式应该改成什么样?我希望是这样:
在文件内部,只要我没用空行/标题(heading)进行分割,那就认为这一部分是一个块。(分隔线也可以考虑视为分割。)
既然是一个块,那么渲染的时候就不要擅自加上间隔,块引用/块嵌入的时候将其完整引用/嵌入。

楼主希望灵活地制定引用范围,但这样要引入新文件或复杂语法/智能分块算法,是有悖于简洁的主旨的。

我提的实现方式很简洁啊,有什么不简洁的。我感觉理解上很好理解,软件实现上我猜应该也不是什么复杂逻辑。

既然这两个问题是修改逻辑就能解决的,我就不打算用CSS去解决了。所以我没提CSS的事情。

其实这个问题麻烦在 markdown 规范上,风味/方言太多了。CommonMark 对列表的讨论如下 CommonMark Spec

不知 Obsidian 采用的是哪一套 Markdown 规范,但既然要调整,我估计得全盘调,不能只调整列表前后空行识别的

搜到了一个古战场,供楼主参考 CommonMark 成员对这个问题的讨论:Blank lines before lists, revisited - #22 by jgm - Spec - CommonMark Discussion

MarkdownLint 针对列表,提出了列表周围必须添加空行的规范。或许是因为这条规则,Obsidian 为了简化之,在用户没有输入空行时,也当作有空行处理了。

与这个类似的操作是,Obsidian 简化了断行方式,严格的语法要求行尾必须加俩空格才算换行,而 Obsidian 提供了一个选项,在没有行尾空格只有回车的时候,就可以认为是换行了。这样的考虑是输入起来更方便。

最后一句话渲染成缩进我能理解,这(似乎)是markdown的规矩。

是的,同样是在上面的链接里有提到,lazy continuation line

2 个赞

你觉得全盘调是因为觉得如果调整,就得变到完全遵循另一套markdown规范吗?我觉得完全不需要这样呀,只调整这一部分就可以了。

第一,obsidian本来就有一些非markdown的语法,也就是说本来就没严格遵循markdown规范,比如「非严格换行」,wikilink附件,调整图片大小的语法。所以在这基础之上再“违反”一条规范也不是量变到质变。
第二,obsidian的核心理念之一是笔记用通用格式保存,所以能长久保存,100年后也能正常读取,内容都可以理解。我提的这种方式完全没问题,符合这一理念,100年后用txt文件打开,读者一样能看懂这些文本的行文逻辑。
第三,obsidian从来没宣称过自己遵循某一套markdown(方言)规范,没有这方面包袱。

这应该和怎么解析块无关……而是在css部分统一为列表加了段前段后,只要存在列表的地方都会这么处理。所以不喜欢的话把这个css改一下就行了。

至于这个,把严格换行模式开启后,然后按md的原教旨用空行,就不会有这种比较奇怪的渲染效果了。

至于这个问题,如果想要使用块引用的话,确实在引用或者说块的解析机制上需要调整。

但我觉得这个问题本质来说是知识基本单元的定义问题。因为我们引用也好,嵌入显示也好,场景都是在一个知识单元里去引用另一个基本单元。只不过在笔记的实践上,知识单元的实现可以是文档,也可以是块。

而当年roam research 的出现让大家觉得知识单元应该落到块粒度才是好的,才是所谓的“知识管理”。但从实际的经验来看其实并不是这样。在我看来,表格和后续文字没法一起引用只是一个很小的问题,更大的问题是需要引用的时候找不到块。因为块只提供了关键词检索这一种查找方式,而我有13,000篇笔记,每篇笔记平均10个块起步,至少就是130,000 个块作为检索范围。在这种情况下我能找到自己需要的表格都已经谢天谢地了……

所以换一个逻辑来说,我们完全可以把知识单元的粒度就统一成文档。对于表格+文字这种需要一起引用的内容来说,就可以独立出一篇笔记把它们存进去。这样嵌入的时候也不会有什么奇怪的问题,同时后期引用的时候还能借助文档的路径、标签之类的信息去快速定位到这篇笔记。

1 个赞

这个楼上已经有讨论了,这里就不赘述了。

见:


在obsidian里,每个块都依附于文档,所以找块我常用的方式是[[文档名^]],而不是[[^^]],所以找起来并不麻烦。
而且这个说法和下面的矛盾了啊。我先用搜索搜到这个块,然后给块加上标识生成引用,回去粘贴上就行了,不麻烦。


我这样尝试过,但并不是所有时候都这么方便。

如果我把表格+文字独立出去,那我就得给新文档起名字,给这种细碎小文件起名字真是一件麻烦事,起多了我感觉是一种折磨。

其次,我使用filename heading sync插件,文件名与文档中第一个一级标题的名字同步。那么现在,如果我要嵌入![[表格+文字]]这个文档,嵌入内容就会显示这个一级标题,但我不想显示这货,我明明只想看内容。引入CSS解决这个问题会让事情变得更复杂。

即便接受用css,还有一个终极问题:并不是所有时候,文档内容都适合独立出一篇笔记。如果遇到需要块嵌入的情况就要把它独立出去,那会相当相当麻烦。

典型案例就是写生活笔记。

例1,我和别人吃饭,零零散散听了几个事情的消息。
对这个场景,我的习惯是,这些笔记就记录在一个“X年X月X日 和XXX聚餐”的笔记里。以后需要引用里面的内容时,就用块引用/块嵌入。
这种内容基本每一点都是零散的,不成体系的闲言碎语。如果这种笔记都要独立成一个文档,那给文档起名的任务就更艰巨了:有的内容一两句话就说完了,这个名字到底怎么起?还是把这几十字就写在标题上?

例2,看剧时,我会把我在看剧时脑海里冒出的每一个想法全部记录下来。比如:
“这里好,我喜欢”
“我觉得后面的剧情应该是讲黑人白人和解的”
“为什么这里剧情这么设置?好怪啊。是为后面的什么剧情铺垫吗?如果后面有解释的话才能合理化。”
“这个门把手怎么长这样,我没见过啊。话说这真是门把手吗。”
“我之前对剧情发展的推测[[xxxxxx]]错了,实际上他没死。“
“没想到你们体育馆上下层是是要通过这种竖梯上下,有点儿意外。"
“这个场景变化很不错。一开始身上覆盖的是雪,后来身上覆盖的是樱花,也是不错的创意。”
这种零碎想法。

如果我看完作品以后很想说什么,可能会写多篇长评,用到这些素材,也有可能没兴趣写,就堆在那里了。
我把这些笔记写在文档[[初次看xxxx的笔记]]里。用列表分点记录。
这种笔记就不适合每一个想法独立成文档,因为独立成文档,这名字根本就没法起,我是看剧的时候记录下自己的想法,要的就是一个快,要我给每个碎片想法都想一个高度概括,以后还能用[[关键词]]就能检索到的块,这要额外花掉我多少时间,我还要看剧呢。而且,我不是每个想法都要引用,费事想那么多标题干什么,绝大部分都是浪费。

例3,记录集体出游,途中分别和同伴、和路上遇到的人有什么有意思的谈话、发生过什么趣事。
下次用到这里面的内容,我选择块引,而不是把其中那一段单独摘出来独立成一个文档。独立成文档不是不行,但是明显块引用更适合这里的场景。
并且还有一个问题,写在一个文档里和独立成一片文档,笔记写法不一样。独立的一篇文档就要补充完整信息。例如,

如果写《笔记软件应该具备的条件》,写在一篇文章里,只需要写一个列表。如果每一个条件独立成一份文档,就要在每个文档里前面写一句“对于笔记软件来说,……“这样的话。把这些文档嵌入到《笔记软件应该具备的条件》里的话,就会显得很怪,我会在文档开头看到这句话,在每个嵌入块里还要再看一遍这句话。
如果写《游记》,每个小事情独立成一份文档,就得在每个文档前面写一句”今天,我们去了XXX地方玩“这样的话。把这些文档嵌入到《游记》里的话就会显得很怪,我会在文档开头看到这句话,在每个嵌入块里还要再看一遍这句话。

核心还是在块的划分上,楼主希望能够实现灵活的块范围
然而ob为了遵守md语法,使用与html元素一一对应的块

  • 或许楼主可以写一个脚本,来快速在所选内容前(和后)插入一个使用css隐藏的随机6级标题,然后生成引用链接来实现灵活的引用范围
1 个赞

这是一个好办法。
这样在正文里隐藏,也能同时隐藏大纲栏里的这个标题显示吗?

不清楚自带的大纲能不能隐藏,不过插件是可以的,例如floating toc是有对各个标题做层级标识的

觉得起名麻烦那就可以考虑时间戳,卡片笔记流派的做法就是这样。还觉得麻烦甚至可以在笔记写完以后,其他笔记需要引用其中某一部分的时候,再按需创建独立笔记。这样其实就和块引用是差不多的:引用符号都是一串数字,只不过块引用是软件自动帮你解析出一个范围,这种方法是你自己手动框选一个引用范围。

估计你不是做文史类研究的。在文史类研究里,类似你举例的场景只会更多,但其实在研究上甚至都不需要用双链都可以完成引用。比如 OSCOLA 格式下,要引用一个法案进行说明,只需要在文章中注明Nettleship v Weston [1971] 2 QB 691 这样的案件全名和案件号就行了。如果读者有需要细读案件原文,自行按图索骥找案例全文查看即可。引用一两句话组成的法条其实也是同理。

这种逻辑其实可以用回所有笔记软件里。

比如例1,日后引用时,完全可以写 该事件具体可参见[[X年X月X日 和XXX聚餐]],这样你就清楚引用的是什么了。毕竟又不是需要把事件原文全部写出来才叫引用。当然,如果觉得这种指向还不够具体,就可以参考前面的卡片笔记做法,把引用的部分用时间戳命名成一个独立笔记。效果是一样的。

例2也是同理,日后用到素材的时候也是在引用处写完正文后,留一句 具体细节参见[[初次看xxxx的笔记]] 就行了。

例3、4、5也是同理,不赘述了。

其实追溯历史,当年 ob 真是很不想做块引的,因为要达成引用的目的方法真的太多了。

还是一开始的问题,都用时间戳做标题了,那为什么还要说“至少就是130,000 个块作为检索范围。在这种情况下我能找到自己需要的表格都已经谢天谢地了……”了,这不成立啊。

能用这种方式解决的问题自然不在讨论范围内。

这样做的问题,我前面有说过一点:

还有一个问题就是这会破坏graphview。我列表列了40点内容,如果其中的5点要独立出去单独成文,凭什么其它35点不独立出去,就凭这5点会被引用到?如果只独立出去这一点,在graph里看只会觉得怪异,这个文章怎么只链接了5个理由,不对劲。graph view可能好一点,因为很难注意到。但是local graph就会很明显。
但是其它35点独立出去,又太累了,每次遇到要引用的情况就得这么搞,心理负担和事件负担加起来很沉重。

因为哪怕是时间戳其实也是一种不好的方式。

确实就是凭被引用到。其实任何一个知识,只要被引用了,就会有它自己独立的名字。比如泰勒规则,如果它没有被别处使用的价值,那么也不会专门安排这么一个名字。为什么很多科学发现都这么讲究冠名,就是这个道理了——在日后引用的时候,发现者也能被后世纪念。

回到这个40点内容的例子。如果5点因为引用独立出去了,就说明在当下这个时间点这5点是有复用价值的,其他35点没有。有价值的内容给个名字方便后面用,挺合理的()

比如,我后面需要引用校内产学研合作模式这块的内容,对这一块内容进行深入研究,我就直接把这部分拆出去了,方便其他笔记对它进行引用。双向联合体合作模式剩下来怎么办?剩下就剩下呗,反正当下没有用到,用到的时候再拆出去就行了。

是啊,所以加标题真的很痛苦……

我理解你说的这个意思。
我想表达的是,这种方法终究是一种「妥协」。
如果想法是「精益求精」,或者说是「追求完美」,那么很明显,
第一,这种方式会导致块嵌入时每次都要重复一遍开头的话。如果有的点没被拆分,有的点被拆分了,那么当把拆分的点也嵌入回总体论述的笔记里时,显示就会不协调。
第二,这种方式在graph里显示达不到“某种理想效果”。

比如这个。

我用双链笔记软件,那就当然要链接,没有任何不链接的道理,不链接的话怎么通过反链找关系。
这种实例太应该链接了,就像数学题目肯定要链接,不链接我怎么快速筛选出考察某个概念的、自己记过笔记的题目。
这方面不应该妥协。