小品:解决OOo输出tex文件的中文乱码

OOo大约在2.2版本中增加了将文档导出为.tex格式的功能,这一特点非常吸引那些用LaTex排版的高手。但中文用户很快发现,导出的tex内的中文内容是乱码。有解决方法吗?pengtu在网上求得一法,可解决该问题。

LaTex是一种类似编程写代码的 排版方式,源文档是堆满了各种语法定义的纯文本,通过编译器能够导出标准的PDF或HTML。在对排版有较高要求的专业领域(数理化等),论文投稿都要求 使用.tex格式。这种纯粹依赖手工编写的文档,虽然精度高,但太费时间,不如OpenOffice这样的‘所见即所得’编辑器来得快。所以,当OOo也 能够输出tex文件时,就相当于开启了一个新的文档撰写流程——先用OOo草拟文档,然后导出tex文件,再进入Latex环境做精确修改,最后得到标准 的PDF文件。

然而,当中文用户欣喜地尝试这个新的文档撰写流程后,却发现一个非常大的遗憾:从OOo得到的.tex文件在进入LaTex环境后,中文显示乱码。 据推测,该问题对于所有非英文字符都存在,应是OOo此项功能支持的编码有限所致。OOo总是在一些偏僻功能上暴露其对非英文支持的不足,例如:安装词典 时不支持中文词典。

不过,既然看得出是编码的原因,也就有希望解决。经过pengtu在水木社区python版面发文求助,有大侠MrWrong (米措|米瑞)出马撰写py脚本 ,经本人小试,已经完美解决该问题。现转载如下(略有调整),请将下方文本内容新建为tex2utf.py文档,以utf-8编码保存,在已安装python的环境下带参数执行即可。OOo本身自带低版本的Python,你也可直接在OOo目录下找到它的位置,然后以 python.exe tex2utf.py 原文件 新文件 的方式运行。

#!/usr/bin/env python
# writer:MrWrong (米措|米瑞) from 水木社区
import re,sys    #导入两个标准库
def convert(c):    #定义转换编码的函数convert
    return re.sub("[[0-9A-F]{4}?]”,lambda s: unichr(int(s.group()[1:5],16)),c)

”’该py脚本将OOo导出tex编码转换为utf-8编码,以显示中文字符。在python环境带参数运行,file2.tex即为得到的新tex文件。如:tex2utf.py file1.tex file2.tex ”’
if __name__ == "__main__":    #仅当本脚本独立运行时执行:
    file1 = open(sys.argv[1])    #命变量file1为
    file2 = open(sys.argv[2],’w')    #命变量file2为
    file2.write(convert(file1.read()).encode(’utf8′))    #将file1读取后用convert函数转换编码,并写为file2文件.
    file1.close()
    file2.close()
# 注意,file2.tex如果已经存在,覆盖不提示!

发表一条评论