乳胶包polyglossia允许正确排版外语:它提供\text[foreign_language]{...}
形式的内联命令,例如\textspanish{Soy el hijo de Fernando}
。
由于我使用Emacs,因此我必须阻止自动填充模式分解这些代码块:例如,使用\textspanish{Soy el
结束一行,然后使用hijo de Fernando}
开始下一行。当自动填充模式以这种方式打破线条时,导出器会感到困惑。
我尝试创建一个函数来添加为fill-nobreak-predicate
的钩子,但我对正则表达式和elips的了解还不够好。这是我得到了多远:
(defun foreign-language-nobreak-p ()
(or (looking-at "[[[:space:]]\|[[:print:]]].*}")
(save-excursion
(skip-chars-backward " \t")
(unless (bolp)
(backward-char 1)
(looking-at ".*\\text")))))
(add-hook 'fill-nobreak-predicate #'foreign-language-nobreak-p)
关于出了什么问题的任何想法?
答案 0 :(得分:0)
首先,感谢你指出bookmarks.xml
。在Emacs的前23年里从未听说过它。
关于你的正则表达式问题,我想提一下函数fill-nobreak-predicate
,它接受一个字符串列表并构建一个匹配这些字符串的高效正则表达式:
regexp-opt
如果您将支持的语言分解为另一个变量,您还可以使用循环构建字符串列表,添加(defvar foreign-lang-re
(regexp-opt
'("\\textspanish{"
"\\textrussian{"
"\\textfrench{")))
和尾随\text
。
如果您的启发式方法足够稳定,当您在当前行的某处只有开启命令时,您不希望自动填充启动,则可以使用{
,如下所示:
thing-at-point
当您使用(defun foreign-language-nobreak-p ()
(string-match
foreign-lang-re
(thing-at-point 'line t)))
关闭命令时,这不起作用。为了更好地工作,您需要从当前点向后搜索优化的正则表达式并向前搜索结束大括号,分别将搜索限制为}
和(bolp)
。如果你开始在(eolp)
命令中使用带花括号的其他命令,这将变得非常毛茸茸。
希望有意义并且有所帮助。