18 6
auctex 部分编译的中文处理。
最近才发现,auctex 的 C-c C-r 编译一个 region 的时候,对于中文不能显示,看 _region_.tex 的代码,发现是它抛弃了CJK 的相关声明包。这也怪不得别人… 人家用 英文的自然没有这么多的问题…
搜索了一把,看到了水木上面的一个帖子,解决了这个问题,这里转载一下:
c-c c-r编译某环境时,往往要手动添加_region_.tex的\begin{CJK}{song}…很麻烦,
想了个办法修改TeX-region-Create的实现,由于TeX-region-Create函数忽略
\begin{document}前面的宏,定义变量手动添加之,代码如下:
- (defvar CJK-buffer-head "\\begin{CJK}{GBK}{song}")
- (defvar CJK-buffer-end "\\end{CJK}")(defun cjk-after-document ()
- (interactive)
- (setq CJK-buffer-head "\\begin{CJK}{GBK}{song}")
- (setq CJk-buffer-end "\\end{CJK}")
- )(defun cjk-before-document ()
- (interactive)
- (setq CJK-buffer-head "")
- (setq CJK-buffer-end "\\end{CJK}")
- )
然后,看TeX-region-Create函数在tex-buf.el中:
- (insert "\\message{ !name(" master-name ")}"
- header
- CJK-buffer-head ;;我的修改
- TeX-region-extra "\n"
- "\n\\message{ !name(" original ") !offset(")
- (insert (int-to-string (- offset
- (1+ (TeX-current-offset))))
- ") }\n"
- region
- "\n\\message{ !name(" master-name ") !offset(")
- (insert (int-to-string (- trailer-offset
- (1+ (TeX-current-offset))))
- ") }\n" CJK-buffer-end "\n" ;;我的修改
- trailer)
- (run-hooks 'TeX-region-hook)
- (if (string-equal (buffer-string) original-content)
- (set-buffer-modified-p nil)
- (save-buffer 0)))))
如果\begin{CJK}在\begin{document}之后,则区域编译前调用cjk-after-document,反之调
用cjk-before-document以正确设定CJK-buffer-head和CJK-buffer-end
测试了一下,确实成功了。

