Lyx:在数学宏中将光标设置在 {} 之间

Lyx:在数学宏中将光标设置在 {} 之间

我使用的是 LyX,并且设置了不少包含参数的自定义宏。例如,对于 3x3 矩阵,我使用\Mthree{...}代表...每个矩阵元素的 9 个参数。

但默认情况下,LyX 将光标定位在宏之后,而我需要返回并将光标定位在第一个参数上。

这非常不方便,而且一点也不自然。有没有办法让 Lyx 将光标定位在宏的第一个参数上?

编辑:GM 的答案确实有效,但我终于意识到我在表述问题时哪里错了,因为我已经在使用建议的输入方法了。我想问的不是如何完成宏的输入,而是如何让 LyX 在宏被赋予键盘快捷键时将光标定位在第一个参数上!因为在日常生活中,几乎所有的宏都分配了快捷键,以使书写更流畅。然后光标会自动定位在宏之后,而不是宏内。

我猜测这是无法做到的,需要在 LyX 中实现,但我想知道是否有人熟悉如何做到这一点。

答案1

要完成输入宏,请键入 Space,或使用 Tab 自动完成,例如:

  • \MthreeSpace
  • \MthrTab

答案2

您可以使用插入宏的命令序列,然后按下各种键来执行此操作。最直接的方式是:

command-sequence math-insert \Mthree{}{}{}{}{}{}{}{}{}; repeat 9 char-left

插入宏,然后按下 9 次左键。更灵活的版本:

command-sequence math-insert \Mthree{}{}{}{}{}{}{}{}{}; char-left-select; char-right

应该以第一个参数位置结束,无论宏的参数数量是多少,利用 char-left-select(=Shift-left)选择整个宏的事实,从而将光标放在它前面。

注意 {}:

对于至少有一个参数的自定义宏,

math-insert \foo

将吸收可能的选择作为其第一个参数,并将任何后续符号作为进一步的参数。如果没有选择,它将吸收以下符号作为参数。另一方面:

math-insert \foo{}{}

(如果有两个参数)将替换可能的选择,将其删除,但反过来不会吸收后面的符号。

这两个选项都不理想,但我更喜欢第二个,所以我添加了{}。

对于 LyX 原生命令(例如 \root 或 \sqrt)而言,它们至少需要一个参数,

math-insert \root

将可能选择的元素作为其第一个参数,但不吸收后面的符号。它还将自动将光标放在第一个参数中,就像您希望宏那样。

我无法使用命令序列完全重新创建本机行为。这:

command-sequence cut; math-insert \foo{}{}; repeat 2 char-left; paste

将选择内容放入第一个参数中,当没有选择时不会执行。但是您将丢失剪贴板内容。

我尝试使用命令替代项结合两个版本,但在命令替代项后使用命令序列似乎不起作用。

一种可能的解决方法是创建两个单独的快捷方式用于选择或不选择。

没有宏的替代方案

更好的替代方案可能是使用快捷方式直接输入整个构造而不使用宏。在您的示例中,有 LyX 命令可用于此目的:

math-matrix 3 3

对于数组,或

math-ams-matrix 3 3 pmatrix

如果你想要一个 pmatrix 或者类似的东西。

这避免了我上面描述的参数问题,并且还使您的源代码在传输给其他用户或文档时更加兼容。

对于没有专用 LyX 命令的其他构造,您可以再次使用命令序列。在您的示例中,您可以像这样手动构建上述内容:

command-sequence math-insert \array; repeat 2 tabular-feature append-row; repeat 2 tabular-feature append-column

甚至:

command-sequence math-insert \begin{array}{ccc} \\ \\ \\ \end{array}; up

与当光标位于 3x3 数组左侧时按右键相同,在数学插入部分之后,光标位于第二行的第一个字段,因此“向上”将其放置在第一行的第一个字段中。

相关内容