在Mathematica中用方括号包裹文本选择

5

有没有一种方法可以在Mathematica笔记本中选择一些文本,然后将该选择用括号括起来?

例如,如果我在笔记本中键入以下内容:

1, 2, 3, 4

我希望能够选择所有文本,然后键入相应的命令来插入匹配的花括号(在Linux上是alt-}),它会将所选内容包装在花括号中。
{1, 2, 3, 4}
1个回答

6
以下函数添加了一个命令,基本上做了你要求的事情。
如所写,它占用了控制+U键组合(通常是“下划线”)。您可以很容易地更改它。它还将“制作列表”项添加到插入菜单中,但我想您只会使用快捷键组合。
此修改仅在当前会话中持续存在,但您可以将该函数添加到初始化文件中以在启动时加载。还有其他永久添加功能的方法,例如通过编辑KeyEventsTranslations文件,如这里
一旦运行实现函数,它就可以使用Control+U执行。
FrontEndExecute[
 FrontEnd`AddMenuCommands["DuplicatePreviousOutput",
  {Delimiter, MenuItem["Make List",
    FrontEnd`KernelExecute[
     nb = SelectedNotebook[];
     sel = NotebookRead[nb];
     NotebookWrite[nb, Cell[BoxData[RowBox[{"{", sel, "}"}]]]]],
    MenuKey["u", Modifiers -> {"Control"}], 
    System`MenuEvaluator -> Automatic]}]]

在输入并选择了: 1、2、3、4之后

按下Control+U

{1, 2, 3, 4}

附加说明

这里是一个版本,您可以使用它来替代您的MenuSetup修改。它设置为在“{”键按下时激活,并将包装选择或只匹配括号。将其放入MenuSetup中并不那么直接;我会通过使用KernelExecute从MenuSetup调用外部程序来完成。将下面的代码放入init文件中同样有效。

FrontEndExecute[
 FrontEnd`AddMenuCommands[
  "DuplicatePreviousOutput", {Delimiter, MenuItem["Make List",
    FrontEnd`KernelExecute[
     nb = SelectedNotebook[];
     sel = NotebookRead[nb];
     If[sel === {},
      FrontEndExecute[FrontEndToken["InsertMatchingBraces"]],
      NotebookWrite[nb, Cell[BoxData[RowBox[{"{", sel, "}"}]]]]]],
    MenuKey["{", Modifiers -> {}],
    System`MenuEvaluator -> Automatic]}]]

哇,太棒了。说实话,我一开始还怀疑这是否可能。 - Sean Lynch
我在我的MenuSetup.tr文件中有MenuItem["Matching {}", "InsertMatchingBraces", MenuKey["{", Modifiers->{}]],这样键入'{'就会自动成对。现在我想采用您的答案,使其在没有选择时只打印匹配的括号,但如果有选择,则将其包装。 - Sean Lynch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接