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

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

首先,很欣喜 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 键拖拽为嵌入块,那么能否增加一个快捷键可以直接拖拽为“文本 *”形式?否则还得先拖拽为引用块,再用右键菜单转换为“文本 *”,操作起来就比较麻烦了。

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

  • 思源笔记

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

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

    28443 引用 • 119762 回帖

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • 我还是没太理解你的意思,估计你得直接帮忙整理下需求,不用考虑实现,谢谢。

    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 更新了该回帖
  • 大概明白了,我们应该搞个 4 的一键简化对吧:带层级复制块并且复制完成后在顶层行级末尾追加 文本 * 指向原始定义?

    我演示一下操作你看下:

    issue.gif

    1 回复
  • mowangmm

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

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

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

    1 回复
    2 操作
    mowangmm 在 2022-10-09 14:12:30 更新了该回帖
    mowangmm 在 2022-10-09 14:09:20 更新了该回帖
  • 查看全部回帖

推荐标签 标签

  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 56 关注
  • Anytype
    3 引用 • 31 回帖 • 58 关注
  • Access
    1 引用 • 3 回帖 • 14 关注
  • 安全

    安全永远都不是一个小问题。

    202 引用 • 818 回帖
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    140 引用 • 407 回帖
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    6 引用 • 144 回帖
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 668 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    348 引用 • 765 回帖 • 2 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    119 引用 • 54 回帖
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 577 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 18 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    12 引用 • 5 回帖 • 660 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    56 引用 • 85 回帖
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    39 引用 • 170 回帖
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 98 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    61 引用 • 29 回帖 • 14 关注
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    92 引用 • 752 回帖
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖 • 1 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 516 关注
  • Sym

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

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

    524 引用 • 4602 回帖 • 731 关注
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    293 引用 • 4496 回帖 • 688 关注
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    10 引用 • 80 回帖 • 1 关注
  • 印象笔记
    3 引用 • 21 回帖 • 2 关注
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 623 关注
  • Linux

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

    960 引用 • 946 回帖 • 1 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 475 关注