如何自动将字符类型转换á ê õ ção
为\'a \^e \~o \c{c} \~a
?
答案1
下面是一个可以完成这个任务的快速 Python 脚本,它可以处理组合重音符号以及预组合字符,但是它只需要一串文本,并且需要一些额外的工作来处理完整的 TeX 文件:
#!/usr/bin/env python
import unicodedata
import sys
accents = {
0x0300: '`', 0x0301: "'", 0x0302: '^', 0x0308: '"',
0x030B: 'H', 0x0303: '~', 0x0327: 'c', 0x0328: 'k',
0x0304: '=', 0x0331: 'b', 0x0307: '.', 0x0323: 'd',
0x030A: 'r', 0x0306: 'u', 0x030C: 'v',
}
def uni2tex(text):
out = ""
txt = tuple(text)
i = 0
while i < len(txt):
char = text[i]
code = ord(char)
# combining marks
if unicodedata.category(char) in ("Mn", "Mc") and code in accents:
out += "\\%s{%s}" %(accents[code], txt[i+1])
i += 1
# precomposed characters
elif unicodedata.decomposition(char):
base, acc = unicodedata.decomposition(char).split()
acc = int(acc, 16)
base = int(base, 16)
if acc in accents:
out += "\\%s{%s}" %(accents[acc], unichr(base))
else:
out += char
else:
out += char
i += 1
return out
if __name__ == '__main__':
t = unicode(sys.argv[1], "utf-8")
print(uni2tex(t))
并调用如下:
$ python uni2tex.py "á ê õ ção ̆ a ă ̆a"
输出\'{a} \^{e} \~{o} \c{c}\~{a}o \u{ }a \u{a} \u{a}
。
答案2
您可能希望保留一个包含未替换字符的文档版本,因为这样更容易阅读。如果您使用 makefile 来处理文档,您可以编写类似以下代码:
#! -*- coding: utf-8 -*-
SHELL = /bin/sh
DOCUMENT = doc
$(DOCUMENT).pdf : $(DOCUMENT).tex
cp $(DOCUMENT).tex temp_$(DOCUMENT).tex
sed -i "s/é/\\\'{e}/g" temp_$(DOCUMENT).tex
sed -i 's/ç/\\c{c}/g' temp_$(DOCUMENT).tex
# more substitutions to add...
pdflatex temp_$(DOCUMENT).tex
cp temp_$(DOCUMENT).pdf $(DOCUMENT).pdf
实际上我所有的 makefile 都复制了文档到temp_doc.tex在做任何事情之前。这样,我可以通过 轻松清理任何机器生成的文件rm -f temp*
。
但是,你真的确定要这样做吗?用相应的宏替换这些字符实际上不会给你带来任何好处。(至少我看不出有什么好处。)但它的代价是字距调整不佳。(另请参阅第 2.2.6 节l2tabuen。
最好的
答案3
如果您使用 emacs,请使用以下iso-
函数。对于您的情况:iso-iso2tex
。我在之前的回答中发布了更多详细信息:emacs 重音字母
答案4
有几种工具。(工具是从本网站其他用户的各种回答中收集的。来源:1 2 3 )
独立命令行工具
图书馆
- LaTeX::重新编码(Perl 库)
- 吡拉西坦(Python 库)
编辑器插件
- Sublime Text插件:https://github.com/neilanderson/UnicodeTeX
- Vim 插件:https://github.com/joom/latex-unicoder.vim
- Vim 插件:https://github.com/Konfekt/vim-latexencode
- Emacs 插件:https://gist.github.com/kbauer/e8fee6514d124d5961f51fd7ba571bfd
recode
使用说明
通常,它已经安装在您的计算机上了。
要使用它,请执行以下操作,例如:
$ echo á | recode UTF-8..LaTeX
\'a
然而,正如源代码,仅支持极少数字符 —— 特别是仅支持 Latin1 编码的字符。