SublimeText Markdown Extended 添加罗马数字高亮

SublimeText Markdown Extended 添加罗马数字高亮

问题,我询问了如何突出显示多个 markdown 列表标点符号项。我现在想将突出显示扩展到罗马数字,因为 Pandoc 的扩展支持这些数字,我使用这些扩展从 markdown 源创建 PDF。

Markdown Extended syntax definition在中,line 1180我插入了以下内容regex

^\s{0,4}([0-9]+|[ivxlcdm]+|[IVXLCDM]+)\.(?=\s\w)

现在看起来像这样:

list-paragraph:
- match: \G\s+(?=\S)
    push:
        - meta_scope: meta.paragraph.list.markdown
        - match: ^\s*$
            pop: true
        - match: '^\s{0,4}([*+-])(?=\s)'
            scope: punctuation.definition.list_item.markdown
        - match: '^\s{0,4}([0-9]+|[ivxlcdm]+|[IVXLCDM]+)\.(?=\s\w)'
            captures:
                1: punctuation.definition.list_item.markdown punctuation.definition.list_item.number.markdown
                2: punctuation.definition.list_item.markdown
        - include: inline

我理解,这不会考虑罗马数字的有效性,但我无论如何都会正确输入它们,所以我不在乎它是否也会突出显示其他无效的罗马数字。此外,一旦 markdown 中的列表以有效数字开头,通常,i.编号会在创建 PDF 时由 Pandoc 自动计算,因此即使输入i.10 次,PDF 中仍将是 1 到 10 的罗马数字。

我使用以下正则表达式检查了这个在线正则表达式测试器和调试器。我使用的模式是mg,因为我在SublimeText 网站

正则表达式每次只能针对一行文本运行。

g在找到匹配项后继续匹配。 m使匹配项被视为^行的开始和$行的结束。

这就是我理解的 SublimeText 内部所做的事情。

我的测试文本如下:

## Normal Equation

When the number of features for an $x^{(i)}$ of the training data is not too high, maybe lower than $9000$, an alternative way to [gradient descent](#gradient-descent-algorithm) for solving the optimization problem of the [cost function](#cost-function), using the normal equation, is feasible.

The vector $\theta$, which contains the coefficients for the hypothesis function can be optimized in one step using the following formula:

$$\theta = (X^T X)^{-1} X^T y$$

Where $X$ is a matrix, is constructed as follows:


+as
+ as
-as
-asa
* asas
* asas

asas

1. 
2. 1212
3. 1212

qqq

I. asas
II. asa
III. asa

qqq

i. sa
ii. 1212
iii. asas

asdasd *asasas* 1. sadqwqe. *This is fat text!* **double** ewwrew ass a as as asa aas  asasasas  1. ewr34 43543

正则表达式的测试完全成功,它完全按照我想要的方式突出显示。但是,当我将其粘贴到 Markdown Extended 的语法定义中时,罗马数字保持白色,没有突出显示。

示例截图:

sublimetext 的屏幕截图没有突出显示罗马数字

所以我不知道正则表达式有什么问题。我需要如何更改它,以便也包含罗马数字(不一定是正确的、有效的罗马数字)?

附加信息

  • SublimeText 版本:3103
  • 操作系统:Xubuntu 14.04

答案1

正则表达式本身工作正常,但永远不会在编号列表中触发。您还必须将正则表达式调整693'^[ ]{0,3}([0-9]+|[ivxlcdm]+|[IVXLCDM]+)(\.)(?=\s)'。在此行中,list-paragraph上下文被推送。但是您应该知道,这也将被突出显示(并且已经突出显示):

1. ...
ii. ...

如果想避免这种情况,您可以添加上下文list-paragraph-roman并将其推送到罗马数字。

相关内容