从官网下载编译好的texmacs,然后在linux下设置好环境变量后.运行texmacs,发现输入中文后,texmacs显示乱码(会显示一些奇怪的字符).如果打开工具栏的帮助-用户手册的一些中文文档,能够正常显示中文,那么该问题不是由于没有安装中文字体库引起的.
然后查看命令行终端显示:
QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed
QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed
之所以不能显示中文正是因为iconv_open这个函数打开失败
libiconv库是GNU下的一个项目.可以从官网重新编译安装.不过这样做后并没有解决原来的问题.事实上这个问题是因为在/usr/lib目录下有一个gconv文件夹,这个文件夹中存放了一些icov需要用到的国际编码转换的一些库.但是这个库在/usr/lib下并不存在.而是存在于/usr/lib/i386-linux-gnu/和/usr/lib/x86_64-linux-gnu/两个目录下.而texmacs在调用iconv_open时,试图在/usr/lib目录下寻找,但是无法找到.因此导致了上述问题.
解决办法:把/usr/lib/i386-linux-gnu/目录下的giconv拷贝到/usr/lib/目录下,但是这个只有在32位ubuntu下才能成功.在64位下不能成功.具体原因,我猜应该涉及到32位程序调用64位库的问题.要根本解决这个方法,只有下载源码包,重新安装
从官网上下载texmacs-1.99.5源码.
解压缩
在texmacs解压缩目录下运行./configure
发现./configure错误,报出:
configure: error: compulsory library gmp not found
很简单,只要下载automake工具,然后在TexMacs根目录下执行autoconf语句就可以重新生成正确的configure文件,然后执行./configure
然后我重新安装了gmp的库,发现这个问题仍然没有解决.到网上搜了一下,说是pkg-config的问题,没有pc文件.但是添加了后还是没有解决问题.
后来发现gmp是guile的依赖库,安装了guile后,gmp已经自动安装了.但是configure始终找不到.然后查看目录下的config.log(这个是运行./configure导出的日志文件),然后发现如下的log:
g++ -o conftest -pthread -I/usr/include -I/usr/include/guile conftest.cpp -lgmp -lguile -lltdl -lgmp -lcrypt -lm -lintl >&5
/usr/bin/ld: cannot find -lintl
collect2: error: ld returned 1 exit status
是因为缺失了intl的库导致出现这种奇怪的问题.至于为什么configure报gmp的错我也不知道.另外这个-lintl这个参数是configure自己添加进去得到的.而非运行guile-config得到的.
因此解决办法就比较简单了,sudo gedit configure,打开configure文件,搜索”-lintl”字符串,将其出现的地方全部删掉.这样编译configure就能通过.
或者有人担心删掉-lintl出现问题.那怎么办?intl这个库是gettext的依赖库,只要安装了gettext,这个库就会自动安装.但是编译时用-lintl选项仍然找不到intl库.可以cd /usr后,用命令locate libintl命令或者find /usr -name “libintl”命令查找libintl库所在的位置,我的64位ubuntu16.10下运行结果如下:
/usr/include/libintl.h
/usr/lib/x86_64-linux-gnu/preloadable_libintl.so
发现有一个preloadable_libintl.so的库,然后sudo cp preloadable_libintl.so libintl.so,把这个文件拷贝成libintl.so文件,这样configure就能找到这个库了.至于库名称前为什么有一个preloadable我也不清楚
继续./configure 又会发现报出 -lGuile错误
继续gedit configure ,然后搜索-lGuile,把它改成-lguile,这应该是一个bug,大小写错误
继续configure,这样就应该configure成功了
然后make
发现又报错了
g++ -include config.h -ISystem -ISystem/Boot -ISystem/Misc -ISystem/Classes -ISystem/Files -ISystem/Language -ISystem/Link -IKernel -IKernel/Types -IKernel/Abstractions -IKernel/Containers -IData -IData/Convert -IData/Document -IData/String -IData/Observers -IData/Tree -IData/Drd -IData/History -IGraphics -IGraphics/Types -IGraphics/Colors -IGraphics/Fonts -IGraphics/Handwriting -IGraphics/Renderer -IGraphics/Gui -IGraphics/Mathematics -IGraphics/Spacial -IGraphics/Pictures -IGraphics/Bitmap_fonts -I../TeXmacs/include -IScheme -IPlugins -IPlugins/Iconv -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++-64 -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -D_REENTRANT -DG_gr_system_ -c ./System/Misc/._sys_utils.cpp -o Objects/._sys_utils.o
./System/Misc/._sys_utils.cpp:1:1: warning: null character(s) ignored
./System/Misc/._sys_utils.cpp:1:2: error: stray ‘\5’ in program
发现是因为这个文件._sys_utils.cpp导致错误.这个问题出现的原因是:这个文件也被makefile当成是源代码进行编译.事实上不是.把这个文件删除即可.
然后make install.成功
然后运行texmacs,又发现关于输入法新的问题(我用的是fcitx).
1.输入法光标跟随问题.如果编辑界面不停下拉的话,那么输入法提示框会越来越低,直到消失到底部.但是升级到ubuntu17.04后,输入法提示框仍然会下降,但是不会消失(还是位置不对)
这是源码的一个bug,如果想解决这个问题,要修改源码.具体的解决方法见
https://www.douban.com/group/topic/55268688/
2.如果点击texmacs的工具栏(比如插入标题什么的),然后在编辑界面进行中文输入,这时texmacs不会响应中文输入.然后把texmacs程序切换出去(随便点个其它应用,调出中文输入法),再切换回来,中文输入法又能重新使用了(windows下的texmacs也有类似问题).但有时候又没这个问题.不知道在ibus输入法框架下,有没有这个问题.在texmacs下进行中文输入,会首先进入pre edit状态下(见工具栏,会转化状态),但是不响应的情况下,这个状态并不会出现.