关于反链整理,仍需改进的几个点

本贴最后更新于 560 天前,其中的信息可能已经时移世异

首先,很欣喜 2.3.0 带来了期待已久的编辑器式反链面板,相关的大部分需求都实现了,感谢 D 和 V。但还有几个比较重要的点还未实现,在此我再列出一下我的想法建议,也想听听大家的意见。

  1. 我在 https://github.com/siyuan-note/siyuan/issues/3565#issuecomment-1139301877 里提到目前的引用块无法保留其原文的格式,在 2.2.0 实现了行级嵌套文本格式后,这点缺陷显得更加突出,当然,文本内的公式、图片等等也无法被保留,列表子块也无法被保留。这就使得反链整理汇总后能看到的只有一堆链接状的锚文本,还得鼠标移到锚文本上才能看到原文的排版格式。这样一来,反链整理仅仅只是做了链接的整理,而非内容本身的整理,并未达到“反链即正文”的效果。Issue #4830 · siyuan-note/siyuan 也提到了同样的问题。

    即便对引用块使用转换为“文本 *”,仍然无法保留原始文本格式,转换后的锚文本成了没有任何格式的纯文本,并且同样不会包含列表子块。刚刚新增的转换为“定义块”和“定义块及其子块”的功能倒是可以实现保留原始文本格式和所有的子块,希望这两个功能项可以整合下,即转换为“文本 *”的时候(当然也包括转换为文本、静态锚文本),转换后的文本能够像转换为定义块那样保留原始格式。从形式上来说,这其实就相当于 Ctrl+C、Ctrl+V 然后再加一个星号锚文本,当然,这里要考虑是否包含列表块子块。

  2. 目前的反链交换功能无法处理原始素材多版本化、多副本整理的情形,我在 特性提议:块引用与所引用的内容块进行交换 - mowangmm 的回帖 里有详细举例。简单来说,一段内容,我用传递型双链同时链接了 A 和 B 两个主题,然后当我在整理 A 时,使用反链交换把原文置换到了 A 里,而在素材录入处(比如 daily notes)留下了指向 A 的引用块。此时当我再想整理 B 的时候,可就麻烦了,因为在整理 A 的时候,经过一系列拖拽、置换操作,传递型双链很可能已经丢失了(因为是传递型,整理的时候只会拿它下面的内容),那这时候 B 怎么知道要去 A 里找素材呢?就算知道,难道 B 要再跟 A 来一次置换吗?

    其实会看反链交换这个功能需求最初提出的背景,就不难看出正是因为引用块锚文本没法保留原始格式,所以才想到要不直接把原文置换过来,如果锚文本可以保留原始格式,那是不是就不需要置换了?而且目前的置换操作还会导致整个 UI 要刷新,体验不好。所以这个问题的解决办法跟上一条是一样的。

  3. 既然目前已经有按 Alt 键拖拽为引用块、按 Shift 键拖拽为嵌入块,那么能否增加一个快捷键可以直接拖拽为“文本 *”形式?否则还得先拖拽为引用块,再用右键菜单转换为“文本 *”,操作起来就比较麻烦了。

引用块本身就不适用于大段文字,它更多是作为短语、短句跟相关的参考信息之间建立链接用的,并且引用块和行内引用其实是一码事,所以引用块应当更适用于传递型双链和关联型双链。如果把引用块作为反链整理的排版形式,那显然是不合适的。反链整理的过程就像写论文的过程,素材本身就是那一个个“参考”,所以最舒适的排版形式还是“文本 *”。

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    18614 引用 • 69265 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
    1. 引用锚文本无法渲染会定义块的原样的
    2. 同上
    3. 不确定是不是高频操作
    1 回复
  • 当 反向链接 的数量为 0、提及的数量大于 0 的时候,

    提及这个板块,默认是从编辑器的中间开始显示的,而反向链接问部分是空的。于是上面的空间都浪费了。

    可否这样:

    (1)当反链接板块中的文字的显示长度小于某个值的时候,提及 部分自动贴上去?

    (2)或者简单一点,当 反向链接 的数量为 0 的时候,提及 部分自动贴上去?

    (3)建议,当 反向链接 的数量为 0 的时候,在 反向链接 几个字后面显示数字 0

    image.png

  • (4)或者干脆,把 反向链接 和 提及,做成两个不同的按钮。

  • mowangmm 2 赞同

    所以我在最后说了,引用锚文本其实不适合反链整理这种需求场景,更合适的就是复制原始的富文本,再加一个小的锚文本。其实我可以通过以下几步来实现这个需求:

    1. 在反链面板里折叠列表块(目的是确保其子块会被一并纳入操作,关于子块方面的改进属于另一个话题了)
    2. 对该列表块使用 Ctrl+C 复制,然后在主题页里 Ctrl+V 粘贴到所需的位置
    3. 在后面手动写上一个“[参考]”(或者星号),并作为锚文本引用原文(这里还需要先复制一下原文块的引用链接)

    这几步操作完全没有改变思源现有的设计和逻辑,只是操作起来比较麻烦,所以如果能给这几步来一个一键操作就能满足我的需求了,D 大并不必把它想得太复杂。

    1 回复
  • Alt 加拖拽呢?

    1 回复
  • mowangmm

    Alt 加拖拽是复制为引用块吧?这样原文排版格式就没了,而且针对列表块只能保留拖拽的那一级,而不能带上其子级。

    我不太清楚从实现原理上来说,反链交换(转换为定义块)的时候是整个块(包括 ID)互换还是仅块内的内容互换,您说引用锚文本无法渲染回原文,给我的感觉就是要交换的话就是整个块交换。我觉得既然数据都是 json,结构都是一致的,而且引用关系都在,那是否可以从引用块查到其引用的原文块的“内容”部分的 json 数据,然后直接覆盖到引用块的内容部分,这样是不是就实现把原文带上格式和子级全部迁移过来了。不是很明白为什么转换为定义块可以做到把原文格式迁移过来,而转换为文本 *却不行;,如果能在转换为文本 *上实现保留原文格式,应该很多人都会喜欢上这个操作的(所谓高频操作)。

    如果上述方案不行,那更简单的方法就是按照复制粘贴再加星号锚文本,这样是不需要增添新的技术实现的。实在不行我兴许可以研究下 quicker 之类的快捷操作辅助工具能不能帮我做这个事情,可能也还是得借助 API,所以还是希望官方能实现一下这个需求。

    1 回复
  • 我还是没太理解你的意思,估计你得直接帮忙整理下需求,不用考虑实现,谢谢。

    1 回复
  • mowangmm

    需求就是:我希望从反链面板中拖拽素材到主题文档内时,既能保留素材的富文本格式和子级,又能创建从主题文档到原始素材的引用链接,同时原始素材保持在原有位置不变。

    在现有条件下如果要满足这一需求存在什么问题:

    1. 如果用 Alt+ 拖拽复制为引用块,则无法保留原始素材的富文本格式和子级
    2. 如果先复制为引用块再使用转换为文本 *,同样无法保留原始素材的富文本格式和子级
    3. 如果先复制为引用块再使用转换为定义块及其子级,则无法保留指向原始素材的引用链接(虽然有引用计数),并且更大的问题在于原始素材所在的位置被置换成了引用块,这样不便于其他主题再次使用这一素材
    4. 如果直接对素材进行复制粘贴(不使用引用、嵌入等等,就是 Ctrl+C 复制)到主题文档,并手动创建一个星号锚文本引用原始素材,可以实现该需求,但操作步骤比较麻烦

    我这样说可以理解了吗?

    1 回复
    1 操作
    mowangmm 在 2022-10-09 11:17:35 更新了该回帖
  • 大概明白了,我们应该搞个 4 的一键简化对吧:带层级复制块并且复制完成后在顶层行级末尾追加 文本 * 指向原始定义?

    我演示一下操作你看下:

    issue.gif

    1 回复
  • mowangmm

    对的对的,就是这个意思,感谢

    不确定是否需要像转换为定义块功能那样区分带子级和不带子级,反正我自己的使用习惯是都带子级。

    另外,演示动图里“原始定义”四个字在反链面板里是带链接的锚文本形式,所以复制到输出文档后可以直接在锚文本上转换为文本 *;但我说的需求里,复制过来的时候可能不是锚文本,类似于直接从“一些补充和素材”这级开始复制(传递型双链的用法),这时候就不能直接使用转换为文本 *,所以我才说得手动在后面创建一个星号。这个区别需要考虑进去。

    1 回复
    2 操作
    mowangmm 在 2022-10-09 14:12:30 更新了该回帖
    mowangmm 在 2022-10-09 14:09:20 更新了该回帖
  • 那是不是直接加一个带文本 * 的引用复制更好一点,和反链没什么关系。

    1 回复
  • mowangmm

    可以这样认为,选择一个原始素材(不管是从反链面板选择还是从别的文档中选择,不管选哪一级)进行复制,然后在目标文档中原模原样地粘贴,并在顶层行末尾创建一个*号引用指向原始素材刚才选的那一级

    应该说也不是跟反链完全没关系吧,反链整理算是其中一种使用场景。我举的例子是传递型双链的,所以复制的时候没有带反链本身,但如果是关联型双链,复制的时候就会带上反链本身。总之操作上是一致的,具体用在哪里因人而异

    1 回复
    2 操作
    mowangmm 在 2022-10-09 22:45:18 更新了该回帖
    mowangmm 在 2022-10-09 22:40:15 更新了该回帖
  • 好的,我们先记录这个需求 Issue #6115 · siyuan-note/siyuan

    有一些细节还需要考虑和讨论一下。比如划选复制多个块以后,用于转换文本 * 的“这一级”如何确定:如果是在列表中应该是选择上一级父列表项,但是在普通段落中,估计只能选择第一个段落,有啥建议不?

    1 回复
  • mowangmm 1

    说的是这个星号引用链接到素材原文的哪一级是吧?

    列表情况 1(树形结构且只有一个顶层):

    • A
      • aa
        • 啊啊啊

    这时候如果复制的是 A,那么 * 就链接到 A;如果复制的是 aa 那么就链接到 aa,以此类推。

    列表情况 2(有多个平级):

    • A
      • aa
        • 啊啊啊
      • bb
    • B
      • dd

    这时候如果复制的是 aa 和 bb,那么 * 似乎应该链接到 A,但如果复制的是 A 和 B,它俩没有共同父级了,那么似乎就只能链接到 A。

    这里还存在一个复杂情况就是如果复制的是 bb 和 B,这时候链接到谁似乎都不太合适,而且在目标主题里,* 创建在哪一级后面也是个问题。

    非列表情况:

    AAA

    BBB

    这时候如果复制了 AAA 和 BBB,似乎只能链接到 AAA。

    这样分析下来感觉情况变得很复杂了,我觉得要简单解决的话,目前能想到的有两个思路:

    1. 无论哪种情况,* 都创建在第一个最靠顶层的块后面,链接指向的也是原文中同样的块。也就是说:
      • 列表情况 1,如果复制的是 A,则* 创建在 A 后面,指向原文的 A;aa 同理。
      • 列表情况 2,如果复制的是 A 和 B,则 * 创建在 A 后面,指向原文的 A;aa 和 bb 同理。如果复制的是 bb 和 B,则 * 创建在 B 后面,指向原文的 B。
      • 非列表情况,如果复制的是 AAA 和 BBB,则 * 创建在 AAA 后面,指向原文的 AAA。
    2. 限制划选复制的素材范围,只能有一棵树。即列表情况 2 中,不允许同时选择 A 和 B,或者同时选择 aa 和 bb,或者同时选择 bb 和 B;非列表情况不允许同时选择 AAA 和 BBB。要操作的话必须分开操作多次。这样可以确保 * 反链的创建一定是准确的,只不过会多创建一些,在有快捷键的情况下,一次只能操作一个段落或者一个树形列表应该也不会太麻烦。

    暂时没想到更好的办法,希望能够听听其他人的意见。

    1 操作
    mowangmm 在 2022-10-09 23:52:00 更新了该回帖
  • mowangmm

    @88250 我刚看了下目前的反链面板里,如果选了多个同级块,右键菜单里也是不会再有复制为引用块了,也就是说逻辑上限制复制为引用块操作时不允许选择多个同级块。

    image.png

    如果强行 Alt+ 拖拽操作,也只会建立第一个块的引用。

    image.png

    所以我觉得这个逻辑应该是统一的,比较类似于我上面说的第 2 种思路。

    另外我试了下目前的多选貌似是不会有我上面说的选择 bb 和 B 的情况,如果选择 bb 和 B,那么会直接把整个 A 也都选上,于是变成了选择 A 和 B。这个逻辑我估计也没法打破了。

    image.png

    1 回复
  • 嗯,选择块的逻辑估计不会变,后续主要就是考虑顶层节点作为引用定义的选择。

请输入回帖内容 ...

推荐标签 标签

  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖 • 36 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    28 引用 • 108 回帖 • 2 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    45 引用 • 113 回帖 • 317 关注
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 45 关注
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 69 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    35 引用 • 35 回帖
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 107 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 512 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    523 引用 • 4581 回帖 • 692 关注
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    131 引用 • 3639 回帖
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 603 关注
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    76 引用 • 37 回帖
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 602 关注
  • 音乐

    你听到信仰的声音了么?

    59 引用 • 509 回帖
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    228 引用 • 1450 回帖
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    77 引用 • 1741 回帖
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 620 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    138 引用 • 268 回帖 • 199 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    215 引用 • 462 回帖
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    18614 引用 • 69262 回帖 • 1 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    915 引用 • 931 回帖
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 635 关注
  • OnlyOffice
    4 引用 • 27 关注
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    491 引用 • 1383 回帖 • 373 关注