如何在粘贴时自动转换Part [[double-bracket]]?

Mr.*_*ard 7 import parsing wolfram-mathematica paste

我的一个小小的烦恼是使用双方括号Part而不是单个字符\[LeftDoubleBracket]\[RightDoubleBracket].我希望在将纯文本代码(例如StackOverflow)粘贴到Mathematica Notebook时自动替换它们.我一直无法配置它.

可以使用ImportAutoReplacements或其他自动方法(首选),或者我需要使用像这里引用的"粘贴表格数据调色板"这样的方法吗?

无论哪种方式,我不善于字符串解析,我想学习处理括号计数的最佳方法.


Sjoerd给了Defer和Simon给了Ctrl+ Shift+ N,这两个都导致Mathematica自动格式化代码.这些是很好的选择.

我仍然对一种自动和/或保留尽可能多的原始代码的方法感兴趣.例如,以原始形式维护前缀f@1,中缀1 ~f~ 2和后缀1 // f函数.


该问题的一个小节被重新发布为字符串中的匹配括号,并收到了几个好的答案.

Sjo*_*ies 2

并不是真正的答案,而是几周前数学组上出现了一个使用单次击键输入双 [[ ]] 对(光标位于两对之间)的线程。这对我没有帮助,但对于其他人来说这显然是一个解决方案。

编辑
以弥补我稍微偏离主题的第一反应,这里有一个模式替换,似乎可以完成这项工作(尽管我自己很难理解为什么它应该是 b 而不是 b_;后者不起作用):

Defer[f[g[h[[i[[j[2], k[[1, m[[1, n[2]]]]]]]]]]]] /. 
 HoldPattern[Part[b, a_]] -> HoldPattern[b\[LeftDoubleBracket]a\[RightDoubleBracket]]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我把自动化部分留给你。

编辑2
我发现,如果您将上述规则添加到 ImportAutoReplacements 并将您的 SO 代码粘贴到 Defer[] 的笔记本中并对其进行评估,您最终会得到一个带有双括号的可用表单,可以在其他地方用作输入。

编辑 3
正如 Mr.Wizard 在下面的评论中无形地指出的那样,替换规则不是必需的。Defer 会自行完成!比尔·沃特森(Bill Watterson)引用了科学进步的“混乱”。

博因克

编辑 4
对于 Defer,目前还没有定论。它有一些特殊的副作用,并且并非对所有表达式都有效。例如,尝试工具包问题中​​的“粘贴表格数据调色板” 。将这段代码粘贴到 Defer 中并执行会得到以下结果:
调色板

它在同一线程的另一个代码片段中效果更好:

在此输入图像描述

第二部分是通过编辑第一个块的输出将其转换为输入后的外观(基本上,我插入了几个回车符来恢复格式)。这会将其变成输入。请注意,所有双括号都变成了正确的对应符号,但还要注意 ReleaseHold 位置的变化。