Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

支持针对文档块的传递型双链 #10990

Open
LoneFireBlossom opened this issue Apr 11, 2024 · 78 comments
Open

支持针对文档块的传递型双链 #10990

LoneFireBlossom opened this issue Apr 11, 2024 · 78 comments

Comments

@LoneFireBlossom
Copy link

LoneFireBlossom commented Apr 11, 2024

思源笔记应该有针对「文档笔记」而非「大纲笔记」的「传递型双链」

In what scenarios do you need this feature?

((20240412000236-ixeczjp '思源笔记')) ((20240412005806-z3q4496 '传递型双链'))

起因

思源笔记根据用户的反馈,基本实现了daily notes笔记法的流程。软件要实现daily notes笔记法流程,最重要的就是反链面板上如何如何显示嵌套列表下的笔记。下面是一个典型例子:

  • [[锚文本1]] [[锚文本2]] [[锚文本n]]

    • 内容

只要遵循这套写作流程,就可以在[[锚文本1]][[锚文本2]]笔记的反链面板中看到。这个锚文本是传递型双链

不过本文和daily notes笔记法没什么关系,我只是对传递型双链兴趣很大:通过调整双链放置的位置,可以控制想让哪些内容传递到相应的块、显示在其反链面板中。传递型双链很有用,我很喜欢。——注意,传递型双链到底能传递多少内容、应该怎么写,相当程度上依赖笔记软件自身的设计。

这个传递型双链,在列表里确实能大显神威。但是很遗憾,但是,这套流程发源于Roam Research,所以是仅仅针对大纲型笔记软件而设立的,如Roam Research、Logseq。 这些软件本来就只能写大纲,不能写文档。

思源不一样,思源既可以写大纲,又可以写文档。这是思源的优势。 而我真的非常抵制把一篇文章写成大纲的行文逻辑:

  1. 从小到大看的、写的都是文档块,而且文档行文逻辑要比被大纲局限住舒服多了,写成大纲真的很怪啊!
  2. 写完的文章如果要发出去,肯定得用文档模式啊,如果一开始就用大纲模式去写行文逻辑,那后面调整会很费事。

所以,我坚决不使用大纲。

但这样一来,如果我写文档笔记,我就没有传递型双链可以用。

我试来试去,试来试去,最终发现,自己只要想让一篇文档传递到对应的锚文本处,我就不得不用大纲。我也发帖问过:[对 daily notes 的传递型双链仍有使用上的一些困惑 - 链滴](https://ld246.com/article/1710773578174),但是大家都没有什么好办法。下面列举几种思路:

  1. 最直接的想法,当然是用一级标题写锚文本,之后写标题就用二级以下标题。

    这样能解决问题,但是太蠢了,看到锚文本字号那么大真的很怪异,我接受不了。哪有这么用一级标题的,简直是浪费!总不能上CSS调整字号吧,那大纲里还能看到这一级标题呢,不还是别扭,这东西跑不掉,总归不是标题(Heading)的正常用法。

  2. 这里是一位用户选择的妥协方式:[我的 dailynote 流程(适合思源笔记软件 / 欢迎讨论) - 链滴](https://ld246.com/article/1658109483457)。如文章中描述,他的方法是,文章开头用一个六级标题写锚文本,然后下面正文写作时用列表来写。得,还是得用列表。而且还得用六级标题,六级标题被用在这种奇奇怪怪的地方,这位用户能接受,我接受不了,我心里觉得很别扭。

  3. 有一种方式可以写文档的行文逻辑,就是单项列表,即:

    • [[锚文本1]] [[锚文本2]] [[锚文本n]]

      一级标题

      内容……

      内容……

    这样能解决问题,但是太丑了,为什么我要加一个列表……

    用了这种方式就会给后来的块引用带来很大麻烦,如果要引用此单项列表中的任意块,那么输入提示中必定会同时包含此列表块,也就是块引用的输入提示中永远有干扰项,一旦不小心引用错误就要重新引用。

  4. 至于超级块,那就更不在讨论范围之内了。给每个文档都加一个超级块,一看就是很别扭的方式。

    而且,就算接受了超级块的方式,更大的问题在于如果一个超级块里塞下超长的复杂嵌套内容,我相信肯定会卡顿,而且和前一种方案一样会导致块引用时的麻烦,此方案断不可行。

总结一下这四种方案的问题:

  • 方案1是削足适履

    • 我白白损失了一层标题,这让我少了一层可用的标题。
    • 还影响大纲视图。
  • 方案2与之类似,代价还更大。

  • 方案3、4由于性能问题和块引用失效的担忧、块引用输入提示时的干扰项增加而显然不可行。

我绝不会向列表屈服的。绝对。👊

TL;DR:

  1. 传递型双链起源于大纲型笔记软件,在大纲型笔记软件里能实现其功能。在思源里同样能实现其功能。
  2. 但是,思源并不是大纲型笔记软件。如果在思源里写文档,就没有传递型双链可用。
  3. 思源既然能写文档,我认为就应该有一个「在非列表块中,想想要传递的内容传递到相应主题」的方式。

诉求

诉求分两层。

  1. 首先是最基本的:

    对于一个文档块,如果我在文档块下面的第一行写且仅写了锚文本,那么这些锚文本就被视为传递型双链,即在相应的块的反链面板中,我能看到这篇文章的全部内容。例如这样:

    image

    我的需求就这些。

  2. 不过,针对「给文档设计传递型双链」的话,我认为还得加一条:

    对于一个标题块(及从属于该标题块下的所有内容),如果我在标题块下面的第一行写且仅写了锚文本,那么这些锚文本就要被视为传递型双链,即在相应的块的反链面板中,我能看到这个标题块,及低于该标题块级别的全部内容(因为标题块是叶子块而非容器块,所以我找不到一个便捷易懂的描述方式……)。

显然这个实现逻辑和目前思源对列表中传递型双链的实现逻辑是一致的。

Describe the optimal solution

.

Describe the candidate solution

No response

Other information

No response

@5kyfkr
Copy link

5kyfkr commented Apr 11, 2024

所言极是,这也是我一直觉得Dailynote流程在思源上用的怪怪的地方,没有文档级别的传递型双链。
现在有了数据库,我发现添加到数据库的功能刚好可以解决这个问题,我现在dailynote只需要把1级标题当成文档名称添加到数据库里就可以实现文档与主题的关联,因为刚好1级标题拖到文档树又是一篇文档,也不会丢失数据库链接,日后整理完全不用担心以前各种双链的放置位置问题,直接在DN里面记录,然后以后要单独弄成文档再拖到文档树就行了。
当然上述是数据库里的另辟蹊径,对于不使用数据库的双链用户这个文档级别的传递双链还是非常有必要的

@88250
Copy link
Member

88250 commented Apr 12, 2024

可以用标题来实现的:

image

前期设计讨论参考 #7444

我先关闭了,如果还有问题请继续跟帖,谢谢 🙏

@88250 88250 closed this as completed Apr 12, 2024
@5kyfkr
Copy link

5kyfkr commented Apr 12, 2024

#10919 我觉得最方便的解决办法就是这个issue的把标签功能重构,这样就能实现lsq那种标签管理主题文档的方式实现诉求了,这个问题也就顺便解决了,另外现在带引用的标题拖到文档树里面标题变成文章名称后传递引用就消失了,当然这个例子比较极端,要写文章或整理的时候可以单独新建个文档整理,但总归不是太自然

@LoneFireBlossom
Copy link
Author

可以用标题来实现的:

image

前期设计讨论参考 #7444

我先关闭了,如果还有问题请继续跟帖,谢谢 🙏

我寻思我在正文写的很清楚了,针对这一点进行了反驳,开发者你为什么要重复一遍我已经反驳过的话然后把issue关闭呢?

@88250
Copy link
Member

88250 commented Apr 12, 2024

呃,这个功能已经实现了啊,用标题可以传递。

但是如果你说的是文档标题的话……实现不了,因为目前文档标题上无法做元素,都是纯文本。

@5kyfkr
Copy link

5kyfkr commented Apr 12, 2024

呃,这个功能已经实现了啊,用标题可以传递。

但是如果你说的是文档标题的话……实现不了,因为目前文档标题上无法做元素,都是纯文本。

功能确实实现了,就是不够优雅,用标题写传递我也觉得很不像传统标题的用法。
只用大纲实现双链最完美,但是又要抛弃多级标题的用法,如果用标题边上写传递双链,双链传递在标题里面又不美观,现在是在讨论有没有一种能调和这两个需求的更好的实现方式

@88250
Copy link
Member

88250 commented Apr 12, 2024

@5kyfkr 但我看楼主原文说的是没有实现方式:

传递型双链起源于大纲型笔记软件,在大纲型笔记软件里能实现其功能。在思源里同样能实现其功能。
但是,思源并不是大纲型笔记软件。如果在思源里写文档,就没有传递型双链可用。
思源既然能写文档,我认为就应该有一个「在非列表块中,想想要传递的内容传递到相应主题」的方式。

目前标题传递这个肯定是动不了了,因为已经有用户这样用。重构标签那个可以继续在 #10919 中讨论,不是一时能够决定的。

@LoneFireBlossom 请问你还有什么疑问吗?

@LoneFireBlossom
Copy link
Author

@5kyfkr 但我看楼主原文说的是没有实现方式:

传递型双链起源于大纲型笔记软件,在大纲型笔记软件里能实现其功能。在思源里同样能实现其功能。
但是,思源并不是大纲型笔记软件。如果在思源里写文档,就没有传递型双链可用。
思源既然能写文档,我认为就应该有一个「在非列表块中,想想要传递的内容传递到相应主题」的方式。

目前标题传递这个肯定是动不了了,因为已经有用户这样用。重构标签那个可以继续在 #10919 中讨论,不是一时能够决定的。

@LoneFireBlossom 请问你还有什么疑问吗?

不你不能只看TLDR啊……前面也得看一遍啊……要不然我写前面那些干啥……

@LoneFireBlossom
Copy link
Author

呃,这个功能已经实现了啊,用标题可以传递。

但是如果你说的是文档标题的话……实现不了,因为目前文档标题上无法做元素,都是纯文本。

我在1楼已经针对“用标题传递”这种方式进行了反驳啊……
我根本没提文档标题的事儿啊……

@5kyfkr
Copy link

5kyfkr commented Apr 12, 2024

@88250
楼主的核心诉求是下面这个解决方式不够优雅吧,文档标题拖到文档树丢失传递是我自己提的一个怪怪的地方,觉得也可以一并优化。

最直接的想法,当然是用一级标题写锚文本,之后写标题就用二级以下标题。

这样能解决问题,但是太蠢了,看到锚文本字号那么大真的很怪异,我接受不了。哪有这么用一级标题的,简直是浪费!总不能上CSS调整字号吧,那大纲里还能看到这一级标题呢,不还是别扭,这东西跑不掉,总归不是标题(Heading)的正常用法。

@88250
Copy link
Member

88250 commented Apr 12, 2024

标题(H1-H6)里面加引用好像没有啥奇怪的吧?

@88250
Copy link
Member

88250 commented Apr 12, 2024

@5kyfkr 但我看楼主原文说的是没有实现方式:

传递型双链起源于大纲型笔记软件,在大纲型笔记软件里能实现其功能。在思源里同样能实现其功能。
但是,思源并不是大纲型笔记软件。如果在思源里写文档,就没有传递型双链可用。
思源既然能写文档,我认为就应该有一个「在非列表块中,想想要传递的内容传递到相应主题」的方式。

目前标题传递这个肯定是动不了了,因为已经有用户这样用。重构标签那个可以继续在 #10919 中讨论,不是一时能够决定的。
@LoneFireBlossom 请问你还有什么疑问吗?

不你不能只看TLDR啊……前面也得看一遍啊……要不然我写前面那些干啥……

抱歉,我又看了一遍,应该理解你的诉求了,你希望在文档块这一级实现传递对吧?如果用 @5kyfkr 提到的 #10919 的思路来解决的话,可以考虑文档中第一个段落块中仅存在标签元素时传递。


@5kyfkr

文档标题拖到文档树丢失传递是我自己提的一个怪怪的地方,觉得也可以一并优化。

上面的方案认为是否有可行性?

@LoneFireBlossom
Copy link
Author

  1. 一级标题不是让我写n个传递型双链的地方,这不是一级标题本该有的功能。
  2. 我在一级标题处并排写10个传递型双链,看上去只会让人觉得怪异。
  3. 我用一级标题写传递型双链,占用了这一级,我只剩下5个级别的标题可以用了。
  4. 传递型双链的显示效果,不正是软件对其进行了专门设计(例如,在反链面板中只显示次一级;锚文本一栏不能有其它内容,如果有的话就不显示次一级了)吗?所以,文档的传递型双链也当然要专门设计。

@88250
Copy link
Member

88250 commented Apr 12, 2024

@LoneFireBlossom 上面回帖刚刚更新,麻烦看下。

@LoneFireBlossom
Copy link
Author

LoneFireBlossom commented Apr 12, 2024

@5kyfkr 但我看楼主原文说的是没有实现方式:

传递型双链起源于大纲型笔记软件,在大纲型笔记软件里能实现其功能。在思源里同样能实现其功能。
但是,思源并不是大纲型笔记软件。如果在思源里写文档,就没有传递型双链可用。
思源既然能写文档,我认为就应该有一个「在非列表块中,想想要传递的内容传递到相应主题」的方式。

目前标题传递这个肯定是动不了了,因为已经有用户这样用。重构标签那个可以继续在 #10919 中讨论,不是一时能够决定的。
@LoneFireBlossom 请问你还有什么疑问吗?

不你不能只看TLDR啊……前面也得看一遍啊……要不然我写前面那些干啥……

抱歉,我又看了一遍,应该理解你的诉求了,你希望在文档块这一级实现传递对吧?

应该是吧,我不清楚开发者的概括是不是和我想的一致……
我在一楼描述过了具体的方式,就是那样。

对于一个文档块,如果我在文档块下面的第一行写且仅写了锚文本,那么这些锚文本就被视为传递型双链,即在相应的块的反链面板中,我能看到这篇文章的全部内容。例如这样:
image

我觉得这个描述挺完整的,应该没有需要补充的地方了。

@5kyfkr
Copy link

5kyfkr commented Apr 12, 2024

我补充一点,markdown里面1级标题一般就是指文档标题,所以如果在一级标题写上传递引用也是很怪的行为,相当于给文档标题加传递双链,但是拖到文档树就丢失了

@88250
Copy link
Member

88250 commented Apr 12, 2024

标题转换文档这个恐怕没有办法,因为标题转换文档以后文档标题不支持元素。

@LoneFireBlossom
Copy link
Author

如果用 @5kyfkr 提到的 #10919 的思路来解决的话,可以考虑文档中第一个段落块中仅存在标签元素时传递。

我觉得在没有实现标签重构之前应该还是按照双链的方式来啊,随便举个例子,如果文档名里还有特殊字符,我就没法用标签了啊。还有有的文档名很长很长,用标签也不合适,输入时还没有补全提示。

@88250
Copy link
Member

88250 commented Apr 12, 2024

按照现在的引用元素也可以,那就是第一个段落块中仅存在引用元素时传递;之前提到的标题(H1-H6)转换文档时丢失传递也可以在转换时自动添加第一个块并插入引用,不过这样会改动原有正文,得再考虑一下是否妥当。

@88250 88250 changed the title 思源笔记应该有针对「文档笔记」而非「大纲笔记」的「传递型双链」 支持针对文档块的传递型双链 Apr 12, 2024
@88250 88250 reopened this Apr 12, 2024
@5kyfkr
Copy link

5kyfkr commented Apr 12, 2024

按照现在的引用元素也可以,那就是第一个段落块中仅存在引用元素时传递;之前提到的标题(H1-H6)转换文档时丢失传递也可以在转换时自动添加第一个块并插入引用,不过这样会改动原有正文,得再考虑一下是否妥当。

能新增一种块类型嘛,就叫传递块,一个文档或标题下只能有一个传递块,有这个块的就会把文档和标题传递.
或者在标题块和文档块属性里加个引用的属性,填进去传递双链进去就能反链里看到

@LoneFireBlossom
Copy link
Author

另外现在带引用的标题拖到文档树里面标题变成文章名称后传递引用就消失了,当然这个例子比较极端,要写文章或整理的时候可以单独新建个文档整理,但总归不是太自然

为什么要在标题上加上双链呢,我不懂。
按我的理解标题都是用来概括下面内容,在下面内容里链接效果是一样的。
如果是想要把标题下面的内容都传递到相应主题处,我觉得这正好对应我提的第二点诉求:

对于一个标题块(及从属于该标题块下的所有内容),如果我在标题块下面的第一行写且仅写了锚文本,那么这些锚文本就要被视为传递型双链,即在相应的块的反链面板中,我能看到这个标题块,及低于该标题块级别的全部内容(因为标题块是叶子块而非容器块,所以我找不到一个便捷易懂的描述方式……)。

@5kyfkr
Copy link

5kyfkr commented Apr 12, 2024

另外现在带引用的标题拖到文档树里面标题变成文章名称后传递引用就消失了,当然这个例子比较极端,要写文章或整理的时候可以单独新建个文档整理,但总归不是太自然

为什么要在标题上加上双链呢,我不懂。 按我的理解标题都是用来概括下面内容,在下面内容里链接效果是一样的。 如果是想要把标题下面的内容都传递到相应主题处,我觉得这正好对应我提的第二点诉求:

对于一个标题块(及从属于该标题块下的所有内容),如果我在标题块下面的第一行写且仅写了锚文本,那么这些锚文本就要被视为传递型双链,即在相应的块的反链面板中,我能看到这个标题块,及低于该标题块级别的全部内容(因为标题块是叶子块而非容器块,所以我找不到一个便捷易懂的描述方式……)。

是的,我理解你的意思,我也没用过标题里写传递双链

@LoneFireBlossom
Copy link
Author

LoneFireBlossom commented Apr 12, 2024

能新增一种块类型嘛,就叫传递块,一个文档或标题下只能有一个传递块,有这个块的就会把文档和标题传递.

大纲里的传递型双链也没有专门设计一个块,我的提案是参照大纲传递型双链的设计思路想的,我觉得这样就挺好用的,没有必要增加一个实体,增加这个实体很麻烦啊,还得加上这种一看就感觉可能实现起来很麻烦或者容易带来bug的限制。
而且,“一个文档或标题下只能有一个传递块”,这句话本身就不成立,一个文档里面可以有好多标题啊,如果每个标题下面都想设置一个传递块那不就不对了。

或者在标题块和文档块属性里加个引用的属性,填进去传递双链进去就能反链里看到

我觉得这样不好。我为啥要单独开一个窗口写双链啊,很麻烦的。大纲里面写传递型双链很简单,参照这个来就好了呀。
而且也实现不了吧……我看属性窗口里根本就做不了双链输入提示。

@88250
Copy link
Member

88250 commented Apr 12, 2024

标题里存在引用这个不做讨论了,这样用的场景也有,况且已经肯定有用户这样用了,木已成舟。

新加一种“传递”元素不大可行,这样会引入更多实体,更复杂了。使用属性也不大可行,原因同上。这一点我和 @LoneFireBlossom 持一致的意见。

现在咱们确认一下,是不是文档中第一个段落块中通过引用来传递?

@5kyfkr
Copy link

5kyfkr commented Apr 12, 2024

标题里存在引用这个不做讨论了,这样用的场景也有,况且已经肯定有用户这样用了,木已成舟。

新加一种“传递”元素不大可行,这样会引入更多实体,更复杂了。使用属性也不大可行,原因同上。这一点我和 @LoneFireBlossom 持一致的意见。

现在咱们确认一下,是不是文档中第一个段落块中通过引用来传递?

细想我那两个说的确实也不妥,最简洁的现有应该就是按第一个段落块识别了

@LoneFireBlossom
Copy link
Author

现在咱们确认一下,是不是文档中第一个段落块中通过引用来传递?

是的。

@88250
Copy link
Member

88250 commented Apr 12, 2024

好的,稍后我看看实现细节有没有什么问题,感谢讨论。

@TCOTC
Copy link
Contributor

TCOTC commented Apr 15, 2024

我觉得本 issue 的提案已经很合适了,只引入了一个小设计,我也没有想到其他比这个更好的方式来解决这个问题

因为其实这本来不是一个问题。如果你仔细看过本提案,你就知道已经有1234种方式解决这个问题了,但是,提主觉得不够优雅。不是因为思源不能实现,而是实现的不够优雅所以提案。这两种方式是有本质区别的。我觉得在思源能实现,只是实现的不够优雅的这种提案上,我们需要谨慎对待,是否需要因为一种优雅,就多增一种设计。

我觉得其他的实现方式要么是在滥用列表,要么是在滥用标题,会污染导出的 Markdown 。列表和标题不应该被用来传递整篇文档

@Reader2024
Copy link

Reader2024 commented Apr 15, 2024

我觉得其他的实现方式要么是在滥用列表,要么是在滥用标题,会污染导出的 Markdown 。列表和标题不应该被用来传递整篇文档

是的,这就是我上面说的核心宗旨。不是因为思源不能实现,而是实现的不够优雅所以提案。这两种方式是有本质区别的。我觉得在思源能实现,只是实现的不够优雅的这种提案上,我们需要谨慎对待,是否需要因为一种优雅,就多增一种设计。

你觉得是在滥用列表,但我觉得文档块那样用是在滥用文档,有很多问题不好解决,同时对以前的用户也会产生一定的影响。

所以,保留意见,看D大的考虑吧

@TCOTC
Copy link
Contributor

TCOTC commented Apr 15, 2024

我突然想到一点,如果实现 #11025 ,那只需要给文档打上标签就可以传递了,而且完全不影响导出后的 Markdown 。

就是对已经习惯用块引传递的用户来说,未必有本 issue 那么方便,还需要给标签绑定文档。

@5kyfkr
Copy link

5kyfkr commented Apr 15, 2024

我突然想到一点,如果实现 #11025 ,那只需要给文档打上标签就可以传递了,而且完全不影响导出后的 Markdown

这就是摆在思源文档型双链传递的两条路,但是这两条路或多或少都会对现有习惯有影响,我觉得应该尽早确定选哪条路线,不然后面还会被不断提起

@LoneFireBlossom
Copy link
Author

  1. 我上面写的,这样的行文结构,在搜索上,相当于自己造了一个一炮双响出来。后续的查询冗余,是肯定的。而且随着你的内容写的越多,冗余也越来越多,这如何解决?

这不是问题,如果这是问题的话,写daily notes笔记法的人早就因为成千上万的传递型双链造成的查询冗余而崩溃了

@LoneFireBlossom
Copy link
Author

  1. 直接写入文档名,并没有提示,如何解决一个文档名可能有多种不同的命名方式?

这个和我的提案没什么关系啊……双链输入内容有提示,不知道为何你要把它算作一个问题。

@LoneFireBlossom
Copy link
Author

有几个用户,已经在文档下的第一段写入了锚文本,用户本意并不是要传递过去,只是想说明这篇文档和那篇文档有关联。而现在他的反链面板一打开,充斥着大量的传递过来的文档块。如何解决?

我是这样认为的。
首先,这种用户一定是极少数中的极少数,而且在新规则下,这些用户想要恢复到原状也非常简单,就在第一个段落块里随便加一个字母即可。
传递型双链应该怎么传递,传递多少内容过去,本质上就是软件规定的规则,各个软件的实现方式不一样,不遵守规则就达不到自己想要的状态。

针对你举的例子,我也举个例子。有的用户,从logseq迁移过来。logseq里大纲传递型双链的规则是这样的:

logseq 的反链规则是这样,无论锚文本有没有独占一个节点,反链里都只展示第一层子级,更深的子级全部折叠。

结果来到思源发现,这里的展示规则不一样,导致在反链面板上看不到之前能看到的内容了。如何解决?

@LoneFireBlossom
Copy link
Author

  1. 如果文档名只是一个代号,和内容无关系。真正的文档名写在文档下的第一行,这样不会有上面的两个问题。但是问题也有,那就是你的文档树完全废了。一打开全是如20240415、20240416、20240417这样的文档名。你怎么找文档?同时通过查询文档名快速打开相应的文档,这种功能又如何实现?

我是把文档标题写在文档标题处的,不是这样写的

  1. 而且用这种写法,你在将来发布的时候,又要多几个步骤。重写文档名,删除第一段的锚文本

我觉得我没什么好删的,这些就保留在第一行也没问题啊。
我也不需要重写文档名。

@LoneFireBlossom
Copy link
Author

LoneFireBlossom commented Apr 15, 2024

我感觉文档下的第一个块写成传递型双链的这个逻辑有点奇怪啊。

举例:在dailynote中写传递型双链

- [[锚文本]]
	- 这里是内容

当我们点击[[锚文本]]文档进入时,其实是下面的形态

[[锚文本]]   /* ←这个锚文本,其实就是文档名 */

这里是内容

而如果文档下的第一个块写成传递型双链的话

这里是文档名   /* ←文档名其实就是这篇文档的中心主旨 */

[[锚文本]]   
/* ↑这个锚文本,他是这篇文章的第一主旨还是第二主旨?在逻辑和行文结构上,它究竟是在文档名之下,还是和文档名平齐,还是在文档名之上? */

这里是内容

首先,如我在1楼所说:

本文和daily notes笔记法没什么关系,我只是对传递型双链兴趣很大:通过调整双链放置的位置,可以控制想让哪些内容传递到相应的块、显示在其反链面板中。

我并不在乎“无压”,因为我写的笔记不止是给我自己看的,所以我必须要有一定的整理。

传递型双链的一种用法,是拿来标示这篇文章和什么内容有关用的,其实就类似传统的标签的功能。例如这样的:
image

所以我不太理解你说的主旨是什么意思。

在比如你提议中的图片文档,文档名是思源笔记应该有针对「文档笔记」而非「大纲笔记」的「传递型双链」,文档下第一个段落块的锚文本是[[思源笔记]][[传递型双链]]。但其实锚文本在文档名上已经有体现了不是吗?重复再写一遍不会觉得比较冗余吗?这样的行文结构势,在搜索上,相当于自己造了一个一炮双响出来。那么在文档数量多了之后,比如几K的文档后,必然会造成查询结果的大量重复。

这个楼上已经有说过。如果这是问题的话,写daily notes笔记法的人早就因为成千上万的传递型双链造成的查询冗余而崩溃了

另外这个提议本身是可以考虑的,但是措词实在是有比较大的槽点。

如你文章中所述,其实思源已经有了1234条路径达到目标。但是你觉得不优雅,然后文章中的措词是:“这不是我的问题,我不应该自己削足适履,不应该找各种别扭的方式来实现我的目标;这是思源应该实现的功能

在我的认知里,优雅对应这样的例子:

  • 家里只有两口人,那么烧开水就不需要一次性用烧很多,换成小一点的壶;做饭也不要用很大的锅,用小锅。两人出行开车不开大车,开小车。
  • 桌面上的线太乱了,用一个理线器给整一下,并且把理线器放到桌子下面。
  • 有线充电还需要插拔,还是无线充电方便。

你只引用了我的半句话:

然后文章中的措词是:“这不是我的问题,我不应该自己削足适履,不应该找各种别扭的方式来实现我的目标;这是思源应该实现的功能

这前半句对应这里的优雅。当然我觉得也不完全算是优雅,因为我觉得这个场景和我上面举的例子并不完全一致。
当然了,如果我只有这前半句,即使现有的思路各有问题,我也不会提这个issue。
后半句你没有引用:

说到底,传递型双链的显示效果,不正是软件对其进行了专门设计(例如,在反链面板中只显示次一级;锚文本一栏不能有其它内容,如果有的话就不显示次一级了)吗?所以,文档的传递型双链也当然要专门设计。

这两句话合在一起才是完整的。

那么等会就来了第6个人,我觉得12345的实现都不优雅,我提议用第6种方式,这不是我的问题,这是思源应该实现的功能

等会又来了第7个人,我觉得123456的实现都不优雅,我提议用第7种方式,这不是我的问题,这是思源应该实现的功能

……

所以这种推理自然也就不存在了,因为这只重复了前半句话。

@LoneFireBlossom
Copy link
Author

双向链接时代的快速无压记录,这就是他这篇文章的主旨,用一句话就概括完了。

而如果说传递型双链可以有任意个,那么思考一下,哈桑这篇雄文,可以在第一行打多少个传递型双链?如果是这种用法,那回到本质问题,记录方式究竟是更无压了还是更有压了?

如果是基于平时在双链中用“原子化/卡片化”的方式积累,那么这篇文章就是这些积累的成果。每一个知识点各自有自己的传递型双链(至于愿意打什么双链,就看需要传递到什么主题);而这篇文章是基于这些积累的输出文,应该是自己笔记库中已有内容的重新整合,所有内容在笔记库中都有一份记录,所以这篇文章,单独放在一个「已发布文章」的笔记本里得了。

其次,如我之前所说,我不需要无压。

@LoneFireBlossom
Copy link
Author

LoneFireBlossom commented Apr 15, 2024

因为其实这本来不是一个问题。如果你仔细看过本提案,你就知道已经有1234种方式解决这个问题了,

我更新了一下1楼,更新了一下这几种方案的问题,然后做了一个总结。
这里也粘贴一下总结,看详细版的请到1楼查看。

  • 方案1是削足适履

    • 我白白损失了一层标题,这让我少了一层可用的标题。
    • 还影响大纲视图。
  • 方案2与之类似,代价还更大。

  • 方案3、4由于性能问题和块引用失效的担忧、块引用输入提示时的干扰项增加而显然不可行。

@zxhd863943427
Copy link
Contributor

我提出一个更统一、技术难度可能更低的改进方案:

假如一个叶子块只包含双链的内容,那就传送它的直接父级。
假如包含其他内容,那就只传送这个叶子块。

换而言之,会实现以下的效果

  1. 列表项的直接子级里面,有一个段落块全是双链,那就传送这个列表项。这就实现了以往传递型双链的效果。
  2. 列表项的直接子级里面,有一个段落块包含双链和其他内容,那就传送这个段落块。这与之前传送折叠的列表项项不同,不过直接使用面包屑也能看到下方内容,我觉得是可取的。
  3. 一个文档,没有任何标题,有一个段落里面只有反链,那就传送这整个文档。
  4. 一个文档,有标题,有一个段落里面只有反链,但是不在标题下,传送这整个文档。
  5. 一个文档,有标题,有一个段落里面只有反链,标题下,传送最接近的标题及其下方内容。
  6. 有一个超级块,里面有一个段落只有反链,传送整个超级块。

@frostime
Copy link
Contributor

frostime commented Apr 16, 2024

理想情况下其实就是把双链和文档标签整合在一起了

51191157d59184d6acd9dea8f294d2ea

标签放在正文里面完全是被双链吊打的存在,但是人家就是能放在文档级别中,而双链不行。这也是挺让人遗憾的。😥

@TCOTC
Copy link
Contributor

TCOTC commented Apr 16, 2024

我提出一个更统一、技术难度可能更低的改进方案:

假如一个叶子块只包含双链的内容,那就传送它的直接父级。 假如包含其他内容,那就只传送这个叶子块。

@zxhd863943427 这个方案至少比本 issue 的方案复杂,而且在前面已经被 D 大否掉了:

现在咱们确认一下,是不是文档中第一个段落块中通过引用来传递?

D大,不要仅考虑文档块啊,标题块也同步考虑进去吧,就是标题块和文档块下第一个段落块中如果仅存在双链时进行传递,反链面板中显示标题/文档名+内容。

标题块只能用现在的逻辑,不能改了。

@zxhd863943427
Copy link
Contributor

这个方案至少比本 issue 的方案复杂

在技术上不是,因为需要判断是否为文档下的第一个块,必须要进行读取文件操作,而不能只查sql表。

@5kyfkr
Copy link

5kyfkr commented Apr 16, 2024

理想情况下其实就是把双链和文档标签整合在一起了

标签放在正文里面完全是被双链吊打的存在,但是人家就是能放在文档级别中,而双链不行。这也是挺让人遗憾的。😥

所以重构标签也是一条路,直接能得到文档级别的关联,我个人觉得重构标签在习惯上会更容易接受点,目前我最喜欢这里面的方案二#11025

@LoneFireBlossom
Copy link
Author

我提出一个更统一、技术难度可能更低的改进方案:

假如一个叶子块只包含双链的内容,那就传送它的直接父级。 假如包含其他内容,那就只传送这个叶子块。

换而言之,会实现以下的效果

  1. 列表项的直接子级里面,有一个段落块全是双链,那就传送这个列表项。这就实现了以往传递型双链的效果。
  2. 列表项的直接子级里面,有一个段落块包含双链和其他内容,那就传送这个段落块。这与之前传送折叠的列表项项不同,不过直接使用面包屑也能看到下方内容,我觉得是可取的。
  3. 一个文档,没有任何标题,有一个段落里面只有反链,那就传送这整个文档。
  4. 一个文档,有标题,有一个段落里面只有反链,但是不在标题下,传送这整个文档。
  5. 一个文档,有标题,有一个段落里面只有反链,标题下,传送最接近的标题及其下方内容。
  6. 有一个超级块,里面有一个段落只有反链,传送整个超级块。

如果能这样实现,那就更好了

@5kyfkr
Copy link

5kyfkr commented Apr 16, 2024

论坛新发现的数据库当标签用法,除了没有反链面板和父子标签层级,能解决文档分类问题,可以先顶着用用https://ld246.com/article/1713258387572

@TCOTC
Copy link
Contributor

TCOTC commented Apr 16, 2024

论坛新发现的数据库当标签用法,除了没有反链面板和父子标签层级,能解决文档分类问题,可以先顶着用用https://ld246.com/article/1713258387572

这个还是只能临时用用,因为「没有反链面板和父子标签层级」,所以没法替代双链和标签

@LoneFireBlossom
Copy link
Author

LoneFireBlossom commented Apr 16, 2024

我提出一个更统一、技术难度可能更低的改进方案:

假如一个叶子块只包含双链的内容,那就传送它的直接父级。 假如包含其他内容,那就只传送这个叶子块。

换而言之,会实现以下的效果

  1. 列表项的直接子级里面,有一个段落块全是双链,那就传送这个列表项。这就实现了以往传递型双链的效果。
  2. 列表项的直接子级里面,有一个段落块包含双链和其他内容,那就传送这个段落块。这与之前传送折叠的列表项项不同,不过直接使用面包屑也能看到下方内容,我觉得是可取的。
  3. 一个文档,没有任何标题,有一个段落里面只有反链,那就传送这整个文档。
  4. 一个文档,有标题,有一个段落里面只有反链,但是不在标题下,传送这整个文档。
  5. 一个文档,有标题,有一个段落里面只有反链,标题下,传送最接近的标题及其下方内容。
  6. 有一个超级块,里面有一个段落只有反链,传送整个超级块。

我对“列表项的直接子级”还是没看懂,这个1、2两点能否再举个例子解释一下?比如这几种情况会怎么传递?

image

谁是它的直接父级,标题还是列表块?思源能区别出来吗?

image

@zxhd863943427
Copy link
Contributor

zxhd863943427 commented Apr 16, 2024

x会传递全部,ab传递相同的列表项,也就是a所对的列表项及其子级,cd分别传递各自的列表项及其子级。

第二个例子,我必须说明的是,这个设想是直接基于思源的sqlite数据库表中已有的parent-id这一个属性,所以不用考虑思源能否区分,只用问思源的实现是什么样的。据我所知,y应该是列表项,z应该是标题块。

之所以说技术上最简单,也是这个原因。

@LoneFireBlossom
Copy link
Author

x会传递全部

这个在反链面板上能看到孙子级别的“c和d”那一部分吗?也就是比如下面这种情况,有的用户是这样用的,孙子级别的内容,在反链面板上会折叠。在这样修改之后能保持这种逻辑吗?如果能的话我觉得就没什么问题了
image

@hqweay
Copy link

hqweay commented Apr 20, 2024

把 通过在第一行建立双链将文档传递给主题 换个说法——将建立在第一行的双链作为当前文档想要传递过去的主题,似乎可以展示出 这样做的不协调之处。

对于一个普通用户来说,我打开文档第一行写的内容居然有点其它作用(或者说副作用),是有点不符合直觉的。(虽然这点虽然可以靠用户的学习或者在设置里做开关屏蔽这层感知)

如果需要通过这样来实现。我期望在系统级别提供一些能区分正常双向链接的双向链接来实现。

比方说在用户层面,我使用如下图中特殊的双链才会被当做文档的传递链接。而正常的双链不会被用于文档的传递。

image

在 App 层面可以提供开关?

这里只是举个例子。我觉得达到的效果最好是 尽量满足 除非用户知道自己做的操作有什么作用,不然不要增加其它作用。

  • 如果文档的传递双链与标题可以统一的话,我觉得文档下写双链可以作为传递使用还挺好的。可以当作思源的特色,在文档型笔记上使用传递双链的一种使用方式。【有朋友觉得第一行被单独对待有点污染正文之类的,我觉得问题不在于第一行被单独对待。大纲型的双链的第一个节点也被单独对待了。只是这里 文档传递双链使用的方式 与 大纲型的方式有点不同。需要用户再接受一下。】
  • 如果不能统一,第一行的双链应当有所区别(思源本体不支持也无妨,这点社区可以通过自定义 CSS 实现)、提供设置(比如一些笔记软件会有「是否将第一行显示为标题」)?
  • 否则,仅仅正文第一行的双链被特殊对待,且是为了文档传递。拿这一点来说,我们的需求是将文档传递给一个主题,感觉给文档右键增加个「添加引用至」之类的实现说不定更合适点……

比方说 我在一篇文档内需要它可以被『传递』至另一个主题时,会使用 移动 将文档移过去。只是这样无法应对多主题、块级主题以及反链……

最后,如果 标签 和 块 能统一的话就好了……
如果 标签 和 块 能统一的话就好了……

@LoneFireBlossom
Copy link
Author

LoneFireBlossom commented Apr 20, 2024

Reference

别看1楼了 看下面新的提案吧。
新的提案针对各种块都有了一个统一的解决方案,非常合理。不止是文档块,标题块,超级块也可以。

@LoneFireBlossom
Copy link
Author

对于一个普通用户来说,我打开文档第一行写的内容居然有点其它作用(或者说副作用),是有点不符合直觉的。(虽然这点虽然可以靠用户的学习或者在设置里做开关屏蔽这层感知)

在新的提案里,针对你的疑虑,我的观点是,除了真的想这么干的人,没有人会专门留出一行来只写双链,不管到底是文档的第一个段落块还是其它任何地方的段落块。会这么干的人,就是知道这样做意味着什么的人。如果他们不想这么干,那么就不会这么写,这是非常自然的选择,就像大纲的传递型双链一样,这就是规则,要么遵守,这样内容就会传递过去;要么不遵守,这样内容就不会传递过去。这非常好控制。

@TCOTC
Copy link
Contributor

TCOTC commented Apr 20, 2024

对于一个普通用户来说,我打开文档第一行写的内容居然有点其它作用(或者说副作用),是有点不符合直觉的。(虽然这点虽然可以靠用户的学习或者在设置里做开关屏蔽这层感知)

除了真的想这么干的人,没有人会专门留出一行来只写双链,不管到底是文档的第一个段落块还是其它任何地方的段落块。会这么干的人,就是知道这样做意味着什么的人。

我也觉得,正常人没了解过传递型双链的怎么可能自己弄出来传递型双链。本身用双链的人就少,不太可能影响普通用户。

@hqweay
Copy link

hqweay commented Apr 20, 2024

对于一个普通用户来说,我打开文档第一行写的内容居然有点其它作用(或者说副作用),是有点不符合直觉的。(虽然这点虽然可以靠用户的学习或者在设置里做开关屏蔽这层感知)

在新的提案里,针对你的疑虑,我的观点是,除了真的想这么干的人,没有人会专门留出一行来只写双链,不管到底是文档的第一个段落块还是其它任何地方的段落块。会这么干的人,就是知道这样做意味着什么的人。如果他们不想这么干,那么就不会这么写,这是非常自然的选择,就像大纲的传递型双链一样,这就是规则,要么遵守,这样内容就会传递过去;要么不遵守,这样内容就不会传递过去。这非常好控制。

你讲得很好。我全文和你观点差不多,只是 你引用的这点 我落足在有无,你落足在概率。概率层面没有统计数据支撑,大家只是偏好不一样。(另外我也同意一般人不会这么用,而且就算这么用了也不会导致太大问题。)

不过如果标签重构有计划的话,这个 issue 交给标签体验可能会好些。

@LoneFireBlossom
Copy link
Author

不过如果标签重构有计划的话,这个 issue 交给标签体验可能会好些。

我不同意这点。
这无非就是把大纲的传递型双链搬到非大纲的地方而已,咋就和标签扯上关系了……
大纲的传递型双链不需要(双链式)标签就能完成,那非大纲的也不需要啊。

@hqweay
Copy link

hqweay commented Apr 20, 2024

不过如果标签重构有计划的话,这个 issue 交给标签体验可能会好些。

我不同意这点。 这无非就是把大纲的传递型双链搬到非大纲的地方而已,咋就和标签扯上关系了…… 大纲的传递型双链不需要(双链式)标签就能完成,那非大纲的也不需要啊。

你讲的我同意。这无非就是把大纲的传递型双链搬到非大纲的地方而已——确实,不过如果标签和双链能统一,文档和标题以及其它块的传递就能有一致的用法了。

@LoneFireBlossom
Copy link
Author

你讲的我同意。这无非就是把大纲的传递型双链搬到非大纲的地方而已——确实,不过如果标签和双链能统一,文档和标题以及其它块的传递就能有一致的用法了。

目前来看标签和双链不可能做到类似Roam Research和Logseq那样的统一,因为思源的文档标题只是纯文本,写不了ID,从根本上就做不到这一点。想要统一就得改这个底层设计。
不解决这一点而提出的方案都不算是“统一标签和双链”。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

10 participants