学习再学习,多少大秘密

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}前面的宏,定义变量手动添加之,代码如下:

  1. (defvar CJK-buffer-head "\\begin{CJK}{GBK}{song}")
  2. (defvar CJK-buffer-end "\\end{CJK}")(defun cjk-after-document ()
  3. (interactive)
  4. (setq CJK-buffer-head "\\begin{CJK}{GBK}{song}")
  5. (setq CJk-buffer-end "\\end{CJK}")
  6. )(defun cjk-before-document ()
  7. (interactive)
  8. (setq CJK-buffer-head "")
  9. (setq CJK-buffer-end "\\end{CJK}")
  10. )

然后,看TeX-region-Create函数在tex-buf.el中:

  1. (insert  "\\message{ !name(" master-name ")}"
  2. header
  3. CJK-buffer-head ;;我的修改
  4. TeX-region-extra "\n"
  5. "\n\\message{ !name(" original ") !offset(")
  6. (insert (int-to-string (- offset
  7. (1+ (TeX-current-offset))))
  8. ") }\n"
  9. region
  10. "\n\\message{ !name("  master-name ") !offset(")
  11. (insert (int-to-string (- trailer-offset
  12. (1+ (TeX-current-offset))))
  13. ") }\n" CJK-buffer-end "\n" ;;我的修改
  14. trailer)
  15. (run-hooks 'TeX-region-hook)
  16. (if (string-equal (buffer-string) original-content)
  17. (set-buffer-modified-p nil)
  18. (save-buffer 0)))))

如果\begin{CJK}在\begin{document}之后,则区域编译前调用cjk-after-document,反之调
用cjk-before-document以正确设定CJK-buffer-head和CJK-buffer-end

测试了一下,确实成功了。

Leave a Reply



© 2008 学习再学习,多少大秘密 | Entries (RSS) and Comments (RSS)

Your Index Web Directorywordpress logo