![TextMate 2 + LaTeX 捆绑包。各部分的标签片段](https://linux22.com/image/297682/TextMate%202%20%2B%20LaTeX%20%E6%8D%86%E7%BB%91%E5%8C%85%E3%80%82%E5%90%84%E9%83%A8%E5%88%86%E7%9A%84%E6%A0%87%E7%AD%BE%E7%89%87%E6%AE%B5%20.png)
我正在尝试修改该部分标签的代码。
这是实际的代码
\section{${1:section name}} % (fold)
\label{sec:${2:${1/\\\\\w+\{(.*?)\}|\\\\(.)|(\w+)|([^\w\\\\]+)/(?4:_:\L$1$2$3)/g}}}
${0:$TM_SELECTED_TEXT}
% section $2 (end)
它的作用是,在您输入时将部分标题放入标签中,并将空格更改为下划线,将每个字符更改为小写。我希望它还能更改标签不支持的一些拉丁字符,例如:
a
进入a
é
进入e
í
进入i
ó
进入o
ú
进入u
ñ
进入n
它的作用如下:
\section{Configuración de diseño} % (fold)
\label{sec:configuración_de_diseño}
% section configuración_de_diseño (end)
这就是我想要它做的事情:
\section{Configuración de diseño} % (fold)
\label{sec:configuracion_de_diseno}
% section configuracion_de_diseno (end)
答案1
这是一个正则表达式替换,我不认为正则表达式引擎支持这种转换。您可以匹配非 ASCII,但我不确定替换后您会怎么做。我也不太熟悉 Oniguruma,它可能有这种功能。
在 Cocoa 或 Core Foundation 中,使用以下命令可以轻松删除 Unicode 变音符号:CFStringTransform
,因此你可以通过以下方式进行替换插入 shell 代码使用 PyObjC 程序或者其他程序。
编辑:不确定标记为暂停的内容的协议是什么;无论如何,这里是答案的其余部分。由于我也使用 TextMate 来处理 LaTeX,所以我想看到一个完整的解决方案,但最好在 TextMate 邮件列表中查看。这是一个最小的代码示例,可以修改为从 读取sys.stdin
和写入sys.stdout
。
#!/usr/bin/env python
# coding: utf-8
from CoreFoundation import CFStringCreateMutableCopy, CFStringGetLength, CFStringTransform
from CoreFoundation import kCFStringTransformToLatin, kCFStringTransformStripCombiningMarks
from Foundation import NSString, NSASCIIStringEncoding
import sys
if __name__ == '__main__':
dc = u"a string with düîåçritics"
dc = CFStringCreateMutableCopy(None, 0, dc)
sys.stdout.write("original: %s\n" % (dc))
CFStringTransform(dc, None, kCFStringTransformToLatin, False)
CFStringTransform(dc, None, kCFStringTransformStripCombiningMarks, False)
ascii_data = dc.dataUsingEncoding_allowLossyConversion_(NSASCIIStringEncoding, True)
os = NSString.alloc().initWithData_encoding_(ascii_data, NSASCIIStringEncoding)
sys.stdout.write("modified: %s\n" % (os))