我使用的是 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 数组左侧时按右键相同,在数学插入部分之后,光标位于第二行的第一个字段,因此“向上”将其放置在第一行的第一个字段中。