zoukankan      html  css  js  c++  java
  • Emacs+$\LaTeX$ 帮你写数学文章

    在这个混乱的星球上,有两大神器.一个是Emacs,另一个是……Vim?No.对学数学的人来说,另一大神器是$\LaTeX$.学数学的朋友对于后者可能比较熟悉,$\LaTeX$是计算机界的大牛,图灵奖得主高德纳的力作,是写数学论文的不二选择(严格地说高德纳发明的是TeX,$\LaTeX$是在TeX的基础上稍微改造而来的).用$\LaTeX$写的数学文章,排版优美,数学式子漂亮.在$\LaTeX$面前,Word编辑器,mathtype之类的不值一提.然而,$\LaTeX$不是所见即所得的,也就是说,当你写数学文章的时候,你面对的,不是一个个数学式子,而是一行行代码.这样无疑会让原本就难看懂的数学式子更难看懂,当你想看看书写效果的时候,必须编译一下.如此一来,你的思维流必然会被打断,你写文章的士气必然会降低..而且,当你想输入一个类似于行间公式的东西的时候,你必须输入\begin{XXX}...\end{XXX},这无疑会带给你无穷的麻烦.

    Emacs很好地解决了$\LaTeX$的这类问题.它和你的计算机上的$\LaTeX$配合起来天衣无缝.Emacs是计算机界的大牛Richard Stallman的力作.它和Tex同属开源软件.Emacs估计是很强大的编辑器.我刚刚接触它.它的优点在于强大的可扩展性和可定制性,不同的人可以把Emacs变成自己想要的样子,定制出自己想要的功能.用Emacs不仅能写$\LaTeX$文档,而且能写C,C++,....让大家先睹为快,下面是我用Emacs写$\LaTeX$文档时的截图

     

     

     

    你以为我的博文都是我一个个字打出来的么?当然不是,否则我的手早就瘫了(不过前两年真的是这么干的.大一的时候我竟然在使用word写数学笔记,还得意洋洋地使用mathtype,后来长进了一些,使用winedt和texworks,不过也不高效.直到我遇到了emacs,不过以前,我还在使用Windows操作系统,被emacs的安装,学习之繁琐吓住了,一直没去用.直到这个暑假,电脑硬盘摔坏之后,我狠了狠心大力改革,彻底让Windows滚了蛋,安装了Ubuntu Linux,开始学习使用emacs写LaTeX文档.想想以前真可怕.工欲善其事,必先利其器啊.).在Emacs里,我安装了Auctex插件和cdLaTeX插件,以及Yasnippet.这样之后,我使用Ctrl+C+E,然后在mini buffer里输入XXX,就自动出现\begin{XXX}...\end{XXX},在数学环境里,我输入fr+Tab,就自动出现\frac{}{},而且光标自动出现在第一个{}内.第一个{}写好了,再Tab一下,光标会自动出现在第二个{}内,第2个括号内的内容写好了,再Tab一下,光标就跳出括号了.在数学环境里,我输入sq,Tab一下,\sqrt{}就出来了,而且光标自动在括号内.输好了,再Tab一下,光标就跳出括号.我输入matrix,就出来一个下拉菜单,里面让你选择到底是输入一个矩阵呢,还是行列式呢……我输入Ctrl+C+P+B,就可以在整个buffer里预览数学公式,输入Ctrl+C+P+P,就可以再某个特定的点预览数学公式.诸如此类,带给人们很多方便,可谓数学论文书写者的福音.

    那到底怎么安装Emacs呢?我认为,在Windows下安装Emacs稍显麻烦,所以我转到了Ubuntu Linux操作系统.首先,既然是写\LaTeX文档,ubuntu里当然要先安装tex系统,最简单的方法是在terminal里 sudo apt-get install texlive-full ,安装texlive2009完整版(如果你网速太慢,用apt-get会下载七八个小时的.建议你用在别的windows机器下用迅雷下载texlive2012的iso文件,然后刻盘,再安装到Linux系统上,然后设置texlive2012的path.我就是这么干的.如果你一定要用apt-get方式下载texlive2009的话,那一定要安装多线程哦,那样就可以apt-fast了,下载速度会提高好几倍的,google一下"多线程  apt-fast"你就知道了).需要下载1G多的东西.这样就好了.其次,在terminal里sudo apt-get install emacs ,安装Emacs 编辑器.然后,安装emacs的LaTeX插件auctex.照目前来看,auctex用apt-get的方式获得的auctex和ghostscript不协调,会导致auctex 在pdfLaTeX模式下的preview功能失败,会在preview的时候出现 “红圈白杠”,红圈白杠的样子见 这个链接.我当初为此问题困扰了好几天,google了好长时间才找到解决方案.原来并不是我们的错.解决方案就是:不要通过apt-get 的方式安装auctex,要下载 这个auctex包 ,然后将其安装在ubuntu上,安装方法参照这个页面.这样子,就OK了.

    至于emacs的配置,完全要按照你自己的喜好进行了.网上有很多配置的,我的配置文件完全是从网上东拼西凑起来的.如下

    View Code
      1 ;为我的emacs配置主题色彩 (color-theme-色彩名称)  
      2  (add-to-list 'load-path "~/elisp/color-theme")
      3  (require 'color-theme)
      4  (color-theme-initialize)  
      5  (color-theme-oswald)  
      6  
      7  
      8  ;preview-latex
      9  (add-to-list 'load-path
     10  "~/Downloads/auctex-11.86/preview")
     11  (require 'preview)
     12  
     13  ; yasnippet
     14  
     15  
     16  (add-to-list 'load-path
     17           "~/.emacs.d/plugins/yasnippet")
     18  (require 'yasnippet)
     19  (yas/initialize)
     20  (yas/load-directory "~/.emacs.d/plugins/yasnippet/snippets")
     21  (yas/minor-mode-on)
     22  
     23  ; this breaks things; use the below advise solution instead
     24  ;(add-hook 'org-mode-hook
     25  ;       (lambda ()
     26  ;         (org-set-local 'yas/trigger-key [tab])
     27  ;         (define-key yas/keymap [tab] 'yas/next-field-group)))
     28  
     29  ; when cdlatex-mode or org-cdlatex-mode are loaded, we need to change
     30  ; the behaviour of yas/fallback to call cdlatex-tab
     31  
     32  (defun yas/advise-indent-function (function-symbol)
     33    (eval `(defadvice ,function-symbol (around yas/try-expand-first activate)
     34             ,(format
     35               "Try to expand a snippet before point, then call `%s' as usual"
     36               function-symbol)
     37             (let ((yas/fallback-behavior nil))
     38               (unless (and (interactive-p)
     39                            (yas/expand))
     40                 ad-do-it)))))
     41  
     42  (yas/advise-indent-function 'cdlatex-tab)
     43  (yas/advise-indent-function 'org-cycle)
     44  (yas/advise-indent-function 'org-try-cdlatex-tab)
     45  (add-hook 'org-mode-hook 'yas/minor-mode-on)
     46  
     47  
     48  
     49  
     50  
     51  ;cdlatex 
     52  (add-to-list 'load-path
     53  "~/elisp")
     54  (require 'cdlatex)
     55  
     56  
     57  ;fontsize
     58  (set-face-attribute 'default nil :height 150)
     59  
     60  ;fullscreen
     61  (global-set-key [f11]'my-fullscreen)
     62  (defun my-fullscreen ()
     63    (interactive)
     64    (x-send-client-message
     65     nil 0 nil "_NET_WM_STATE" 32
     66     '(2 "_NET_WM_STATE_FULLSCREEN" 0))
     67  )
     68  (defun my-maximized ()
     69    (interactive)
     70    (x-send-client-message
     71     nil 0 nil "_NET_WM_STATE" 32
     72     '(1 "_NET_WM_STATE_MAXIMIZED_HORZ" 0))
     73    (interactive)
     74    (x-send-client-message
     75     nil 0 nil "_NET_WM_STATE" 32
     76     '(1 "_NET_WM_STATE_MAXIMIZED_VERT" 0)))
     77  (my-maximized)
     78  
     79  
     80  ;;关闭起动时的那个“开机画面”
     81  (setq inhibit-startup-message t)
     82  
     83  
     84  ;不要滚动栏
     85  (scroll-bar-mode nil)
     86  
     87  
     88  ;改变emacs标题栏的标题
     89  (setq frame-title-format "%b_Luqing Ye")
     90  
     91  ;让M-w 能复制内容到剪切板
     92  (setq x-select-enable-clipboard t)
     93  
     94  ;当指针到一个括号时,自动显示所匹配的另一个括号
     95  (show-paren-mode 1)
     96  
     97  ;ibus
     98  (add-to-list 'load-path "~/.emacs.d/ibus/")
     99  (require 'ibus)
    100  (add-hook 'after-init-hook 'ibus-mode-on)
    101  (global-set-key (kbd "C-=") 'ibus-toggle) ;;这里既是绑定上面设置的C+=快捷键到ibus中
    102  (ibus-define-common-key ?\C-\s nil)
    103  ;; Use C-/ for Undo command
    104  (ibus-define-common-key ?\C-/ nil)
    105  ;; Change cursor color depending on IBus status
    106  (setq ibus-cursor-color '("red" "black" "green"))
    107  
    108  
    109  
    110  ;auctex setting,from  http://www.xemacs.org/Documentation/packages/html/auctex_4.html    
    111  (require 'tex-site)
    112  (setq TeX-auto-save t)
    113  (setq TeX-parse-self t)
    114  
    115  ;为了使用 AucTeX 方便,为 LaTeX 模式 hook 自动换行,数学公式,reftex 和显示行号的功能
    116  (mapc (lambda (mode)
    117        (add-hook 'LaTeX-mode-hook mode))
    118        (list 'auto-fill-mode
    119              'cdlatex-mode
    120              'LaTeX-math-mode
    121              'turn-on-reftex
    122              'linum-mode))
    123  
    124  
    125  
    126  
    127  
    128  
    129  (custom-set-variables
    130    ;; custom-set-variables was added by Custom.
    131    ;; If you edit it by hand, you could mess it up, so be careful.
    132    ;; Your init file should contain only one such instance.
    133    ;; If there is more than one, they won't work right.
    134   '(show-paren-mode t)
    135   '(tool-bar-mode nil))
    136  (custom-set-faces
    137    ;; custom-set-faces was added by Custom.
    138    ;; If you edit it by hand, you could mess it up, so be careful.
    139    ;; Your init file should contain only one such instance.
    140    ;; If there is more than one, they won't work right.
    141   )
    142  
    143  
    144  
    145  
    146  
    147  (setq TeX-save-query nil) ;;autosave latex file before compiling
    148  
    149  
    150  
    151  
    152  
    153  
    154  
    155  ;;1.This will make sure org gets loaded, and some basic global key combinations are defined
    156  ;;2.If you've configured your Emacs initialization file as suggested below, Emacs should enter org-mode whenever you visit or create a file with the extension ".org".
    157  (require 'org-install)
    158  (add-to-list 'auto-mode-alist '("\\.org$" . org-mode))
    159  (define-key global-map "\C-cl" 'org-store-link)
    160  (define-key global-map "\C-ca" 'org-agenda)
    161  (setq org-log-done t)
    162  
    163  
    164  
    165  
    166  ;;org mode自动换行
    167  (add-hook 'org-mode-hook
    168      (lambda () (setq truncate-lines nil)))
    169  
    170  
    171  
    172  
    173  
    174  
    175  
    176  (add-to-list 'load-path "~/elisp")
    177  (require 'cdlatex)
    178  (require 'texmathp)
    179  ;load org-cdlatex-mode for all org files
    180  (add-hook 'org-mode-hook 'turn-on-org-cdlatex)
    181  
    182  
    183  
    184  
    185  
    186  ;; all backups goto ~/.backups instead in the current directory
    187  (setq backup-directory-alist (quote (("." . "~/.backups"))))
    188  
    189  
    190  ;use pdflatex
    191  (setq latex-run-command "pdflatex")
    192  
    193  
    194  ;generate pdf when complile.
    195  (setq TeX-PDF-mode t)

    在配置文件里,我对自己的emacs进行了主题色彩的设置,设置之前要先安装主题色彩包,对此我不详细说了,这里有.在配置文件里,我还设置了Yasnippet,Yasnippet可以让你使用自定义模板.它的安装方法在这里.有些好心的外国人已经帮我们做了很多现成的yasnippet模板,在这里.我还安装了cdLaTeX,cdLaTeX的介绍可以参考这里 .cdLaTeX和yasnippet有点不兼容,他们俩老是争出头,有时候一个在,就让另一个失效了,解决方案在这里.在Linux下,想用ibus输入法在emacs里起作用的话,就参考这里 .

    诸如此类的,细节问题比较多.有一句话叫自己动手丰衣足食,我说的也够多了,再说就要写书了.而且,我也是一只菜鸟啊.更多的问题,大家自己google去吧.不过,在此,我还要给各位一个最重要的链接.

    emacs 中 preview-LaTeX 的设置_~ 只谈概念 ~_百度空间


    更新1:Emacs中交换CTRL 和CAPS LOCK键后往往会更方便,具体见这里.

  • 相关阅读:
    混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况
    静态static与方法重载
    编写的一个“手机”的类
    面向对象编程(OOP)————修饰符
    POJO
    设计模式——单例模式
    矩形类 求面积
    面向对象编程(OOP)————类
    面向对象编程(OOP)
    for、if循环直至输入正确
  • 原文地址:https://www.cnblogs.com/yeluqing/p/3827966.html
Copyright © 2011-2022 走看看