我正在尝试使用 Emacs 的
sentence-end
功能来浏览带有引文(以及句子之间的双空格)的文件,并且在尝试让 Emacs 识别一段时间后带有方括号/圆括号的句子时遇到了一些麻烦。例如:
Some text. "Some quote." (Something in parentheses.) Something with a citation.[cite] Some more text.
使用 Emacs 内置的
forward-sentence
和 backward-sentence
可以很好地处理上例中的第一个、第二个和第三个双空格断句,但无法识别第四个断句。
有趣的是,当一组括号就位时,强制执行
(setq sentence-end-without-period t)
似乎也会忽略双空格。在下面的示例中,Emacs 可以在句子一、二和三之间进行划分,但它会组合句子四和五:
Sentence one Sentence two. Sentence three Sentence four.[cite] Sentence five.
有没有办法让 Emacs 通过所有双倍行距实例来划分句子,至少在圆括号/方括号之后?谢谢!
用户选项的文档字符串
sentence-end-base
说,它是一个设置为a的变量
正则表达式匹配句子的基本结尾,不包括后面的空格。
目前默认的正则表达式是
[.?!…‽][]\"'”’)}»›]*
。它 转换为 匹配 .?!…‽
之一,包括后跟任意数量的 ]\"')}
。
因此,它应该识别您提供的测试片段中的句子,条件是右括号/括号之前有一个句点。
[我同意,我们可能会期望没有句号的句子被识别为具有
sentence-end-without-period
功能;这需要更多地了解函数 sentence-end
如何准确地利用这两个变量。看起来它仅适用于不涉及括号/括号的情况。这可能是 Emacs 行为中的一个错误,或者更可能是文档没有很好地解释它,所以 M-x report-emacs-bug
也许。]
如果默认行为不满足您的需求,调整
sentence-end-base
的值可能是一个解决方案。例如,将任何右括号(空格之前)视为带有 的结束句子的标记
(setq sentence-end-base "[.?!…‽][]\"'”’)}»›]*\\|]")
[下图使用了稍微不同的正则表达式语法。所有插图都与我在 Emacs 中的行为相符。]