The leading textbook in Artificial Intelligence. Used in over 1000 universities in 91 countries (over 90% market share) and the 85th most cited publication on Citeseer.
学习再学习,多少大秘密
繁芜纷飞,杂七杂八
A branch of computer science that studies how to endow computers with capabilities of human intelligence. For example, speech recognition is a problem being worked on by AI scientists.
升级了 pgf 宏包, xetex+beamer 完美插入图片
标题党下,说完美也是相对的,不过是方便多了~
使用 xetex 很久了,一直用它来写文章,做幻灯片,采用 adobe 中的那4套字体, 效果也不错。
幻灯片使用 beamer, 虽然没有太多的效果,不过也够用了,以前一个恼火的问题是一定要使用
\usepackage[dvipdfm]{beamer} 这样的来指定 xetex 的 pgf 引擎,从而来生成正常的 pdf 文件,否则
不能编译生成正常的幻灯片。而这样做的一个不好的地方就是在插入(png/jpg/pdf)格式的图片的时候会需要一个
boundbox 文件,就是比如要插入一个 figure.jpg, 需要一个同名的 figure.bb 文件,以前的解决方法是采用 ebb 这个程序生成这个文件,这样也能够解决问题。不过在最近一次插入一个 pdf 文件的时候,出现了一个小插曲。
Version of PDF file (1.4) is newer than version limit specification.
Can't handle file type for file named graph1-1.pdf
于是想了一个办法,就是首先采用 convert 将这个 pdf 转化成 png, 然后使用 ebb 得到 bb 文件,然后将 png 删除, 再插入相应的pdf 文件,此时能够正常的找到对应的 bb 文件,也能插入正常的 pdf 矢量图。不过就是麻烦了一些。
突然想到一个问题,在写文档(非 beamer) 的时候,同样采用 xetex 编译,插入图片的时候相当的自由,也不要 bb 文件,而写幻灯片的时候就需要这个bb,插入 pdf 还弄得这么复杂。但是找不到相应的原因。一个偶然的机会,发现就是 beamer 文件里面的那个 [dvipdfm] 声明在作怪。去掉这个选项然后编译,发现通不过,找不到 pgfsys-xetex.def 这个 engine, 嗯,貌似是 pgf 的问题, 我的 tex 包是 texlive2007, 07 年 2月出来的,上网查了下, 发现 2008 年 2 月的时候 pgf 有更新,于是下载,安装到相应的地方,再测试, OK. 问题解决。
插入图片和 xetex 写一般文档一样自由舒服了。
后知后觉:cdlatex
以前一直用 emacs+auctex 写 tex 文档,基本上比较满意了。部分编译,数学公
式预览,check 具体检查语法错误,再加上自己写一个小模板,基本的编辑都用上
了,也觉得比较顺手。只是有时候输入数学公式的时候比较郁闷,会少了 $ 符号
这样的。今天网上乱逛的时候,发现了一个叫 cdlatex 的东西,看了一下,虽然
有些功能和 auctex 重复,但是也别有一番风味。
cdlatex 主页虽然很久没有更新了,作者说是自己实现一些 auctex 的功能是因为自己
不知道 auctex。下载稍微试了一下,发现在很多方面,比 auctex 显得方便。
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
测试了一下,确实成功了。
slides 中遇到的东西
[
心情: Cool ]
为了论文答辩,用 latex+beamer 做了一个 slides, 后来发现想在生成的 pdf 文件中加入一个时钟,主要是方便自己在讲的时候把握时间,也是,做了一学期,说的却不超过8分钟...闲话就算了..
室友 zz 在网上一顿狂搜,发现用 javascript 可以实现,于是采用 eforms 宏包,加了这样一段代码在 tex 文件中
| 代码: |
| \begin{insDLJS}{showtime}{Show time} sec=0 min=0 function tClock() { sec=sec+1 if(sec==60){sec=0;min=min+1;} minStr=min secStr=sec if(sec<10) secStr="0"+sec for (i=1;i<=50;i++) this.getField("time"+i).value=minStr+":"+secStr } var timeout =app.setInterval("tClock()",1000); \end{insDLJS} |
并在导言区定义了
| 代码: |
| \newcommand{\timemark}[1]{\begin{textblock}{0.7}[0,0] (11.3,15.53)\textField[\BC{0.91 0.91 1}\BG{0.91 0.911} \textSize{6.4}\textColor{0 0 0 rg}]{time#1}{0.8cm} {5.5bp}\end{textblock}} |
这样就会在 slides 底部生成一个小时钟,从打开开始计时,按照分钟记。
但是同时需要在每一个 frame 中硬性的插入 \timemark{1} \timemark{2}这样的标签。
我是想直接插入在 \begin{frame} \frametitle{xxx}那行的下面,于是首先想使用 sed 的 a\ 命令来处理,同时前一天在 gnu.emacs.help 中看到了自动顺序编号的办法,就是使用 regexp的 \# 实现的,可是在 sed 中,虽然正常的插入了,但是却没有 \#计数的这个,郁闷死了,忽然想到直接在 emacs 中处理。
找了半天没有在匹配行后面追加的命令,于是想到了一个有点 dirty 的办法,用 Regex 将一行替换成两行不就行了么?但是不懂怎样吧回车硬编码进去,在 #ppmm 中问了 破破 ,他告诉我是 <C-q><C-j> 。
于是就有了下面这个有点诡异的操作:
| 代码: |
| M-x replace-regexp ^\\begin{frame}.* <RET>\&<C-q><C-j> \\timemark{\,(+ 1 \#)}<RET> |
刷刷刷,自动加上去了。后来又考虑了一下,借助于 \& 也完全可以在匹配行之前插入一个新行。
解释一下, M-x 是执行一个命令,这个命令名字叫 replace-regexp 就是按照 正则表达式替换,替换的源字串为 ^\\begin{frame}.* 就是以 \begin{frame}开头的那些行,把它替换成该行(\&表示被匹配的完整的源字串),跟上一个回车(C-q C-j) 然后下一行是 \timemark{n}, n 从一开始计数,没匹配一次加一(\,(+ 1 \#), 其中 \# 表示计数,它前面的表示从 1 开始,裸的\#是从 0 开始的。
顺便提一下 emacs 的 re-builder 就是一个构建正则表达式的模式,对于个文本,会在下面再打开一个貌似模式行的东西,输入匹配模式,就会将源文件匹配处高亮显示,在 echo buffer 中显示匹配次数,实在是很不错的一个东西。在测试 regexp 的时候非常的有用。
tex 模板
[
心情: Dis×ted ]
最近写论文,在学校找了一个小模板,开始写着很开心,没有管什么格式的问题。这也正是 tex 的模板的好处,模板有了直观写文字就是了,其他的都不要管,格式就直接好了。不用去这样那样的调整。此外就是公式了,我的论文里面的公式那个多..... 还好,结合 emacs 的 auctex+preview 边写边预览..
省却了不少事情。
不过郁闷的是不晓得那个学校是怎么想的,来一个新设计的封面.. 看看原来的样式,也没有什么不好,不明白这些事情了,早前就一帮人为了改校徽的事情闹得沸沸扬扬。算了,也没有什么可说的。
于是看起了丑陋的原始 TeX 命令,那些什么丫的 \def \let \newcommand 什么的,参数还是 #1 #2 的,实在是有些难受。好在模板中要改的地方不多,只是一个封面的样式。最初的那个改法非常的 ugly, 由于不知道中文的那部分在什么地方设置,放在了正文中,后来才知道,关于 CJK 的是要一个 cpx 文件来管理的,于是重新计划了一下格式,刷刷就好了。
回头看看,定义一套模板也不是这么复杂的事情,等把这段时间忙完了,整理一下相关的知识,弄几个模板放着.......
优美的 tex 代码
[
心情: Amused ]
昨天 ee 在 irc 大闹,要把一个 pdf 的14,15两页合并成一页,还要横排,把 两个 a4 的合成一个 a3 的。 本来想用打印的办法,可是虚拟打印机打出来器中的字体乱掉了。 huang 给了一个用 tex 文件的办法,真是非常优美的代码。
| 代码: |
| \documentclass[a4paper]{article} \usepackage{pdfpages} \begin{document} \includepdfmerge[nup=1x2,landscape]{ee.pdf,14-15} \end{document} |
编译出来就好了...
看来是 pdfpages 的宏包起的作用,有空可以看看了。
不过 ee 最终没有用这个办法,说 tex 不通用,不过我个人还是很喜欢的了..
emacs 和 xdvi 的反向查询
[
心情: Amused ]
今太无聊,就到 wiki 上面翻译文章玩,遇到了正在使用的 JabRef 和 LaTeX 的两篇,感兴趣就翻了,看到了一个感兴趣的东西,反向查询,之前对这个略有耳闻,但是没有怎么关注,今天看到了就测试了一下,确实不错。
具体的可以看这里 http://wiki.ubuntu.org.cn/UbuntuHelp:LaTeX/zh 值得说的是 Texlive2005 的 iso 那个包含了 srcltx 所以只要设置 emacs 就可以了。
说到这里,还要说说 JabRef 这个家伙
http://wiki.ubuntu.org.cn/UbuntuHelp:JabRef/zh
能够使用 citeseer 的数据库,也可以很方便的管理 bibtex 格式的引用文献,本来我是很希望使用它在 emacs+auctex 中插入的,可是要用什么 gnuserv 的鬼东西,在我的 emacs23 中测试了一下,没成功,就搁置了,用 auctex 中的 reftex 模式还算凑活,不过据说 JabRef 和 lyx, kile, 以及 windows 下面的 winedit 的集成还不错。
恩,看到这篇文章的朋友如果也看到了文中的两个 url 的东西,帮忙纠错哈..
再谈 TeX 的配置(补遗)。
关于TeX的配置,本来网上已经有非常多的东西了。但是每个人的情况不同,总有些细微的差别。
首先,对于 $TEXMFHOME 这个东西,以前由于常常重装系统,经常把相关配置删除,因此在自己家目录下面建立了一个 texmf 这样在重装的时候只要挂上/home 就不会丢了,但是同时不爽的地方是把 TeX 的配置弄的很乱的样子,看起来到处是的。所以也不是太好。这个就无所谓了..
其次关于那个 gbkfonts 的程序, 很久以来我一直用王垠网站上的那个,于是在生成字体之后还要进行一番的调整,而这个恰恰是最不爽的地方。本来想弄个脚本来干这个事情,后来发现 了 何勃亮网站上的 gbkfonts, 测试了一下,情况好多了。生成的目录也清爽了许多,而且最爽的是,直接生成字体后就可以使用了。不像先前那个还要进行一些 cp, mv, echo等等的后期处理。郁闷的是在教育网中上传速度几乎是0...因此没有传到ftp上去。等有机会弄好了再写个配置指南把。
最后是关于utf8环境的tex配置,查了很多资料后我实验了一下。目前的结果是可以输出到pdf,但是只能用 pdflatex来编译。用latex编译成dvi的时候,用dvi预览会找不到字体...非常郁闷。不明白其中的机制,瞎折腾了一段时间,就不敢继续了。而且一个奇怪的地方是这个使用的是 cyberbit的字体,老实说,不是很喜欢这个字体。也不明白这个字体究竟是怎么编码等等的。就没有测试了。期望那个兄弟有经验的告诉一声。
我的配置方法 :
先安装latex-ucs包
| 代码: |
| sudo aptitude install latex-ucs |
下载那个cyberbit.ttf的字体,放到 /usr/share/texmf/fonts/truetype/chinese中cyberbit.ttf放在ftp中了.
| 代码: |
| wget http://ftp.ubuntu.org.cn/cyberbit.zip |
然后生成 .tfm, .enc文件.先建立一个临时目录~/tmp
| 代码: |
| cd ~/tmp ttf2tfm /usr/local/tetex/share/texmf/fonts/truetype/chinese/cyberbit.ttf -q -w cyberb@/usr/local/tetex/share/texmf/ttf2pk/Unicode@ |
然后建立 cyberb.map文件
下面是脚本
| 代码: |
| #!/bin/sh if [ -f ./cyberb.map ];then rm -f ./cyberb.map fi for i in *.tfm;do base=`basename $i .tfm` echo "${base} <${base}.enc <cyberbit.ttf" >> cyberb.map done |
把脚本保存。
然后到 tmp目录中执行一下,便得到了 cyberb.map
最后
| 代码: |
| mkdir ~/texmf/fonts/tfm/chinese/cyberb mv *.tfm ~/texmf/fonts/tfm/chinese/cyberb mkdir ~/texmf/fonts/enc/dvips/chinese/cyberb mv *.enc ~/texmf/fonts/enc/dvips/chinese/cyberb cp cyberb.map ~/texmf/fonts/map/dvips cp cyberb.map ~/texmf/fonts/map/dvipdfm cp cyberb.map ~/texmf/fonts/map/pdftex 修改 /var/lib/texmf/web2c/updmap.cfg 在最后加上 Map cyberb.map 然后 sudo mktexlsr updmap |
配置之将 \begin{CJK*}{GBK}{song}
改成 \begin{CJK*}{UTF8}{song}
然后保存为utf8编码,可以用pdflatex来编译生成 pdf文档,但是我用 latex生成的dvi老差字...
郁闷了~~~,现在发现先用 pdflatex调用ttf2pk生成一遍字体然后再用 xdvi可以看到中文,但是总是怪怪的...不了解了,哪个知道的告诉一声阿
Latex+CJK边用边学(四)
使用技巧
在使用中成长,不断的学习,才能够不断的进步!下面是我在应用的时候遇到的一些问题和学到的一些东西,乱78糟的记载一下.
其实(三)中的那个模板已经是很好用的了。一般的写点文字的没有什么问题。
在数学环境($$)中用中文,用\mbox{中文}
$$中的公式是默认没有编号的,要有编号的话,应该使用\begin{equation}环境.
公式,定理等环境的自动编号的引用 \label{标识}就好,以后引用这个公式的时候直接引用\ref{标识}就可以引用这个公式了,如果在前面又加上了公式,编号变了,引用的地方也会自己改变。
在\newtheorem环境中可使用不同的计数器来生成不同的编号格式。比如要求第2章的定理编号是2.1,2.2等,而第三章的编号为3.1,3.2的话,就可以使用\newtheorem{xxx}{xxx}[section]或[subsection]用不同的计数器初值。
缺省情况下,用\includegraphics{}环境出来的图片名字前面会有一个figure 1
figure 2,等等的,在英文环境中还好,但是放到中文环境中就很郁闷了,同样,表格环境中也会出现Table:看着不爽。后来发现其实只要改变一个变量的值就好
\renewcommand{\figurename}{图}
\renewcommand{\tablecommand}{表}
就可以分别把图和表的名字默认的记作图,表,当然也可以叫成别的.^_^
在itemize环境和enumerate环境中,有时侯没有缩进,弄得版面相当难看,可以如下解决:
\usepackage{indentfirst}
然后\begin{enumerate}[\indent 1]就可以正确的缩进了。
先就想到这么些,以后补充把。
Latex+CJK边用边学(三)
初级应用
这个东西说起来还是要练习,在实践中才能成长。否则再多也只是空空的。但是我只能说小用过几次,不能说精通什么,只能是算做可以用而已。latex这个软件,越用才越发现其强大的地方!
下面备份一下我东挪西凑的一个小小的写文章的模板:
\documentclass[a4paper,10pt]{article}
\usepackage{fancyheadings}
%\pagestyle{myheadings}
%下面几行加上后出来的文章页边页眉的间隔具有中文的习惯
\addtolength{\topmargin}{-54pt}
\setlength{\oddsidemargin}{0.63cm}
\setlength{\evensidemargin}{\oddsidemargin}
\setlength{\textwidth}{14.66cm}
\setlength{\textheight}{24.00cm}
%需要的宏包
\usepackage{times}
\usepackage{CJK,CJKnumb,CJKulem}
\usepackage[mtbold,mtpluscal,mtplusscr]{mathtime}
\usepackage{paralist}
\usepackage{graphicx}
\usepackage{caption}
\usepackage{color}
\usepackage{indentfirst}
\setlength{\parskip}{0.7ex plus0.3ex minus0.3ex}
\renewcommand{\baselinestretch}{1.2}
%一些简单的替换字体
\newcommand{\song}{\CJKfamily{song}}
\newcommand{\hei}{\CJKfamily{hei}}
\newcommand{\fs}{\CJKfamily{fs}}
\newcommand{\kai}{\CJKfamily{kai}}
\newcommand{\li}{\CJKfamily{li}}
\newcommand{\you}{\CJKfamily{you}}
\newcommand{\wuhao}{\fontsize{10.5pt}{12.6pt}\selectfont}
\newcommand{\xiaosi}{\fontsize{12pt}{14pt}\selectfont}
\newcommand{\sihao}{\fontsize{14pt}{\baselineskip}\selectfont}
\begin{document}
\begin{CJK*}{GBK}{song}
\title{XXX}
\author{XXX}
\date{}%不显示默认的日期。
%正文。。。。
\end{CjK*}
\end{document}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.