4

有没有办法在 Mathematica 笔记本中选择一些文本,然后用括号括起来?

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

1, 2, 3, 4

我希望能够选择所有文本,然后键入命令以插入匹配的大括号(alt-}在 linux 上),它将选择包含在大括号中。

{1, 2, 3, 4}
4

1 回答 1

5

以下函数添加了一个命令,该命令基本上可以满足您的要求。

如所写,它采用 Control+U 组合键(通常是“下划线”)。你可以很简单地改变它。它还在“插入”菜单中添加了一个名为“制作列表”的项目,但我想你只会使用组合键。

此修改仅在当前会话中持续存在,但您可以将该函数添加到 init 文件以在启动时加载。还有其他永久添加功能的方法,例如通过编辑 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

控制+U

{1、2、3、4}

附录

这是您可以使用的版本,而不是您的 MenuSetup 修改。它设置为在“{”键按下时激活,并将包装选择或仅匹配大括号。将它放入 MenuSetup 并不是那么简单。我会通过从 MenuSetup 调用外部程序来做到这一点KernelExecute。将下面的代码放在 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]}]]
于 2012-12-06T10:50:20.587 回答