-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
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
Comments
所言极是,这也是我一直觉得Dailynote流程在思源上用的怪怪的地方,没有文档级别的传递型双链。 |
可以用标题来实现的: 前期设计讨论参考 #7444 我先关闭了,如果还有问题请继续跟帖,谢谢 🙏 |
#10919 我觉得最方便的解决办法就是这个issue的把标签功能重构,这样就能实现lsq那种标签管理主题文档的方式实现诉求了,这个问题也就顺便解决了,另外现在带引用的标题拖到文档树里面标题变成文章名称后传递引用就消失了,当然这个例子比较极端,要写文章或整理的时候可以单独新建个文档整理,但总归不是太自然 |
我寻思我在正文写的很清楚了,针对这一点进行了反驳,开发者你为什么要重复一遍我已经反驳过的话然后把issue关闭呢? |
呃,这个功能已经实现了啊,用标题可以传递。 但是如果你说的是文档标题的话……实现不了,因为目前文档标题上无法做元素,都是纯文本。 |
功能确实实现了,就是不够优雅,用标题写传递我也觉得很不像传统标题的用法。 |
@5kyfkr 但我看楼主原文说的是没有实现方式:
目前标题传递这个肯定是动不了了,因为已经有用户这样用。重构标签那个可以继续在 #10919 中讨论,不是一时能够决定的。 @LoneFireBlossom 请问你还有什么疑问吗? |
不你不能只看TLDR啊……前面也得看一遍啊……要不然我写前面那些干啥…… |
我在1楼已经针对“用标题传递”这种方式进行了反驳啊…… |
@88250
|
标题(H1-H6)里面加引用好像没有啥奇怪的吧? |
抱歉,我又看了一遍,应该理解你的诉求了,你希望在文档块这一级实现传递对吧?如果用 @5kyfkr 提到的 #10919 的思路来解决的话,可以考虑文档中第一个段落块中仅存在标签元素时传递。
上面的方案认为是否有可行性? |
|
@LoneFireBlossom 上面回帖刚刚更新,麻烦看下。 |
应该是吧,我不清楚开发者的概括是不是和我想的一致……
我觉得这个描述挺完整的,应该没有需要补充的地方了。 |
我补充一点,markdown里面1级标题一般就是指文档标题,所以如果在一级标题写上传递引用也是很怪的行为,相当于给文档标题加传递双链,但是拖到文档树就丢失了 |
标题转换文档这个恐怕没有办法,因为标题转换文档以后文档标题不支持元素。 |
按照现在的引用元素也可以,那就是第一个段落块中仅存在引用元素时传递;之前提到的标题(H1-H6)转换文档时丢失传递也可以在转换时自动添加第一个块并插入引用,不过这样会改动原有正文,得再考虑一下是否妥当。 |
能新增一种块类型嘛,就叫传递块,一个文档或标题下只能有一个传递块,有这个块的就会把文档和标题传递. |
为什么要在标题上加上双链呢,我不懂。
|
是的,我理解你的意思,我也没用过标题里写传递双链 |
大纲里的传递型双链也没有专门设计一个块,我的提案是参照大纲传递型双链的设计思路想的,我觉得这样就挺好用的,没有必要增加一个实体,增加这个实体很麻烦啊,还得加上这种一看就感觉可能实现起来很麻烦或者容易带来bug的限制。
我觉得这样不好。我为啥要单独开一个窗口写双链啊,很麻烦的。大纲里面写传递型双链很简单,参照这个来就好了呀。 |
标题里存在引用这个不做讨论了,这样用的场景也有,况且已经肯定有用户这样用了,木已成舟。 新加一种“传递”元素不大可行,这样会引入更多实体,更复杂了。使用属性也不大可行,原因同上。这一点我和 @LoneFireBlossom 持一致的意见。 现在咱们确认一下,是不是文档中第一个段落块中通过引用来传递? |
细想我那两个说的确实也不妥,最简洁的现有应该就是按第一个段落块识别了 |
是的。 |
好的,稍后我看看实现细节有没有什么问题,感谢讨论。 |
如果是基于平时在双链中用“原子化/卡片化”的方式积累,那么这篇文章就是这些积累的成果。每一个知识点各自有自己的传递型双链(至于愿意打什么双链,就看需要传递到什么主题);而这篇文章是基于这些积累的输出文,应该是自己笔记库中已有内容的重新整合,所有内容在笔记库中都有一份记录,所以这篇文章,单独放在一个「已发布文章」的笔记本里得了。 其次,如我之前所说,我不需要无压。 |
我更新了一下1楼,更新了一下这几种方案的问题,然后做了一个总结。
|
我提出一个更统一、技术难度可能更低的改进方案: 假如一个叶子块只包含双链的内容,那就传送它的直接父级。 换而言之,会实现以下的效果
|
@zxhd863943427 这个方案至少比本 issue 的方案复杂,而且在前面已经被 D 大否掉了:
|
在技术上不是,因为需要判断是否为文档下的第一个块,必须要进行读取文件操作,而不能只查sql表。 |
所以重构标签也是一条路,直接能得到文档级别的关联,我个人觉得重构标签在习惯上会更容易接受点,目前我最喜欢这里面的方案二#11025 |
如果能这样实现,那就更好了 |
论坛新发现的数据库当标签用法,除了没有反链面板和父子标签层级,能解决文档分类问题,可以先顶着用用https://ld246.com/article/1713258387572 |
这个还是只能临时用用,因为「没有反链面板和父子标签层级」,所以没法替代双链和标签 |
x会传递全部,ab传递相同的列表项,也就是a所对的列表项及其子级,cd分别传递各自的列表项及其子级。 第二个例子,我必须说明的是,这个设想是直接基于思源的sqlite数据库表中已有的parent-id这一个属性,所以不用考虑思源能否区分,只用问思源的实现是什么样的。据我所知,y应该是列表项,z应该是标题块。 之所以说技术上最简单,也是这个原因。 |
别看1楼了 看下面新的提案吧。 |
在新的提案里,针对你的疑虑,我的观点是,除了真的想这么干的人,没有人会专门留出一行来只写双链,不管到底是文档的第一个段落块还是其它任何地方的段落块。会这么干的人,就是知道这样做意味着什么的人。如果他们不想这么干,那么就不会这么写,这是非常自然的选择,就像大纲的传递型双链一样,这就是规则,要么遵守,这样内容就会传递过去;要么不遵守,这样内容就不会传递过去。这非常好控制。 |
我也觉得,正常人没了解过传递型双链的怎么可能自己弄出来传递型双链。本身用双链的人就少,不太可能影响普通用户。 |
你讲得很好。我全文和你观点差不多,只是 你引用的这点 我落足在有无,你落足在概率。概率层面没有统计数据支撑,大家只是偏好不一样。(另外我也同意一般人不会这么用,而且就算这么用了也不会导致太大问题。) 不过如果标签重构有计划的话,这个 issue 交给标签体验可能会好些。 |
我不同意这点。 |
你讲的我同意。这无非就是把大纲的传递型双链搬到非大纲的地方而已——确实,不过如果标签和双链能统一,文档和标题以及其它块的传递就能有一致的用法了。 |
目前来看标签和双链不可能做到类似Roam Research和Logseq那样的统一,因为思源的文档标题只是纯文本,写不了ID,从根本上就做不到这一点。想要统一就得改这个底层设计。 |
关于讨论到的「使用第一个块进行传递」这一点。我提个小补充。 在上次我在 issue 里面发自己的观点的时候,我是不太同意 D 的「使用第一个段落块」做传递这个方案的。不过这段时间在折腾 JS 查询的时候,我自己实现了一个类似他说的逻辑。实际体验下来感觉还可以接受,最重要的是实现起来足够简单。 ✨ 代码上的实现,基于的是之前我请 D 做的一个
实现的方案实际上非常简单,大致的逻辑是:
🧪 我这段时间的感受是,体验效果比想象中要好。最然一开始会觉得第一个段落块用来做传递有点怪,但是习惯了之后其实还是比较方便的。 这里给的一个案例,我在使用 JS 查询,将当前文档的所有反链查询出来之后;通过「传递」后处理操作,把段落块分别映射到标题、文档当中。这样在汇总的结果中,就可以直接悬浮显示整个标题、整个文档,而非仅仅是那一个段落。 🤔 以上方案的优缺点感受如下:
✅ 综上所述,我现在支持「基于第一个段落块」进行传递的方案。 |
我觉得可以复用标签的处理逻辑,文档增加一个按钮:添加引用块。然后输入框搜索对应的块进行添加,保存在 .sy 的格式类似于标签的 "tags": "todo,doing" ; |
引用都在段落块内。 更细的父块开关可以考虑:引述块、草鸡块、列表块、文档块、标题块。 |
还可以添加额外条件,引用只匹配最近的父块。更远的就不传递了。 最好与闪卡统一。我也尝试做了类似的功能。渐进学习插件的原地制卡功能。 ddddd.mp4 |
感觉可以统一成一个:容器块的首个子块 |
去掉首个。我在底部反链实现了。效果不错。
对于段落块,只要父块不是文档。就用父块。
可以传递标题和之下的内容。
…---原始邮件---
发件人: "Jeffrey ***@***.***>
发送时间: 2024年12月23日(周一) 晚上6:15
收件人: ***@***.***>;
抄送: ***@***.******@***.***>;
主题: Re: [siyuan-note/siyuan] 支持针对文档块的传递型双链 (Issue #10990)
更细的父块开关可以考虑:引述块、草鸡块、列表块、文档块、标题块。
感觉可以统一成一个:容器块的首个子块
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you commented.Message ID: ***@***.***>
|
关于我的看法写在了:https://ld246.com/article/1736476952245 关联: #13776 |
思源笔记应该有针对「文档笔记」而非「大纲笔记」的「传递型双链」
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。 这些软件本来就只能写大纲,不能写文档。
思源不一样,思源既可以写大纲,又可以写文档。这是思源的优势。 而我真的非常抵制把一篇文章写成大纲的行文逻辑:
所以,我坚决不使用大纲。
但这样一来,如果我写文档笔记,我就没有传递型双链可以用。
我试来试去,试来试去,最终发现,自己只要想让一篇文档传递到对应的锚文本处,我就不得不用大纲。我也发帖问过:[对 daily notes 的传递型双链仍有使用上的一些困惑 - 链滴](https://ld246.com/article/1710773578174),但是大家都没有什么好办法。下面列举几种思路:
最直接的想法,当然是用一级标题写锚文本,之后写标题就用二级以下标题。
这样能解决问题,但是太蠢了,看到锚文本字号那么大真的很怪异,我接受不了。哪有这么用一级标题的,简直是浪费!总不能上CSS调整字号吧,那大纲里还能看到这一级标题呢,不还是别扭,这东西跑不掉,总归不是标题(Heading)的正常用法。
这里是一位用户选择的妥协方式:[我的 dailynote 流程(适合思源笔记软件 / 欢迎讨论) - 链滴](https://ld246.com/article/1658109483457)。如文章中描述,他的方法是,文章开头用一个六级标题写锚文本,然后下面正文写作时用列表来写。得,还是得用列表。而且还得用六级标题,六级标题被用在这种奇奇怪怪的地方,这位用户能接受,我接受不了,我心里觉得很别扭。
有一种方式可以写文档的行文逻辑,就是单项列表,即:
这样能解决问题,但是太丑了,为什么我要加一个列表……
用了这种方式就会给后来的块引用带来很大麻烦,如果要引用此单项列表中的任意块,那么输入提示中必定会同时包含此列表块,也就是块引用的输入提示中永远有干扰项,一旦不小心引用错误就要重新引用。
至于超级块,那就更不在讨论范围之内了。给每个文档都加一个超级块,一看就是很别扭的方式。
而且,就算接受了超级块的方式,更大的问题在于如果一个超级块里塞下超长的复杂嵌套内容,我相信肯定会卡顿,而且和前一种方案一样会导致块引用时的麻烦,此方案断不可行。
总结一下这四种方案的问题:
方案1是削足适履
方案2与之类似,代价还更大。
方案3、4由于性能问题和块引用失效的担忧、块引用输入提示时的干扰项增加而显然不可行。
我绝不会向列表屈服的。绝对。👊
TL;DR:
诉求
诉求分两层。
首先是最基本的:
对于一个文档块,如果我在文档块下面的第一行写且仅写了锚文本,那么这些锚文本就被视为传递型双链,即在相应的块的反链面板中,我能看到这篇文章的全部内容。例如这样:
我的需求就这些。
不过,针对「给文档设计传递型双链」的话,我认为还得加一条:
对于一个标题块(及从属于该标题块下的所有内容),如果我在标题块下面的第一行写且仅写了锚文本,那么这些锚文本就要被视为传递型双链,即在相应的块的反链面板中,我能看到这个标题块,及低于该标题块级别的全部内容(因为标题块是叶子块而非容器块,所以我找不到一个便捷易懂的描述方式……)。
显然这个实现逻辑和目前思源对列表中传递型双链的实现逻辑是一致的。
Describe the optimal solution
.
Describe the candidate solution
No response
Other information
No response
The text was updated successfully, but these errors were encountered: