如何一个电脑多个屏幕显示不同内容(分屏操作)

2009年5月31日星期日

0 评论  


 

作者:fangzhzh
声明:允许未经作者的同意进行非商业目的的转载,但必须保证原文完整性

昨天看了看了Randy Pausch的关于时间管理的一场演讲

不得不说,我总是会很容易对这种牛人产生一种类似于盲目个人崇拜的情绪,这种情绪使我对他们的话完全丧失免疫能力,因此他们说的,我都会觉得有道理,"偏听偏信"!!呵呵。

有兴趣的人可以去听听看,这场演讲,不仅仅是一场简单的时间管理的演讲,更是一场传授对生命热爱的一场布道。希望我有机会再写出我对Randy的滔滔江水般的敬仰。扯远了。

关于时间管理time management的理念,不是本文的重点,本文主要说Randy演讲中介绍到的有效管理时间手段之一,使你的电脑拥有多个屏幕。

下面是重点:

第一,你要有一个支持多显示器的显卡,本文所述的操作系统是windows xp.查看显卡是否支持多屏幕的方法你要有多个显示器的输出接口,如果是笔记本的话,默认应该都支持两个屏幕;多个屏幕就应该需要多个显卡。

第二,确认显示器

桌面,右键,属性,设置,或者也可以从控制面板里选择显示进入。如果你已经接上了两或多个显示器,应该可以看到1,2之类的字样,这就表明了你的机器已经识别了多个显示器。

第三,有很多种方法:

1 有的显卡本身就自带了分屏多屏显示的功能,可以google下,分屏显示之类的,会有很多网页介绍。我的是联想本本,显卡是Mobile Intel 915GM/GMS, g10 GML Express Chipset Family,看名字应该是集成的,而且express的貌似的不是什么好东西。所以我的显卡不直接支持多屏显示。

2 软件bitwin,我看介绍说,此软件可以使两个显示器进行不同的工作,但是需要两套鼠标、键盘(一套PS2,一套USB,OMG),如果这样,我还不如直接用两台电脑呢!!

3 软件acerGrid。也就是我现在使用的,非常爽。可以使用鼠标把窗口在多显示器中拖了拖去,好像这个软件也没有对机器提出特别多对要求,一套鼠标和键盘足矣!!

acerGrid还有一个特点就是可以把一个物理屏幕两个虚拟的屏幕,即把屏幕1分为1.1和1.2。呵呵,这个特点非常适合我这样忘性大,屏幕不多,但是喜欢把什么东西都能看到的人。

acerGrid的特性我这样使用:屏幕1是正在工作的东西,屏幕2分为2.1和2.2。2.1用来显示我的email,2.2用来显示我的日程表。呵呵,只要能用电脑记下的东西,我的脑子什么都不记。我只需要关注我需要完成的东西。:)

最后,上一张我的图片。

Fw: 论文那些事儿[ 论文剽窃检测系统]

2009年5月23日星期六

0 评论  


论文那些事儿[ 论文剽窃检测系统]

惊现论文剽窃检测系统

两个月前,群里研究生秘书来了一句:孩儿们,我们学校今年新引进了一个论文剽窃检测系统,大家要小心啊!!

恐慌,恐慌。

恐慌来袭!!一时间,群里炸开了锅,说什么的都有。好奇的问怎么查;担心的说这怎么毕业啊;不相信的说这无意儿有了,我把图灵奖发给他;无所谓如我的说,我的论文还没写完呢,老板让不让我毕业还不知道,还剽窃检测呢,我是打酱油的!

尽管如此,恐慌情绪已经漫延开来。群里讨论没完,以至于我只能关了qq,才能安心写我可能用不上的论文。

经济危机,工作难找,论文难写。

后来打开qq,有人这样说:

  • 高中考大学,文理科变3+x大综合,文科要考理科知识,理科要考文科知识。
  • 备受折磨,完全不理想的考上大学:大学扩招,创汇。学校人多的吃饭洗澡排队,自习需要占位,教课老师已无所谓。
  • 大学考上研究生,研究生改革,很多学校3年改2年,看着同年同门去年毕业上班,那开心,怎么好的改革没有落到我们头上?
  • 3年研究完,马上毕业了,经济危机来了。这可不是狼来了的故事,这是真的狼来了。一只吃的计算机科学系就业率本科40%,研究生60%的狼!以往几乎是100%的。
  • 九死一生,找到工作,毕业却如此艰难!老板最后的爱:你这么优秀,我真舍不得你走啊!!要不,再推迟半年毕业吧。
  • 前边之狼,旁边之虎,后边又有抄截!论文剽窃系统。

对,我们就是脆弱的80后,不识愁滋味的80后,"垮掉的一代","最没责任心的一代","愚味的一代","最自私的一代","最叛逆的一代"。

实例分析

在群里花了一个晚上的大讨论之后,恐慌漫延到每一个人心里!

我们实验室的xm今年签了jd,正好她们jd群里有一个bjsd的同门,他们学校竟然有这个玩意,而且可以随便用,自己可以边检测边改。

xm将自己论文发过去,检测结果36%。还有xm的同宿舍的42%。这个数据是很恐怖的,30%以上学位没有,50%开除学籍!

每�被��是抄�的都用�色的字���出�,仿佛是血淋淋一般的事�。

模糊的界限

改是王道。

可是如何去改呢?

看一下判定标准:

��20�字以上就算抄�。就算你已��行�注,本�我�都不清楚�注、引用到底什么用,�在更不明白。

xm参考文献也被标记为抄袭。

一章的两个二级标题,被标记抄袭。

连自己写的好多句话也被评定为抄袭。

管理学院一个哥们(或者是姐们),被抽到盲审,潜心、闭关两个月完全原创了一篇文章,被判定很多抄袭!

计算机的很多概念,理论,书、论文几乎是抄来抄去。如果引用,被标记抄袭!

我感觉回到了 "白色恐怖" 的时代。

"白色恐怖下的幽默"

于是产生了很多"基于论文剽窃检测系统的论文写作方法"。

  • 论文麻烦google翻成英文,然后再麻烦google把刚才生成的E文翻译成中文,肯定0%。
  • 论文所有的文字全制成图片
  • 论文每20(此数字可能因人而异)个字添加语气词,呵呵,哈哈,啊之类的。
  • 将小小说贴上去,肯定0%(这个还真不一定)。

还催生了一些名词新解:

无线网 ―> 不相连接的网络;

大脑 ―> 人体思考的器官;

控制流图 ―> 负责控制结构的结点的集合所构成的图形。

这些白色幽默谁能理解呢??

博客:Muse写,mail发

2009年5月10日星期日

0 评论  

博客:Muse写,mail发

作者:fangzhzh
声明:允许未经作者的同意进行非商业目的的转载,但必须保证原文完整性

Muse写博客

Emacs Muse 是一个很方便的记笔记的工具。它有很多标记(其实不多,但是效果却很好),可以让你专注于文章的内容,文档的格式。一旦文档完成,可以生成很多种格式:包括:pdf,latex,inof,wiki,并且生成的文档很漂亮。

关于Muse的使用,你可以参考:

Muse Muse使用简介

Project- The Emacs Muse

Emacsz中的编辑和发布环境

记录几个有用的快捷键:

  • C-c + C-e 编辑当前的链接
  • C-c + TAB 插入元素

mail发博

gmail的无奈

已经习惯了gmail发博客,再让我上网站去发博客是我难以忍受的: 耗时,麻烦。 但是如果复制、粘贴生成的页面到gmail来发布,页面内的超链接(指向本页内部分)就会失效。而且很遗憾,gmail也没有编辑html代码的功能。如果有这个功能,直接用html格式,将生成的html代码拷贝过去发布就ok了。

邮件客户端

于是考虑,用能够编辑html的邮件客户端。经过试验,发现能够完成任务的最好的工具竟然是outlook,下面是使用过的工具的对比:

工具 缺陷
outlook 好像对source code支持不太好
foxmail 无编辑html功能
KooMail 竟然存在不识别utf-8编码的问题,我无语

无论如何,outlook算是我能找到的 唯一 能用的软件了。

将svn做为windows服务自动启动(转贴)

2009年5月1日星期五

0 评论  

好处是可以用svn ls svn://localhost访问仓库了 那么在局域网内访问,应该是没有问题了

主要参考 http://excastle.com/blog/archive/2005/05/31/1048.aspx http://www.subversion.org.cn/tsvndoc/tsvn-serversetup-svnserve.html

简单的说,要让它执行起来,需要作如下事情:

  1. 理所当然的是去管网下载最新的Subversion,zip的或者安装版本的皆可(写到这里的时候,我下载的是1.4.4的zip)
  2. 添加SVN_EDITOR环境变量,指定到一个可用的纯文本编辑器的路径(比如记事本,这一步是用来设置,当对仓库写操作的时候使用什么编辑器来输入操作注释的...顺带的,设置LANG=zh_CN.UTF8和APR_ICONV_PATH=svn安装目录\iconv,来解决在中文win下cmd中svn的乱码问题)
  3. 执行svnadmin create来创建一个仓库,比如
    1. svnadmin create e:/svn_repos
  4. 在cmd中执行这样的代码
    1. c create svnserve binpath= "[svnserve.exe的完整路径] --service --root [刚才建立的仓库的路径]" displayname= "Subversion"  depend= tcpip start= auto obj= "NT AUTHORITY\NetworkService"
    比如下边是我机器上执行的代码
    1. sc create svnserve binpath= "E:\svn-win32-1.4.4\bin\svnserve.exe --service --root E:\svn_repos" displayname= "Subversion" depend= tcpip start= auto obj= "NT AUTHORITY\NetworkService"
    如果发现执行错误了,可以用sc delete svnserve来删除这个服务,然后重新再来一次
  5. 到此为止,已经成为windows服务了.在开始->运行中输入services.msc后应该就能看到Subversion这个服务了,确认它启动起来吧
  6. 现在,就可以用svn ls svn://localhost来看看了

其实TortoiseSVN有建立仓库的选项,纯本地访问的时候,可以用"file://本地仓库路径"来直接访问...不需要服务器,不过就是只能本地访问罢了...

 

 来源:http://blog.linuxgem.org/doyle/show/146.html

 同样,当然可以用这个方法来把其它的注册为服务了。

这个方法应该也可以被黑客用来注册服务吧,只是容易会被熟悉系统服务的人发现:)

也说用colinux启动boot硬盘上的linux(suse)

2009年4月26日星期日

0 评论  

参考:


google 用Colinux来boot硬盘上的Linux系统

colinux-daemon.txt


前提:
      本机双系统,不想在windows上colinux再占用很大空间再虚拟一个Linux系统。
问题:
           colinux如何使用本机已安装的suse系统。
解决方案:
我的suse.conf文件,仅供参考
--------------我是分割线------------
# The default kernel
cobd0="\Device\Harddisk0\Partition4"
cobd8="\Device\Harddisk0\Partition5"

initrd="initrd.gz"
kernel=vmlinux



# Swap device, should be an empty file with 128..512MB.
cobd6="swap_512Mb"

##add more space to system
cobd2="fs_2048Mb"
cobd3="fs_2048Mb1"


# Tell kernel the name of root device (mostly /dev/cobd0,
# /dev/cobd/0 on Gentoo)
# This parameter will be forward to Linux kernel.
root=/dev/cobd0

# Additional kernel parameters (ro = rootfs mount read only)
ro

# Maximal memory for linux guest
mem=512

# Slirp for internet connection (outgoing)
# Inside running coLinux configure eth0 with this static settings:
# ipaddress 10.0.2.15   broadcast  10.0.2.255   netmask 255.255.255.0
# gateway   10.0.2.2    nameserver 10.0.2.3
#eth0=slirp
eth0=slirp,,tcp:22:22/tcp:8080:80/udp:6000:6002/tcp:6000:6002
#eth0=slirp,,tcp:29000:29000
# Tuntap as private network between guest and host on second linux device
eth1=tuntap

# Setup for serial device
ttys0=COM1,"BAUD=115200 PARITY=n DATA=8 STOP=1 dtr=on rts=on"

# Run an application on colinux start (Sample Xming, a Xserver)
exec0=Xming\Xming.exe,":0 -clipboard -multiwindow -ac"

#mounst windows file system
cofs1=d:\ 
cofs0=c:\


sda1=:cofs0
sda5=:cofs5
sda6=:cobd6
sda8=:cobd8

--------------我是分割线------------
sda1=:cofs0
sda5=:cofs5
sda6=:cobd6
sda8=:cobd8
是为了配合suse系统内的/etc/fstab文件(仅供参考),可以使suse系统自己不用作修改。


/dev/sda6 swap swap defaults 0 0
/dev/disk/by-id/scsi-SATA_HTS541040G9AT00_MPB2LAX2EUVESM-part7 /                    ext3       acl,user_xattr        1 1
/dev/sda8 /home ext3 acl,user_xattr 1 2 
/dev/sda1 /windows/C           vfat       users,gid=users,umask=0002,utf8=true,codepage=936 0 0 uid=lnever,gid=users,utf8=true,codepage=936 0 0
/dev/sda5 /windows/D vfat uid=lnever,gid=users,utf8=true,codepage=936 0 0

users,gid=users,umask=0002,utf8=true,codepage=937 0 0
proc                 /proc                proc       defaults              0 0
sysfs                /sys                 sysfs      noauto                0 0
debugfs              /sys/kernel/debug    debugfs    noauto                0 0
usbfs                /proc/bus/usb        usbfs      noauto                0 0
devpts               /dev/pts             devpts     mode=0620,gid=5       0 0



网络问题:
linux登陆后,配置网络如下:

Once you get the Linux Running login and configure the Network with:

IP address: 10.0.2.15 

broadcast: 10.0.2.255

netmask: 255.255.255.0

gateway: 10.0.2.2

nameserver: 10.0.2.3


命令如下,下边命令需要管理员身份: 

For this purpose you can use ifconfig, but do not forget to change the IP address and the gateway with your settings...

ifconfig eth0 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255

route add default gw 10.0.2.2

echo "nameserver 10.0.2.3" > /etc/resolv.conf

 

图形界面:


export DISPLAY=10.0.2.2:0

怎么使LINUX挂载分区可写

0 评论  

这个问题其实比较简单,有很多帖子可以查到。
我就说一种比较方便的。
现在的linux系统装好后,都会生成自动挂载windows分区的fatab表。但是一般都是只读的,这其实很正常,安全第一嘛。
但是在我想充分利用磁盘空间的情况下,这种只读让我不能忍受。我需要下载、修改、编辑论文,而这些论文为了在win和linux都能用,我都放在windows的盘里。

man mount
看到里边有个选项叫做uid,只需要把挂载参数里加上一个uid=你的用户名,就ok了。
这句仅供参考:
/dev/disk/by-id/scsi-SATA_HTS541040G9AT00_MPB2LAX2EUVESM-part5 /windows/D vfat uid=lnever,gid=users,utf8=true,codepage=936 0 0

ubuntu 7.10源和导入key的方法

2009年4月25日星期六

0 评论  

eb http://cn.archive.ubuntu.com/ubuntu gutsy main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu gutsy-security main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu gutsy-updates main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu gutsy-backports main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu gutsy-proposed main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu gutsy main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu gutsy-security main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu gutsy-updates main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu gutsy-backports main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu gutsy-proposed main restricted universe multiverse



deb http://ftp.sjtu.edu.cn/ubuntu/ gutsy main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ gutsy-backports main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ gutsy-proposed main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ gutsy-security main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ gutsy-updates main multiverse restricted universe
deb-src http://ftp.sjtu.edu.cn/ubuntu/ gutsy main multiverse restricted universe
deb-src http://ftp.sjtu.edu.cn/ubuntu/ gutsy-backports main multiverse restricted universe
deb-src http://ftp.sjtu.edu.cn/ubuntu/ gutsy-proposed main multiverse restricted universe
deb-src http://ftp.sjtu.edu.cn/ubuntu/ gutsy-security main multiverse restricted universe
deb-src http://ftp.sjtu.edu.cn/ubuntu/ gutsy-updates main multiverse restricted universe


deb http://debian.ustc.edu.cn/ubuntu/ gutsy main multiverse restricted universe
deb http://debian.ustc.edu.cn/ubuntu/ gutsy-backports main multiverse restricted universe
deb http://debian.ustc.edu.cn/ubuntu/ gutsy-proposed main multiverse restricted universe
deb http://debian.ustc.edu.cn/ubuntu/ gutsy-security main multiverse restricted universe
deb http://debian.ustc.edu.cn/ubuntu/ gutsy-updates main multiverse restricted universe
deb-src http://debian.ustc.edu.cn/ubuntu/ gutsy main multiverse restricted universe
deb-src http://debian.ustc.edu.cn/ubuntu/ gutsy-backports main multiverse restricted universe
deb-src http://tw.archive.Ubuntu.com/ubuntu gutsy main restricted universe multiverse

deb-src http://tw.archive.Ubuntu.com/ubuntu gutsy-security main restricted universe multiverse

deb-src http://tw.archive.Ubuntu.com/ubuntu gutsy-updates main restricted universe multiverse

deb-src http://tw.archive.Ubuntu.com/ubuntu gutsy-backports main restricted universe multiverse


deb http://archive.Ubuntu.org.cn/ubuntu-cn/ feisty main restricted universe multiverse

deb-src http://tw.archive.Ubuntu.com/ubuntu gutsy-proposed main restricted universe multiverse

deb http://archive.Ubuntu.org.cn/ubuntu-cn/ feisty main restricted universe multiver


下边的脚本导入所有的key

for i in $(grep -o -E "http.*\.(gpg|asc|key)" /etc/apt/sources.list); do echo -n "$i "; wget $i -q -O - | sudo apt-key add -; done; keylist=""; for key in $(grep -o "[A-Fa-f0-9]\{8\}" /etc/apt/sources.list); do if [ -z "$(echo "$keylist"|grep "$key")" ]; then keylist="$keylist $key"; gpg --keyserver subkeys.pgp.net --recv $key && gpg --export --armor $key | sudo apt-key add -; fi; done;

whereis ocamlbrowser

2009年4月24日星期五

0 评论  

希望找到比较好的处理xml的方式,下载了ocaml和cduce。

刚开始,一直找不到cduce的API,很是郁闷,以为cduce只是某些语法而已。
今天在cduceTorial里看到这句话,

 It is recommended that you browse through the available functions of
  the CDuce library using a tool like ocamlbrowser.

即,建议用工具ocamlbowser之类的工具来浏览CDuce库的可用函数API
找不到ocamlbrowser!!!!

google了很久,发现了ocamlbrowser在godi-ocaml-labltk内。

ocaml-labltk需要tcl和tk的库,但是godi安装此包时提示没有tcl,tk库

我从网上下载了tcl最新的也不行。最后看编译信息时,发现,ocaml-labltk查找库只是查看以下几个文件夹:tcl8.4 tcl8.3 tcl8.1.....tcl.8.0,tk也一样。

余下的就简单了,
下载tcl 8.4 tk8.4,编译安装,一切ok.


输入命令,ocamlbrowser,启动一窗口。

Models->path editor,在左侧边框找到路径,add-to-path。
此处的path必须是库对应的文件夹,此路径可以用find查找。
#find /opt/godi -name cduce
/opt/godi/bin/cduce
/opt/godi/lib/ocaml/pkg-lib/cduce
将带有lib的那条路径添加add-to-path。就可以查看cduce的API了。

不过,我发现ocamlbrowser关闭后,path除了标准的都消失了,下次启动还需要添加,有些麻烦。





git报错”You have some suspicious patch lines“

2009年4月13日星期一

0 评论  

解说来源:http://www.dont-panic.cc/capi/2007/07/13/git-on-windows-you-have-some-suspicious-patch-lines/


The cause for this problem is the carriage-return/line-feed problem of Git under Windows/cygwin: The patches contain a trailing line-feed if you edited them with a Windows editor and not strictly inside cygwin. This will trigger the pre-commit hook to fail on patches where the last line of a file has been changed.

原因是:

git认为"回车"和"自动换行"不一样。如果用某些编辑器编辑了后,文件中就会出现line-feed,这就会触发git的pre-commit钩子,对存在line-feed的文件报错。


To solve the problem, you need to edit .git/hooks/pre-commit and comment out the following lines:

if (/\s$/) {
bad_line("trailing whitespace", $_);
}


解决方法:

编辑.git/hooks/pre-commit文件,找到下面这三行

if (/\s$/) {
bad_line("trailing whitespace", $_);
}

注释之(#号注释)


git忽略文件设置

2009年4月11日星期六

0 评论  

在.git/info/exclude写入文件格式即可。

latex过程的过滤文件设置

例子:

# git-ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
*.[oa]
*~
*.aux
*.bak
*.bbl
*.lof
*.log
*.lot
*.lst
*.out
*.pdf
*.toc

latex文档中的首行缩进、每段缩进、空行间隔

0 评论  

参考:
1. lnote
2. lshort
3. http://www.math.zju.edu.cn/ligangliu/LaTeXForum/tex_chinese.htm

CJK包 首段首行默认不缩进,为了使首行默认缩进

\usepackage{indentfirst}


使除首段以外的段落,首行缩进,
\setlength{\parindent}{2em}
        成缩进两个汉字距离的格式。

注意问题:
一:这个环境下,开始结束一个段落的符号就不能用\\(用这个新段不缩进),而必须用\par。
二:输出一个空行必须是\\+一个空行,而不能是\par+一个空行






如何在linux下查看eps的bounding

2009年4月9日星期四

0 评论  

 问题一(插入大图,但是只需要其中的一部分)
我想将四、五行代码做成图片嵌入在tex文件中,于是写成tex,用convert转换成eps,在includegraphic。
但是有个问题就是,生成的eps非常大,但是我需要的部分却很小,于是需要一些处理。
方法一:(很是费了一番周折)
1  tex->pdf,
2 用了一个专门的截图软件scrot,截取需要的部分,为png格式
3 convert png ->eps,
4 include eps
这个过程很繁琐,一不留神,重新再来。

方法二(这是我真正需要的方法)
\includegraphic{bb=0 0 41 32}{a.eps}

此处bb,就是bounding box,概念可以google下。
此处他的作用就是指定图片需要包含的部份。比如上边那句就是说 包含a.eps部分为 左上坐标(0, 0),右下坐标(41,32),其它部分还有选项管理,不在本文讨论范围。
完美解决包含大图中一部分的问题:) 

于是引来问题二
问题二  如何求bounding box
同样有两种方法:
方法一:
ebb a.eps
可以取得bouding box的范围,我没有深究,大概意思应该是  一张大pdf中,有图的部分的边界。

方法二:
Linux中,gostview 打开 eps,鼠标划到哪里,就显示哪里的坐标。
windows里,yap,跟随ctex套件发行,有同样功能。

试了试,用着很好,呵呵







Emacs 的基本操作(基本操作,c/c++/register/etags/GNU-serv/bookmark/键绑定/其它)

2009年4月7日星期二

0 评论  

原文地址:http://dsec.pku.edu.cn/~jinlong/emacs/emacs.html#serv




Emacs 的基本操作

Emacs 中的光标移动

C-f     光标前进一个字符
C-b 光标后退一个字符
C-p 上移一行
C-n 下移一行

M-f 前进一个单词
M-b 后退一个单词

C-a 行首
C-e 行尾

M-a 句首
M-e 句尾

M-{ 上一个段落
M-} 下一个段落

C-v 屏幕上卷一个屏
M-v 屏幕下卷一个屏

C-M-v 另一个窗口下卷一个屏幕
C-M-V 另一个窗口上卷一个屏幕

M-< 文件头
M-> 文件尾

C-u n 或 M-n 重复执行n次后继命令

Emacs中的删除

C-d     删除光标上的字符
DEL 删除光标前的字符

M-d 删除光标后的单词
M-DEL 删除光标前的单词

C-k 从光标位置删除到行尾
C-S-Backspace 删除当前行

C-y 恢复删除最近的一个
M-y 循环恢复删除上一个

文本块操作

C-@     标记文本块的开始

C-x C-x 互换插入点和文本标记的位置

M-h 标记整个段落
C-x C-p 标记整个页面
C-x h 标记整个缓冲区

查找与替换

简单查找替换

C-s     向前递增查找
C-r 反向递增查找

C-s C-w 向前递增查找,把光标所在的单词作为查找对象
C-r C-w 反向递增查找,把光标所在的单词作为查找对象

replace-string 查找替换光标后所有的内容
M-% 查询替换操作

对于M-%,需要注意的是其相关的一些操作:

SPACE或y    用新字符串替换原来的,并进入下一个位置
DEL或n 不替换,进入下一个位置
. 在当前位置做替换后退出查询-替换操作
, 替换,并显示替换情况(再按空格或y进入下一个位置)
! 对后面的内容全部进行替换,不再提问
^ 返回上一个替换了的位置
RETURN或q 退出查询替换操作
C-r 进入递归编辑状态
C-w 删除此处内容并进入递归编辑状态(好进行其他修改)
M-C-c 退出递归编辑状态,继续完成查询-替换操作
C-] 退出递归编辑状态和查询替换操作

正则表达式查找与替换

C-M-s Return      向前查找正则表达式
C-M-r Return 反向查找正则表达式

C-M-s 向前递归查找正则表达式
C-M-r 反向递归查找正则表达式

query-replace-regexp 查询-替换正则表达式
replace-regexp 无条件替换正则表达式(慎用)

正则表达式中的字符:

^          匹配行首
$ 匹配行尾
. 匹配任意单个字符
.* 匹配任意个字符
\< 匹配单词的开头
\> 匹配单词的结尾
[] 匹配[]中的任何一个字符,如[a-z]匹配任何一个小写字母

Emacs 的C/C++ 模式

指定为C++模式的方法

一般根据扩展名自动设定,不用指定,不过有时候你希 望.h文件是C++模式的(缺省是C模式),在文件第一行(或其末尾)上加入

  // -*- C++ -*-

语法高亮

不是C模式专有,顺便提一下,M-x global-font-lock-mode RET 或 在.emacs中加入(global-font-lock-mode t)。在console下,Emacs21才支持语 法高亮。(语法高亮,不同关键字用不同的颜色来突出)

编译和调试

M-x compile RET 编译
M-x gdb RET 调试

C-x ` (出错信息中)下一个错误,一个窗口显示错误信息,另一个
显示源码的出错位置
C-u C-x ` 在compile buffer 列出同样的错误。
C-c C-c 转到出错位置

启动gdb调试器后,光标在源码文件缓冲区中时:

C-x SPC         在当前行设置断点
C-c C-c 中断
C-c C-z 中止
C-x C-a C-s step
C-x C-a C-n next
C-x C-a C-t tbreak
C-x C-a C-r continue
C-x C-a C-d 删除当前断点
C-x C-a C-l 到达最后一行

显示vector元素值

GDB 在调用成员函数的时候需要首先找到函数的代码才能执行。如果一个成员函数是内联的、并且没有在程序中被使用, 那么 GDB 将找不到其代码,也就不能执行此成员函数。
方法1    在源程序的查看之前的位置使用一次  at() 成员函数。
方法2 执行 print vec_obj 可以列出 vector 的内部数据结构,使用这些结构也可以查看各个元素。
假设列出了如下内容:
$1 = {<std::_Vector_base<int,std::allocator<int> >> = {
_M_impl = {<std::allocator<int>> = {<__gnu_cxx::new_allocator<int>> = {<No data fields>},
< No data fields>}, _M_start = 0x8095040,
_M_finish = 0x809505c, _M_end_of_storage = 0x8095060}}, <No data fields>}

可以这样查看第一个元素:print vec_obj._M_impl._M_start[0]

为方便使用,可以定义一个宏来使用:
define print_vector
print $arg0._M_impl._M_start[$arg1]
end

这样,print_vector vec_obj 2 就可查看第三个元素。

在C/C++代码中操作

M-a        移动到当前语句的开始
M-e 移动到当前语句的末尾

C-M-a 移动到当前函数的开始
C-M-e 移动到当前函数的结尾

M-q 若光标在注释文本中间,则进行段落重排,保留缩进和前导字符

C-M-h 把光标放在当前函数开头,把文本块标记放在函数结尾, 即把函数整个选作为一个文本块。

C-c C-q 对整个函数进行缩进
C-x h 选定整个buffer, 然后C-M-\可以对代码进行重新排版

C-c C-u 移动到当前预处理条件的开始位置
C-c C-p 移动到上一个预处理条件
C-c C-n 移动到下一个预处理条件

M-; 对当前行进行注释
C-x C-x 快速返回移动前的光标位置

C-c C-c 对一块代码进行注释;取消注释用命令 uncomment-region

子模式

auto-state    当你输入时自动缩进,自动换行
hungry-state 当你Backspace时,自动删除尽可能多的空白和空行

C-c C-t 同时转换(开/关)auto-state和hungry-state子模式
C-c C-a 转换 auto-state 子模式
C-c C-d 转换 hungry-state 子模式

C-c . 设置缩进风格(按TAB键可列出可用的风格,缺省的为gnu,其
缩进为2个字符;linux为8个;k&r为5个…)
TAB 重新缩进当前行

M-/ 自动补齐(缓冲区中能找得到的串)
M-; 行尾加入注释

C-c C-e 扩展宏

C-c C-c 注释掉整个区域
C-c C-\ 将区域中的每一行结尾都加入一个'\'字符

Emacs中的register

在多个文件中逛的时候,我们常常需要快速切换到先前访问的某个位置。因此,我们需要把文件及其光标位置暂时存放在某个地方。

在Emacs中,我们可以使用register暂时性保存这些信息。

将当前光标所在位置保存入一个register中:

C-x r SPACE + register名(一个字符,比如a吧)

然后我们就可以到处瞎逛,若要回到保存的register a位置,我们可以输入:

C-x r j a

挺好用的吧:)

如果你记性和我一样不好,恐怕会常常想看看自己保存了哪些register,我们可以输入:

M-x view-register    查看某一个register
M-x list-registers 查看所有的register

其实我常用的就是以上功能,为了使笔记稍微完整一点,下面开始Copy 《GNU Emacs Manual》的相关章节:

在下面,我们使用r来命名所有的register:

Save Positions in Registers

C-x r SPC r
Save position of point in register r (point-to-register).
C-x r j r
Jump to the position saved in register r (jump-to-register).

Saving Text in Registers

C-x r s r
Copy region into register r (copy-to-register).
C-x r i r
Insert text from register r (insert-register).
M-x append-to-register RET r
Append region to text in register r.
M-x prepend-to-register RET r
Prepend region to text in register r.

Saving Rectangles in Registers

C-x r r r
Copy the region-rectangle into register r (copy-rectangle-to-register).
With numeric argument, delete it as well.
C-x r i r
Insert the rectangle stored in register r (if it contains a rectangle) (insert-register).

Saving Window Configurations in Registers

C-x r w r
Save the state of the selected frame's windows in register r (window-configuration-to-register).
C-x r f r
Save the state of all frames, including all their windows,
in register r (frame-configuration-to-register).

Keeping Numbers in Registers

C-u number C-x r n r
Store number into register r (number-to-register).
C-u number C-x r + r
Increment the number in register r by number (increment-register).
C-x r g r
Insert the number from register r into the buffer.

使.emacs立即生效

M-x eval-current-buffer

Etags

建立Etags文件:

在代码目录中运行etags -R

如果要向现有tags表中添加,则运行etags -a

访问Tag文件:

M-x visit-tags-table

常用热键

M-. 访问tag C-u M-.访问下一个tag M-* 返回

Emacs 中的 GNU-Serv

常常使用console的人往往也改不了这么个习惯,就是进了X就开个终端,然后在里头埋头干活,看到什么文件想修改就vi一把。我也是这个习惯。vi比emacs启动快多了。

GNU-Serv改变了这个情形。

首先要安装gnu-serv这个包,在我的机器上apt-get install gnu-serv就可以了。

接下来修改.emacs文件

  (require 'gnuserv)
(gnuserv-start)

接下来修改.bashrc文件

  alias e='gnuclient'

这样,在终端下就可以通过 e foo来编辑foo文件了,它会自动关联到已经打开的emacs中。

更强大的功能在于,你还可以在远程执行gnuclinet,在本机编辑文件后自动存放到远程机器上。

Emacs中的bookmark

将当前页面加入bookmark

  M-x bookmark-set

修改.bashrc,将list-bookmarks绑定到F9上

  (global-set-key [(f9)] 'list-bookmarks)

这样,就可以通过F9键访问书签了。

常用键绑定

F2  寻找wiki
F3 进入dired模式
F4 进入eshell模式
F12 t 进入todo模式
F12 c 访问Calendar模式
F12 p 在当前页添加Planner
F12 g 查阅当天的plan
F12 r 添加笔记
F9 列出bookmarks

在Emacs 中添加Appointment

这个主要是添加约会和提醒用的,首先修改.emacs文件打开约会提醒功能。

(setq appt-issue-message t)

然后可以通过appt-add添加新的约会提醒,到时间Emacs就会弹出窗口提醒。如果这期间要取消约会,那么可以通过appt-delete删除。

Calendar和Diary

Calendar是配合Diary进行行程安排的,两者配合可以用于规划比较长远的事情。

我已经把Calendar模式绑定到了F8上,以下列举几个常用的命令:

.  跳回当天
o 跳到某一个月
g 这一系列命令表示goto,可以跳到指定的某一天。
g d 跳到某年某月某日
g c 跳到某年某星期的星期几
g C 跳到阴历的某一天
p 这一系列命令表示print,例如p C显示显示当前的阴历日期
i 这一系列命令表示插入行程安排
i d 加入当前这一天的行程安排,类似还有m w y
i w 跳到某个星期的星期一,按下i w可以加入每个星期都必须做的事情
i a 跳到某天,按下i a可以加入周年纪念日

好习惯应该是经常打开calendar,跳到某天,按下d就可以显示这一天的行程安排。

Emacs 中的 To-Do Mode

To-do可以用来做日程安排,todo,done,top分别表示要完成的事情,已完成的事情,和优先事情。

首先要修改.emacs文件

  (setq todo-file-do "~/.emacs.d/todo-do")

(setq todo-file-done "~/.emacs.d/todo-done")

(setq todo-file-top "~/.emacs.d/todo-top")

下面是一些快捷操作

i    加入一个条目

e 编辑条目

k 删除条目

+/- 在不同category之间切换

j 跳转到不同的category

f 对已完成的事情进行归档,并可以进行评论。

如果按i想把条目归入新档时出现错误,可以用todo-add-category加入

想要添加什么事情,随手就可以通过F5进入todo-mode,按寻找一个category,按I添加一个新的entry。完成之后再切换到todo去,按下d或者f删除entry。每个星期可以通过bookmark访问一下done文件,顿时觉得生活过得好充实。

todo部分转载自coda@newsmth。

用planner安排日程

这里有篇不错的入门文档

安装planner

在我的机器上只需要 apt-get install planner-el即可,非Debian的系统也不麻烦。

接下来要配置.emacs文件。

;;;planner
(require 'planner)
(global-set-key (kbd "<f12> p") 'planner-create-task-from-buffer)
(setq planner-publishing-directory "~/document/wiki/diary/plan")
;;;;Start planner together with Calendar
(planner-calendar-insinuate)
(setq planner-calendar-show-planner-files t)

常用快捷键

查询任务
M-x plan 查询所有未完成的工作
M-x planner-goto-today 查询当天未完成的工作

添加任务 C-c C-t或者M-x planner-create-task-from-buffer

标记任务完成 C-c C-x或者M-x planner-update-task

修改任务描述 M-x planner-edit-task-description

重新安排一个任务 C-c C-c

重新安排多个任务 区域选定后M-x planner-copy-or-move-task

Change a plan of task M-x planner-replan-task

Delete a task M-x planner-delete-task

Reordering task M-p 升序 M-n 降序

修改优先级 C-M-p 提升;C-M-n 降低

以下是从info中复制过来的

Ideas for using planner more effectively:

  • Add `(plan)' to the end of your `~/.emacs' so that you are reminded about your tasks every day.
  • Bind useful functions to shortcut keys and get used to creating tasks and notes from anywhere.
  • Think about how you plan your day and look for ways to improve it. Ask the mailing list for tips.
  • Browse the rest of this manual, the source code, and other resources on the Net for tidbits you can use.
  • Have fun!

Useful functions outside planner buffers:

  • `planner-create-task-from-buffer'
  • `remember'
  • `planner-goto-today'
  • `planner-goto'
  • `plan'

Useful functions inside planner buffers:

  • `C-c C-t' (`planner-create-task-from-buffer')
  • `C-c C-x' (`planner-task-done')
  • `M-x planner-edit-task-description'
  • `C-c C-c' (`planner-copy-or-move-task'), `M-x planner-copy-or-move-region'
  • `M-x planner-replan-task'
  • `M-x planner-delete-task'
  • (`planner-raise-task') and (`planner-lower-task')
  • (`planner-raise-task-priority') and (`planner-lower-task-priority'),
  • `planner-replan-note'
  • `planner-update-note'

--

如何得到gcc的抽象语法树(AST) fdump-translation-unit

2009年4月6日星期一

1 评论  

无数论文上看到,gcc -fdump-transaltion-unit 就可以得到很具体的抽象语法树,可是我换了N多版本,得到最多信息的就算自定义函数的语句序列了,

也试验了N多的工具,能用(gcc 4.3下成功编译)的工具就不多,得出的信息更是不适合。
于是,自己写算了!!

折腾了半天,看了一个叫print_node的函数,结果却是gcc debug用的,发现不行,就没有深究。

问了下google, 找到这个比较有用的信息。


On Mon, Mar 23, 2009 at 10:17, Praveen D V <for.pdv@gmail.com> wrote:

> With the new version I'm not able to get those dumps.
> I just downloaded latest release and compiled it. ÂIt too doesn't dump
> those typedef trees.
> Any other pointers?

You will need to modify the GCC dump routines yourself to dump the
typedefs. Start with dump_node and the calls made to dump_begin
(TDI_tu,...).

As I said before, these routines change almost constantly and we don't
even try to keep the output consistent. They are just debug
instruments for us.

简单翻译下:
有人抱怨说,-fdump-translation-unit 写的信息不够!怎么办?

gcc的开发者说,呵呵,俺们本来没有打算保持输出信息的完整性,但是毛主
席他老人家说过,自己动手,丰衣足食,所以,你自己把dump_begin和
dump_node改吧改吧, 把你想要的都打出,不就得了。


呵呵,受教了

Workrave:拯救你的手指,肌肉和眼睛[推荐一下]

2009年4月3日星期五

2 评论  

推荐这种软件,必须的:) 


Workrave 是一个定时提醒工具,可以检测你鼠标和键盘的使用频率来判断你的工作强度,然后会给你提醒。比如连续打键盘 10 分钟就会让你小休息一下,连续看电脑 2 小时会让你休息 10 分钟等等,这些都可以按自己的情况来设置的。另外在提示你休息的同时,还提供一个短片来指导你休息,比如怎么运动手指,手臂,休息眼睛,等等,挺不错的小 软件。

Workrave

Workrave 主页:http://www.workrave.org/welcome/

P.S. 我们再次向你推荐 Workrave,珍惜自己的健康,从现在做起。

用Latex写漂亮的论文

2009年3月30日星期一

0 评论  

一直觉得有必要写这样一篇文章,因为学位论文从格式上说更像一本书,与文章 的排版不同,不仅多出目录等文章没有的部分,而且一般要设置页眉页脚方便阅 读查找。学校有时会提出具体的格式要求,虽然复旦的要求非常简单,而且事实 上并不严格执行,但自己的论文毕竟是自己的孩子,还是要敝帚自珍的,大家都 希望做得漂亮一点。

网上已经有不少学位论文的模板,其中大都出自一两个最初的版本,针对各自学 校的要求作了一些改动。这些模板还是很方便的,如果对它们的排版效果感到完 全满意,那么直接拿来用就可以了。不过如果想调整其中某些格式,就不得不仔 细研究一下它们的代码或说明文档,有时并不那么容易。而且这些模板的导言或 cls或sty文件都写得很长,内容很多,尽可能的包含了大家有可能用到的功能, 但其实具体到每个人只有一部分是需要用到的。用一个包含"冗余"代码的模板, 总不是一件很舒服的事情。当然也许很多人抱着能用就好的态度,并不care。:)

本文是为那些对论文格式有特殊要求或喜欢自己设置格式的人写的。如果你觉得 网上能找到的论文模板已经足以满足你的需要,并且对TeX本身也没有多少兴趣, 那么你没有必要花费宝贵的时间阅读本文。

阅读本文的基础是假定你已经了解怎样用LaTeX来写普通的文章。一般的 TeX/LaTeX命令不会再作解释,重点将放在学位论文与普通文章的不同点上,以及 怎样用一些宏包方便地设置其格式。其中大部分内容来源于网络资源、工具书以 及各个宏包的说明文档,恕不一一注明,在此一并致谢!

首先讲一下纸张大小和页边距的设置。根据复旦的格式要求,纸张大小为A4纸, 正文用小四号字,页边距按Word中的默认设置。小四号字即12pt, Word中默认的 页边距为

上边距=2.54cm, 下边距=2.54cm, 左边距=3.17cm, 右边距=3.17cm

或者换算成更容易记忆的

上边距=1in, 下边距=1in, 左边距=1.25in, 右边距=1.25in

如果我们用book类,第一句可以写

\documentclass[a4paper,12pt]{book}

然后用geometry宏包设置页边距

\usepackage[top=1in,bottom=1in,left=1.25in,right=1.25in]{geometry}

但其实这样设置的页边距极不美观,尤其是左右对称的页边距没有考虑装订的需 要,而且加上页眉后这样的上边距就显得过窄。所以注重美观的话还是自己调整 一下吧。

需要注意的是,book类默认是twoside即双面打印模式,与article类默认的 oneside即单面打印模式不同。两者区别在于页边距和页码的位置。单面模式每页 的页边距都相同,双面模式则会在偶数页将设置的左、右页边距调换。如果采用 单面打印,则可在\documentclass的方括号里加上oneside参数,并在geometry的 选项中适当增加左边距,减少右边距,以留出装订线的位置。但是不要忘了装订 的时候右侧一般会裁掉一点边,所以左、右边距也不要相差过大。如果采用双面 打印,则geometry中的设置被解释为奇数页的页边距,偶数页的左、右边距会自 动互换。

还有几个注意事项。首先,这里的奇数页和偶数页是针对当前page计数器的值来 说的,而不是在生成文件中总的页码。也就是说,假如当前页在整个输出中总排 序是偶数页,但当前page计数器(即显示的页码)为奇数,则当前页的页边距是按 奇数页设置的。

其次,\documentclass还有一对选项openright和openany, book类默认是前者, 即每一章(包括目录)都会在奇数页开始,如果前一章的最后一页是奇数页,则会 在其后插入一页空白页,以确保新的一章仍然从奇数页开始。这是书籍的排版规 范,不建议改变,论文页数比较少的还可以借此增加页数。:)这是双面模式的情 况,在单面模式下不存在这个问题。经常有人问为什么自己明明是单面打印,却 仍然会在两章之间有一页空白页,请注意book类默认是双面模式,除非你设为 oneside, 记住告诉TeX你要的是什么!

另外,为了方便查看,页码应该放在书籍的外侧。对于单面模式,外侧就是右 侧,而对于双面模式,奇数页右侧是外侧,偶数页左侧是外侧。如何设置页码留 到后面讲设置页眉、页脚时再详细说。

至于到底是单面打印还是双面打印,看你自己的喜好了。复旦的论文规范没说, 一般的做法是博士双面、硕士单面。反正总页数少于50页的话,就不要双面了, 否则显得太单薄,书脊的内容都很难打印。

最后提一个常见的问题。如果用pdf文件来打印,在Acrobat的打印对话框里有一 项Page Scaling默认是Fit to paper, 这样打印出来整个内容就会缩小一些,不 再是设置的尺寸。这是因为打印机的可打印范围不能达到整个A4纸张的全部,而 是比A4纸的规格要小一些(具体的可打印范围跟打印机型号有关), Fit to paper 的意思就是把整个页面调整到可打印范围上去,以保证所有页面上的内容都能打 印出来。因为可打印范围总是小于A4纸的尺寸,所以打印出来总是会缩小一些。 缩小的比例一般为95%左右,与打印机型号有关。解决这个问题,只要选择Page Scaling为None就可以了。

这一节讲中文字体和中英文混排的问题。中文处理推荐使用CJK或新版CCT, 旧版 CCT因为年代久远,有一些bug会导致莫名其妙的问题,不建议再使用。本文以 CJK为例,中文环境为

\begin{CJK*}{GBK}{song}
...
\end{CJK*}

与英文习惯不同,中文排版一般没有粗体的概念,而是用宋体、黑体、楷体、仿 宋等不同的字体来加强文本效果。在CJK默认的字体定义文件中,宋体对应的粗体 是用\CJKbold 命令通过微小平移字形来实现的,不仅放大后能看到锯齿,而且也 不符合中文的排版习惯。建议将宋体对应的粗体设为黑体,这样文中所有粗体命 令作用的环境中加粗的宋体都会自动变成黑体,不需要再用\CJKfamily{hei}来转 换。

宋体的字体定义文件C19song.fd里典型的一段代码如下

\DeclareFontFamily{C19}{song}{}
\DeclareFontShape{C19}{song}{m}{n}{<-> CJK * gbksong}{}
\DeclareFontShape{C19}{song}{bx}{n}{<-> CJKb * gbksong}{\CJKbold}
\DeclareFontShape{C19}{song}{m}{it}{<-> CJK * gbksongsl}{}
\DeclareFontShape{C19}{song}{bx}{it}{<-> CJKb * gbksongsl}{\CJKbold}
\DeclareFontShape{C19}{song}{m}{sl}{<-> CJK * gbksongsl}{}
\DeclareFontShape{C19}{song}{bx}{sl}{<-> CJKb * gbksongsl}{\CJKbold}

这里C19代表GBK字符集的编码方式,m表示字符的粗细程度和宽紧程度均为中等 (medium), bx表示字符的属性为粗(bold)和松(expanded), n, it和sl分别表示正 常直立体(normal), 意大利斜体(italic)和机械斜体(slanted)。 \DeclareFontShape的最后两个参数分别是字体定义和命令序列。显然,上述语句 将宋体的粗体定义为用\CJKbold 生成。要将其改为黑体,只需将这段代码改为

\DeclareFontFamily{C19}{song}{}
\DeclareFontShape{C19}{song}{m}{n}{<-> CJK * gbksong}{}
\DeclareFontShape{C19}{song}{bx}{n}{<-> CJKb * gbkhei}{}
\DeclareFontShape{C19}{song}{m}{it}{<-> CJK * gbksongsl}{}
\DeclareFontShape{C19}{song}{bx}{it}{<-> CJKb * gbkheisl}{}
\DeclareFontShape{C19}{song}{m}{sl}{<-> CJK * gbksongsl}{}
\DeclareFontShape{C19}{song}{bx}{sl}{<-> CJKb * gbkheisl}{}

实际上,正式的中文排版也不应使用斜体,而应使用楷体或仿宋代替。所以也可 以类似地将上述语句中的gbksongsl改为gbkkai或gbkfs。

上述字体定义命令可以放在sty文件中(设保存文件名为thesis.sty, 则在导言区 用\usepackage{thesis}引用,后面所述的大部分命令也都可以放在sty文件中), 而不需要更改本地机器上的fd文件,以便在别的机器上也能产生同样的效果。

另外,为了方便可以定义几个简短的字体转换命令

\newcommand{\song}{\CJKfamily{song}}
\newcommand{\hei}{\CJKfamily{hei}}
\newcommand{\kai}{\CJKfamily{kai}}
\newcommand{\fs}{\CJKfamily{fs}}

以后就可以用\song, \hei, \kai和\fs在文中转换字体了。

在用\begin{CJK*}{GBK}{song}开始中文环境后,应加上\CJKindent和\CJKtilde 两句。前者将段首缩进设为两个中文字符的宽度。后者则是为了解决中英文混排 的美观问题。CJK*环境会吞掉跟在汉字后面的空格,从而使得源文件中的换行不 会在相邻汉字之间产生空白。但是这样一来,像下面这样输入的中英文内容

中文 abc 中文

就会产生如下效果

中文abc 中文

即abc两侧的空白不一样,很不美观。为解决这个问题,\CJKtilde重新定义了波 浪符~的意义,使得这个符号不再代表一个不可断行的空格,而是一个可断行的弹 性距离,加在中文和英文之间调整它们的距离。上面的中英文内容应该这样输入

中文~abc~中文

就能得到良好的效果。这个输入方式最好一开始就形成习惯,否则后来再加会很 麻烦。当然你也可以这样输入

中文abc中文

这样的话虽然中英文之间的距离太窄,但至少左右对称,比上述第一种方式略 好,是偷懒的办法。不过如果你比较在意排版质量的话,还是忍受一下输入~的麻 烦吧。

中英文混排有一些标点的问题要处理好。首先是在默认的CJK环境里,行末的中文 标点不能与边界对齐,因为中文标点也被视为一个普通的全角字符,所以看起来 行末就有了不应该有的空白,这不符合中文的排版习惯。另外,当一行文字需要 压缩或拉伸时,逗号与句号也应该区别对待,逗号后面留的空白应该比句号小一 些。这两个问题用CJKpunct 宏包就能很好地解决,只要加上 \usepackage{CJKpunct}即可。

此外,中英文混排的时候是用中文标点还是英文标点呢?这并没有统一的规范。 不过比较合理也比较通行的做法是,中文后用中文标点,英文后用英文标点。比 较特殊的两个标点是句号和括号。一般数学文章习惯用全角的实心句点作为中文 句号,这样看起来与英文的句号比较一致。全角的中文括号看起来不太好看,可 以统一使用英文的括号,不过左括号前面和右括号后面最好加上波浪符~以和前后 的文字留出适当的距离。

上面说的这几点也许比较琐碎,不过也正是最能看出是否精心排版的地方。

下面几节讲怎样用titlesec和titletoc宏包设置章节标题、页眉页脚和目录的格 式。设置页眉页脚有一个很有名的宏包fancyhdr也可以用,不过titlesec提供的 页面设计命令更方便与它的章节标题命令配合,功能更强大。这一节先讲章节标 题格式的设置。

在引用titlesec宏包时就可以指定几个格式选项,例如

\usepackage[bf,small,center,indentafter,pagestyles]{titlesec}

其中bf设置章节标题的字体为黑体,这也是默认值,可以略去。此外,还可以设 为rm(罗马体), sf(无衬线体), tt(打字机体), md(中等黑度), up(直立体), it(意大利斜体), sl(机械斜体), sc(小体大写字母)。

small设置标题字体的尺寸,还可设为big(默认), medium, tiny。

center使标题居中,还可以设为raggedleft(居左,默认), raggedright(居右)。

indentafter相当于宏包indentfirst的作用,使标题下面的第一个段落正常缩进。

pagestyles是申明后面要自定义页面样式。

下面就可以用\titleformat, \titlespacing, \titlelabel等命令来设置标题格 式了。因为这些命令里会用到中文,所以要在设置之前放一个空的CJK环境,如

\begin{CJK*}{GBK}{song}
\end{CJK*}

下面的\titleformat命令设置了章标题的格式

\titleformat{\chapter}[hang]{\centering\LARGE\bfseries}{\chaptername}{1em}{}

其中\chapter可以换为\section, \subsection等,设置节、小节等标题的格式。

hang表示标题头与标题内容在同一行,是默认值。而book类默认的章标题是标题 头与标题内容放在两个段落,对应于display选项。此外还有block, runin, leftmargin, rightmargin, frame, wrap等选项,一般不大用到。

\centering\LARGE\bfseries这一块是设置标题的排版格式,这里设置为居中、 \LARGE尺寸和黑体。

后面紧跟的是标题头的定义。book类里的标题头是英文,需要改成中文。如果希 望改成"第一章"这样的格式,则应先引用CJKnumb宏包,它提供了把阿拉伯数字转 换成中文数字的命令。然后定义

\renewcommand{\chaptername}{第\CJKnumber{\thechapter}章}

那么\titleformat里的标题头定义\chaptername就得到我们希望的效果。当然你 也可以不用中文数字而用阿拉伯数字,即定义

\renewcommand{\chaptername}{第~\thechapter~章}

跟在标题头定义后面的是标题头与标题内容之间的距离,这里是1em。注意,在中 文环境里1em等于一个汉字的宽度。

最后一个花括号内是在排版标题前执行的命令,这里空置。

然后用\titlespacing或\titlespacing*命令设置标题与四周的距离,例如

\titlespacing{\chapter}{0pt}{*0}{*4}

将章标题与左边、上边、下边内容的距离分别设为0pt, *0, *4。这里*n表示弹性 距离,对上距离来说相当于n ex plus .3ex minus .06ex, 对下距离来说相当于 n ex plus .1ex。弹性距离因为有一定的伸缩自由度,比较容易得到美观的排版。 如果想自己指定用关键字plus, minus定义的弹性距离,可以用星号版本的命令, 即

\titlespacing*{命令}{左距离}{上距离}{下距离}

上面设置了章标题的命令,用相同的命令也可以设置节、小节等的标题格式。但 如果没有特殊的要求,只希望修改一下标题头,可以用更加简单的命令 \titlelabel来设置。例如

\titlelabel{\S\thetitle\quad}

将章节标题设置为类似"§1 标题内容"的格式。这里\quad等于\hspace{1em}, 即 空出一个汉字宽度的距离。注意,\titleformat命令的定义会覆盖\titlelabel的 定义,而一般来说章跟节标题的格式不一样,所以只要另外用\titleformat命令 定义章标题的格式,\titlelabel的定义就只能作用于节以下层次的标题了。

这一节接着讲怎样用titlesec宏包提供的命令设置页眉、页脚。下面命令定义了 一个新的页面样式并使用该样式

\newpagestyle{main}{
\sethead{}{}{\kai\small\chaptername\quad\chaptertitle\qquad\thepage}
\setfoot{}{}{}\headrule}
\pagestyle{main}

其中\sethead命令设置页眉,格式为

\sethead[偶数页左页眉][偶数页中页眉][偶数页右页眉]
{奇数页左页眉}{奇数页中页眉}{奇数页右页眉}

单面打印模式只要给出奇数页的设置即可,双面模式则需要将左、右页眉做个调 换。上面给出的例子是单面模式的。

\setfoot用来设置页脚,格式与\sethead类似。

在页眉、页脚里可以显示章节标题、页码等内容。如上面的例子就在页眉中显示 了章标题和页码。注意,\qquad相当于两个\quad, 即\hspace{2em}。

\headrule是划出页眉线,类似地\footrule划出页脚线,不过比较少用。默认页 眉线的宽度是0.4pt, 如果不满意,可以用下面命令重新设置其宽度

\setheadrule{宽度}

此外,还有两种特殊情况需要处理。首先,尽管在上面例子中用 \pagestyle{main}使用了自定义的页面样式,但每一章的第一页不受影响,仍然 使用默认的plain样式。在这种页面上,出于美观的考虑,一般不加页眉,而将页 码放在页脚(也有人喜欢不加页码)。所以plain样式(没有页眉,页码放在页脚中 间)已经基本符合要求,不必修改。如果需要修改,可定义一个新的页面样式,再 用下面命令重定义plain样式

\renewpagestyle{plain}{新的页面样式}

其次,在目录、参考文献或以\chapter*命令生成的章,上面页眉定义中的标题头 \chaptername是不应该显示的。所以有必要定义一个页面样式在这种特殊的章使 用,例如可以定义

\newpagestyle{special}{
\sethead{}{}{\kai\small\chaptertitle\qquad\thepage}
\setfoot{}{}{}\headrule}

然后在文中适当的地方用\pagestyle{special}改用该样式。

目录是学位论文的必要组成部分。只要在正文中适当的地方用

\tableofcontents

就可以自动生成目录。但是目录的格式不总是符合个人的要求,有时还要往其中 加一些条目。用titletoc宏包提供的命令可以方便地设置目录的格式。

首先可以用

\renewcommand{\contentsname}{目\quad 录}

将目录部分的标题改为中文。然后,用\titlecontents命令来设置不同级别目录 项的格式。例如,chapter层次的目录项格式可设置如下

\titlecontents{chapter}[0pt]{\vspace{.5\baselineskip}\bfseries}
{第\CJKnumber{\thecontentslabel}章\quad}{}
{\hspace{.5em}\titlerule*[10pt]{$\cdot$}\contentspage}

其中0pt是目录项到版芯左边界的距离。紧跟其后的是在排版目录项之前执行的命 令,这里\vspace{.5\baselineskip}表示与上文留出一定的垂直距离,该距离为 当前单倍行间距的一半。\bfseries把整条目录项的字体设为黑体。

后面一项是设置目录项的头部,这里设为"第一章"这样的格式,并在其后留出一 个汉字宽度的距离。紧跟的是设置目录项主体的格式,这里因为跟目录项头部相 同而空置。

再后面是设置填充命令和页码。这里先用\hspace{.5em}在目录项内容后面留出一 点空白,以免跟其后的填充点靠得太近。然后用\titlerule*命令画出填充点,这 里是把垂直居中的实心圆点作为填充符号(习惯上中文不采用居下的填充点), 并 以10pt为包含一个填充符号的水平盒子的宽度,即这个宽度越小,填充点越紧密。 填充点后加上页码\contentspage。

类似地可以设置section层次的目录项格式如下

\titlecontents{section}[2em]{\vspace{.25\baselineskip}}
{\S\thecontentslabel\quad}{}
{\hspace{.5em}\titlerule*[10pt]{$\cdot$}\contentspage}

其中2em表示section层次的目录项距左边界有一个缩进。如果还有subsection等 层次,可以类似地定义。

但是\chapter*, \section*等命令生成的标题不会自动进入目录中。例如中文摘 要部分如果用下面命令开始

\chapter*{摘\quad 要}

那么可以紧跟其后加上

\addcontentsline{toc}{chapter}{中文摘要}

就可以将中文摘要作为一个chapter层次插入目录中。英文摘要、参考文献部分均 可照此处理。随便提一下,参考文献部分的标题可用如下命令改为中文

\renewcommand{\bibname}{参考文献}

这一节讲前几节尚未提到的一些文本排版问题。

首先是行间距的设置。学校的学位论文规范中提到行间距为20pt。其实不同尺寸 的字体行间距都不相同,而是成比例关系。这个20pt是对正文主要字体来说的。 在TeX中基本的行间距是\baselineskip, 对于12pt的字体,这个值等于14.5pt, 而真正的行间距是

\baselineskip * \baselinestretch

\baselinestretch默认为1, 但我们可以重新设置它的值,如

\renewcommand{\baselinestretch}{1.38}

就得到真正的行间距为14.5pt*1.38≈20pt。而这样定义之后,对不同尺寸的字体 都会按同样的比例因子1.38放大行间距,使得全文排版能协调一致。

那么\baselineskip的值是怎么知道的呢?在TeX源文件中加上命令

\showthe\baselineskip

编译时就会暂停下来显示当前字体的\baselineskip值。用这个方法可以知 道,10pt字体对应的\baselineskip为12pt, 11pt字体对应的\baselineskip为 13.6pt。

至于通常所说的1.5倍行间距和双倍行间距,一般理解为字体基准尺寸的1.5倍和 2倍,例如对于12pt字体, 1.5倍行间距和双倍行间距分别应为12pt*1.5=18pt, 12pt*2=24pt。那么\baselinestretch分别应设为18pt/14.5pt≈1.24, 24pt/14.5≈1.66, 而不是1.5和2, 那样的话行间距就会显得过大了。

然后讲一下论文首页的设置。复旦的学位论文,装订的地方会按学校的模板制作 封面,就不用自己做了,不过规范中要求在扉页注明指导小组成员名单,并且为 了保持论文电子版的完整性,最好还是做一个简单的论文首页(标题页)。

没有必要用\title, \author和\maketitle等命令自动生成论文的标题,因为那可 能不太符合你的要求。只要用

\begin{titlepage}
标题页内容
\end{titlepage}

在标题页内容中用上一些center环境、\vspace*和字体选择命令就可以很容易地 设计出自己想要的格式了。

注意,上述标题页是没有页码的。而一般正文之前的部分,包括目录、摘要等, 习惯上采用与正文部分不同的页码格式,如用罗马数字表示,而从正文第一页开 始用阿拉伯数字重新开始计算页码。要做到这一点,只要在标题页后加上

\frontmatter 或 \pagenumbering{roman}

并在正文第一章前加上

\mainmatter 或 \pagenumbering{arabic}

就可以了。但是推荐使用\frontmatter和\mainmatter, 因为这两个命令的用处不 仅限于此。前面说过,像中文摘要这种非正文的部分,可以用\chapter*命令加 入,但当设置了页眉后就会发现一个问题,页眉中的\chaptertitle没有同步更新。 要解决这个问题,一个办法是在\chapter*命令后加上一句\chaptermark, 例如

\chapter*{摘\quad 要}\chaptermark{摘\quad 要}

但假如我们使用了\frontmatter, \mainmatter以及与其配套的\backmatter, 就 不需要这么麻烦,只要直接用不带星号版本的\chapter命令就可以了,对于 \frontmatter与\mainmatter之间的部分,以及\backmatter之后的部分,系统就 会自动地跟正文部分的章区别开来,不加上"第一章"这样的章标题头。一个典型 的文档结构示例如下

\begin{document}

\begin{titlepage}
标题页内容
\end{titlepage}

\frontmatter % 开始正文之前的部分
\tableofcontents % 自动生成目录

\chapter[中文摘要]{摘\quad 要}
% 方括号中是在目录中显示的内容,相当于前面使用的\addcontentsline
中文摘要内容

\chapter[英文摘要]{Abstract}
英文摘要内容

\mainmatter % 开始正文部分
\chapter{第一章标题}
第一章内容

\backmatter % 开始正文之后的部分
\begin{thebibliography}{99}\addcontentsline{toc}{chapter}{参考文献}
参考文献内容
\end{thebibliography}

\chapter[致谢]{致\quad 谢}
致谢内容

\end{document}

到这里文本排版讲得差不多了。这一节再讲讲定理和证明环境的格式设置。

数学论文里经常使用大量的定理环境。LaTeX默认的定理环境已经不能满足要 求,amsthm 宏包提供了方便的命令用于设置定理环境的格式。例如下面的命令定 义了一个定理样式mythm, 并用它来定义一些常用的定理环境

\newtheoremstyle{mythm}{1.5ex plus 1ex minus .2ex}{1.5ex plus 1ex minus .2ex}
{\kai}{\parindent}{\song\bfseries}{}{1em}{}
\theoremstyle{mythm}
\newtheorem{thm}{定理~}
\newtheorem{lem}{引理~}
\newtheorem{prop}{命题~}
\newtheorem{cor}{推论~}
\newtheorem{defn}{定义~}
\newtheorem{conj}{猜想~}
\newtheorem{exmp}{例~}
\newtheorem{rem}{注~}

我们解释一下\newtheoremstyle命令里各项参数的意义。样式名称之后的两个长 度分别表示定理与上、下文之间的距离,这里均设为弹性距离。\kai是设置定理 内容的字体。\parindent是设置定理首行的缩进,在前面使用了\CJKindent的情 况下,它就等于2em。

紧随其后的\song\bfseries是设置定理头部即类似"定理 1"部分的格式,一般中 文使用黑体。因为我们在前面已经将宋体对应的粗体定义为黑体,所以这里将中 文字体设为宋体,再用选择粗体命令\bfseries, 就同时把中文变为黑体,英文变 为粗体了。注意,如果前面没有修改字体定义文件,而在这里用\hei改变字体, 再加上\bfseries就很可能会造成"黑上加黑"即黑体的加粗,这种拙劣的文本效果 是不应该出现的。

这之后的参数是设置紧跟定理头部的符号,英文中常设为一句点,而中文习惯不 加任何符号,所以这里空置。然后是设置定理头部与定理内容之间的空白距离, 这里设为1em, 即一个汉字的宽度。

最后一项是对定理头部的补充说明,这里空置。但如果我们希望得到类似"定理 1 (存在性定理)"这样的定理头部,那么可以再定义一种定理样式

\newtheoremstyle{specthm}{1.5ex plus 1ex minus .2ex}{1.5ex plus 1ex minus 
.2ex}{\kai}{\parindent}{\song\bfseries}{}{1em}{\thmnote{#3}}

这里最后一项\thmnote{#3}表示用方括号中的附加内容作为定理头部。用此样式 定义一个新的定理环境(与前面定义过的thm环境统一编号)

\theoremstyle{specthm}
\newtheorem{sthm}[thm]{}

并在正文中使用

\begin{sthm}[定理~\thethm~(存在性定理)]
定理内容
\end{sthm}

就得到了想要的效果。

至于证明的排版,amsthm宏包提供了proof环境,但格式需要做一点调整。 amsthm.sty中对proof环境的定义如下

\newenvironment{proof}[1][\proofname]{\par
\pushQED{\qed}%
\normalfont \topsep6\p@\@plus6\p@\relax
\trivlist
\item[\hskip\labelsep
\itshape
#1\@addpunct{.}]\ignorespaces
}{%
\popQED\endtrivlist\@endpefalse
}

为了符合一般中文证明环境的排版习惯,可以重新定义proof环境为(注意,因为 这些命令含有@字符,所以需要在前、后分别加上\makeatletter和 \makeatother)

\makeatletter
\renewenvironment{proof}[1][\proofname]{\par
\pushQED{\qed}%
\normalfont \topsep6\p@\@plus6\p@ \labelsep1em\relax
\trivlist
\item[\hskip\labelsep\indent
\bfseries #1]\ignorespaces
}{%
\popQED\endtrivlist\@endpefalse
}
\makeatother

并且重新定义\proofname为

\renewcommand{\proofname}{证明}

proof环境会自动在证明最后一行的最右边加上一个证明结束符,默认为空心方 块,可以重新定义\qedsymbol来修改它。需要注意的是,当证明以一个独立公式 结束时,证明结束符会出现在下一行的最右边,而不是在公式的同一行上,这不 合乎习惯。这时只要在公式环境内加上\qedhere即可。

最后还要讲讲浮动图形和表格环境的中文化。首先把Figure和Table改为中文

\renewcommand{\figurename}{图}
\renewcommand{\tablename}{表}

然后需要对浮动环境的标题格式做一点修改。在book.cls中可以找到如下定义

\long\def\@makecaption#1#2{%
\vskip\abovecaptionskip
\sbox\@tempboxa{#1: #2}%
\ifdim \wd\@tempboxa >\hsize
#1: #2\par
\else
\global \@minipagefalse
\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
\fi
\vskip\belowcaptionskip}

这段代码包括了一个判断选择结构,如果标题超过一行则直接显示,否则在一行 内居中显示。可以不理会这个,只要根据自己的格式要求修改#1(即\figurename 或\tablename) 和#2(标题内容)的格式,以及#1与#2之间的分隔符。例如,如果 希望把#1改为黑体,并把分隔符改为一个空格,可以这样设置

\makeatletter
\long\def\@makecaption#1#2{%
\vskip\abovecaptionskip
\sbox\@tempboxa{{\bfseries #1}\quad #2}%
\ifdim \wd\@tempboxa >\hsize
{\bfseries #1}\quad #2\par
\else
\global \@minipagefalse
\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
\fi
\vskip\belowcaptionskip}
\makeatother

★★★结束语★★★

到这里,每个人都需要知道的东西已经基本上介绍完了。如果你仔细读了这些文 字,并且按照它去设置了你的论文格式,我想应该差不多了。当然,不同学科的 论文有各自的特点和要求,肯定还有很多具体的问题没有涉及。例如计算机专业 的可能经常要用到代码抄录环境,文科的论文可能要使用章末注,等等。这些问 题也是版上经常问到的,在本版精华区中大都能找到解答,这里就不再赘述。

希望费了不少时间写的这些东西能对大家有所帮助。最后,祝大家TeX越用越熟 练,都能写出漂亮的论文!

Opensuse下latex配置中文环境步骤及注意事项

2009年3月29日星期日

0 评论  

第一步,安装latex,可以选择很多版本。
如文中所说的,texlive。

当然其它还有很多,没有试用过......

来自王越主页(安装texlive完整版):
http://mailboxpublic.googlepages.com/texlive2007cjkchinesehowto

方法一. Install TeXLive
_________________
First, install TeXLive.

wget ftp://ftp.tsinghua.edu.cn/mirror/CTAN/systems/texlive/Images/texlive2007-live-20070212.iso.zip
unzip texlive2007-live-20070212.iso.zip
mount -o loop texlive2007-live-20070212.iso /mnt
cd /mnt
sudo ./install-tl
press I to install.

Setup System Path
_________________
Set the path. Take debian GNU/Linux as example, modify your /etc/environment like this and make a reboot:

PATH="/usr/local/texlive/2007/bin/i386-linux:/usr/local/matlab/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games"


方法二 打开终端,执行下述命令安装TexLive和常用的一些Latex宏包(可以根据自己的需要增改):

sudo apt-get install texlive texlive-math-extra texlive-latex-base texlive-latex-extra texlive-latex-recommended texlive-pictures texlive-science texlive-bibtex-extra texlive-common latex-beamer

如果硬盘充裕的话,直接完整安装也可以:

sudo apt-get install texlive-full latex-beamer

安装完后,就可以安装CJK的相关软件包了,如果只需要获得中文支持,那么执行:

sudo apt-get install latex-cjk-chinese ttf-arphic-* hbf-*

否则,建议安装latex-cjk-all以获取完整支持。



Copy The Files Needed
_________________
make a dir called font, copy the font here.
mkdir ~/font
cd ~/font
cp /media/sda/windows/Fonts/simhei.ttf .

copy all the files needed.
sudo apt-get install fontforge
cp /usr/local/texlive/2007/texmf-dist/source/latex/CJK/utils/subfonts/* ~/font/
cp /usr/local/texlive/2007/texmf/fonts/sfd/*.sfd ~/font/


步骤二 。生成字体(可选,或者进行步骤三)

方法一 Generate Font
______________
Then, make the font. It is a good way to test how fast your computer is :) it takes me 3 minutes to generate the fonts[Core Duo 2].
Some one complain that the procedure take them 1 hours to do so, this is because you use the new version of fontforge. so be sure to use fontforge 2005.

time fontforge -script subfonts.pe simhei.ttf hei Unicode.sfd

create a file name makemap like this:

for i in *.tfm
do
cat >> hei.map <<>

Make map file:
chmod +x makemap
./makemap

create a file name c70hei.fd for CJK package:

% This is c70hei.fd for CJK package.
% created by Edward G.J. Lee
% modify by Yue Wang
\ProvidesFile{c70hei.fd}
\DeclareFontFamily{C70}{hei}{\hyphenchar \font\m@ne}
\DeclareFontShape{C70}{hei}{m}{n}{<-> CJK * hei}{}
\DeclareFontShape{C70}{hei}{bx}{n}{<-> CJKb * hei}{\CJKbold}
\endinput


Copy Fonts into TEXMF
_________________
create the local directory to save the font
cd ~/.texlive2007
cd texmf-var
mkdir -p fonts/map/dvips/CJK
mkdir -p fonts/tfm/CJK/hei
mkdir -p fonts/type1/CJK/hei
mkdir -p tex/latex/CJK/UTF8
cp ~/font/hei.map fonts/map/dvips/CJK/
cp ~/font/*.tfm fonts/tfm/CJK/hei
cp ~/font/*.pfb fonts/type1/CJK/hei
cp ~/font/c70hei.fd tex/latex/CJK/UTF8


Update The System and Test
_____________________
Just run:
texhash
updmap --enable Map hei.map


create a test file to test your work.

\documentclass{article}
\usepackage{CJKutf8}
\begin{document}
\begin{CJK}{UTF8}{hei}
你好!
\end{CJK}
\end{document}


latex test.tex
xdvi test.dvi
dvipdfm test.dvi
xpdf test.pdf
pdflatex test.pdf
......


http://linuxdesktop.cn/2008/02/26/config-texlive-cjk-under-ubuntu.html
简易安装


方法二、生成中文字体包

安装好TexLive+CJK以后,还需要安装一个软件──fontforge用于生成字体:

sudo apt-get install fontforge

好了,前面所做的,都是标准的Debian式安装,假如哪天你不需要了,直接remove安装即可。

生成字体前,请自己准备你需要生成的字体文件:simsun.ttc,simhei.ttf等,这里以simsun.ttc(宋体)为例。

准备好后下载下面这个包,解压到一个地方,如自己的主目录~/font:

font.tar.bz2

然后把simsun.ttc也复制到~/font里去,执行下面的命令生成字体地图:

cd ~/font
time fontforge -script subfonts.pe simsun.ttc song Unicode.sfd

加time是为了计算时间,因为比较耗时,在我的Core 2 Duo T5500下,生成song花了40分钟,生成hei花了24分钟,仅供参考。

字体生成好了,再建立一个描述文件吧。

在~/font下,建立一个makemap文件,内容如下:

for i in *.tfm
do
cat >> song.map <<>

然后在终端下执行:chmod +x makemap让文件加上执行权限,最后执行:

./makemap

再建立一个一个c70song.fd文件:

% This is c70song.fd for CJK package.
% created by Edward G.J. Lee
% modify by Yue Wang
\ProvidesFile{c70song.fd}
\DeclareFontFamily{C70}{song}{\hyphenchar \font\m@ne}
\DeclareFontShape{C70}{song}{m}{n}{<-> CJK * song}{}
\DeclareFontShape{C70}{song}{bx}{n}{<-> CJKb * song}{\CJKbold}
\endinput

好的,相关文件都已生成,开始复制字体使其生效。

执行下面的命令,在你的主目录下生成隐藏的个人Tex配置,如果你哪天不需要了,也可以删除:

mkdir -p ~/.texmf-var/fonts/map/dvips/CJK
mkdir -p ~/.texmf-var/fonts/tfm/CJK/song
mkdir -p ~/.texmf-var/fonts/type1/CJK/song
mkdir -p ~/.texmf-var/tex/latex/CJK/UTF8

建立完这层层叠叠的目录以后,就把刚刚生成的字体复制进去吧。

cp ~/font/song.map ~/.texmf-var/fonts/map/dvips/CJK
cp ~/font/*.tfm ~/.texmf-var/fonts/tfm/CJK/song
cp ~/font/*.pfb ~/.texmf-var/fonts/type1/CJK/song
cp ~/font/c70song.fd ~/.texmf-var/tex/latex/CJK/UTF8

复制完后就执行命令刷新缓存,让它生效:

sudo texhash
updmap --enable Map song.map

假如一切顺序的话, 就测试一下我们安装的song体是否能用吧。

在任意位置编辑这个文件,然后保存为test.tex,支持UTF-8格式:

\documentclass{article}
\usepackage{CJKutf8}
\begin{document}
\begin{CJK}{UTF8}{song}
你好!这里是Ubuntu下的TexLive+CJK环境!
\end{CJK}
\end{document}

执行分别生成pdf文档和用evince来查看文档:

pdflatex test.tex
evince test.pdf

看看你的过程顺不顺利,生成的PDF档也是下面这样吗?


用同样的方法搞定hei和kai等常用中文标准字体,开始享受你的Tex吧!

但是我在OpenSuse 11下此二方法均不可行。

看到解决方法一:

cp ~/font/song.map ~/.texmf-var/fonts/map/dvips/CJK
cp ~/font/*.tfm ~/.texmf-var/fonts/tfm/CJK/song
cp ~/font/*.pfb ~/.texmf-var/fonts/type1/CJK/song
cp ~/font/c70song.fd ~/.texmf-var/tex/latex/CJK/UTF8

改成:
su
cp ~/font/song.map /usr/share/texmf/fonts/map/dvips/CJK
cp ~/font/*.tfm /usr/share/texmf/fonts/tfm/CJK/song
cp ~/font/*.pfb /usr/share/texmf/fonts/type1/CJK/song
cp ~/font/c70song.fd /usr/share/texmf/tex/latex/CJK/UTF8


updmap –enable Map song.map

改成
sudo updmap –enable Map song.map


如果仍然不能出现中文,可以这么做,不保证好,只保证可以用!!


cp ~/font/song.map ~/.texmf-var/fonts/map/dvips/CJK
cp ~/font/*.tfm ~/.texmf-var/fonts/tfm/CJK/song
cp ~/font/*.pfb ~/.texmf-var/fonts/type1/CJK/song
cp ~/font/c70song.fd ~/.texmf-var/tex/latex/CJK/UTF8

and

cp ~/font/song.map /usr/share/texmf/fonts/map/dvips/CJK
cp ~/font/*.tfm /usr/share/texmf/fonts/tfm/CJK/song
cp ~/font/*.pfb /usr/share/texmf/fonts/type1/CJK/song
cp ~/font/c70song.fd /usr/share/texmf/tex/latex/CJK/UTF8

同时存在,应该就可以了。

步骤三:安装中文字体
这个东西我在网上翻腾了好久,终于在 http://bj.soulinfo.com/~hugang/tex/找到了 YueWang-zhfonts-final_1.01.tar.bz2 ,下载放到/home/yourname/目录下

$mv ~/.texlive2007 ~/.texlive2007.bak
$ tar jxvf ~/YueWang-zhfonts-final_1.01.tar.bz2
$ texhash

Emacs中文化指南

0 评论  

地址:http://zhdotemacs.sourceforge.net/emacs/x188.html


3.2 中文设置

3.2.1 通用配置

这一部分是所有系统都要设置的

(set-language-environment 'Chinese-GB)
(set-keyboard-coding-system 'euc-cn)
(set-clipboard-coding-system 'euc-cn)
(set-terminal-coding-system 'euc-cn)
(set-buffer-file-coding-system 'euc-cn)
(set-selection-coding-system 'euc-cn)
(modify-coding-system-alist 'process "*" 'euc-cn)
(setq default-process-coding-system
'(euc-cn . euc-cn))
(setq-default pathname-coding-system 'euc-cn)

3.2.2 Windows配置

这一部分设置Windows下的字体, 解压intlfonts-1.2, 设置变量 fonts-dir为所安装的字体目录

(setq fonts-dir "<path to intlfonts>")
(setq bdf-directory-list
(list
(expand-file-name "Asian" fonts-dir)
(expand-file-name "Chinese" fonts-dir)
(expand-file-name "Chinese.BIG" fonts-dir)
(expand-file-name "Chinese.X" fonts-dir)
(expand-file-name "Ethiopic" fonts-dir)
(expand-file-name "European" fonts-dir)
(expand-file-name "European.BIG" fonts-dir)
(expand-file-name "Japanese" fonts-dir)
(expand-file-name "Japanese.BIG" fonts-dir)
(expand-file-name "Japanese.X" fonts-dir)
(expand-file-name "Korean.X" fonts-dir)
(expand-file-name "Misc" fonts-dir)
(expand-file-name "TrueType" fonts-dir)
(expand-file-name "Type1" fonts-dir)))
(setq w32-bdf-filename-alist
(w32-find-bdf-fonts bdf-directory-list))
(create-fontset-from-fontset-spec
"-*-fixed-medium-r-normal-*-16-*-*-*-c-*-fontset-bdf,
chinese-gb2312:-*-*-medium-r-normal-*-16-*-*-*-*-*-gb2312.1980-*,
japanese-jisx0208:-*-*-medium-r-normal-*-16-*-*-*-c-*-jisx0208.1983-*,
katakana-jisx0201:-*-*-medium-r-normal-*-16-*-*-*-c-*-jisx0201*-*,
latin-jisx0201:-*-*-medium-r-normal-*-16-*-*-*-c-*-jisx0201*-*,
japanese-jisx0208-1978:-*-*-medium-r-normal-*-16-*-*-*-c-*-jisx0208.1978-*,
thai-tis620:-misc-fixed-medium-r-normal--16-160-72-72-m-80-tis620.2529-1,
lao:-misc-fixed-medium-r-normal--16-160-72-72-m-80-MuleLao-1,
tibetan-1-column:-TibMdXA-fixed-medium-r-normal--16-160-72-72-m-80-MuleTibetan-1,
ethiopic:-Admas-Ethiomx16f-Medium-R-Normal--16-150-100-100-M-160-Ethiopic-Unicode,
tibetan:-TibMdXA-fixed-medium-r-normal--16-160-72-72-m-160-MuleTibetan-0")
(setq font-encoding-alist
(append '(("MuleTibetan-0" (tibetan . 0))
("GB2312" (chinese-gb2312 . 0))
("JISX0208" (japanese-jisx0208 . 0))
("JISX0212" (japanese-jisx0212 . 0))
("VISCII" (vietnamese-viscii-lower . 0))
("KSC5601" (korean-ksc5601 . 0))
("MuleArabic-0" (arabic-digit . 0))
("MuleArabic-1" (arabic-1-column . 0))
("MuleArabic-2" (arabic-2-column . 0))) font-encoding-alist))
(set-default-font "fontset-bdf")

注意: 上面的中文字体的大小只能为16,24,40,48, 因为intlfonts 中的BDF字体只有这几种大小的中文字体能匹配上面的chinese-gb2312的配置, 此外在Emacs 21.3中还可以这样设置

(set-language-environment 'Chinese-GB)
(set-default-font "-outline-新宋体-normal-r-normal-normal-12-*-96-96-c-*-gb2312")

假如你不知道系统的字体就M-x set-default-font, 然后使用TAB 键来看一下补全的字体信息

3.2.3 X Window设置

X的中文设置我就不说了, 自己搞定吧, 我拷贝了Windows的simsun.ttc 和mingliu.ttc来使用, 看简繁体中文不成问题了, 设置好X的字体后, 通过配置X Resources, 来设置emacs的字体, 通常就是配置$HOME/.Xdefaults, 1024x768的分辨率下可以设置字体为8x16, 800x600可以设置7x14的字体就可以达到字体等宽的效果

emacs.font:  8x16
emacs.paneFont: 8x16
Emacs.pane.menubar.font: 8x16
Emacs.foreground: white
Emacs.background: black
emacs.geometry: 100x32

在Windows下使用Emacs

0 评论  

top在Windows下使用Emacs

top安装Emacs

  1. http://nqmacs.sourceforge.net 下载emacs的Windows编译版本,包括两个文件 emacs-21.3.50.1-20050130c-w32.zipemacs-21.3.50.1-20050130-lisp.zip
  2. emacs-21.3.50.1-20050130c-w32.zip 解压缩到想要放置的目录,这里为 D:\Program Reserved\emacs-21.3.50.1-20050130c-w32
  3. emacs-21.3.50.1-20050130-lisp.zip 也解压缩在这个目录,然后设置环境变量
    HOME=D:\Program Reserved\emacs-21.3.50.1-20050130c-w32
    这样在以后 .emacs.d 目录和 .emacs 文件就都在 $HOME 目录下面了,但是这个方法并不好,因为设置 $HOME 会影响 CygwinMSYS 等很多东西,所以 最好的方法是在注册表中设置 HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs\HOME=%emacs_dir%
  4. 需要自己添加的el文件放在 D:\Program Reserved\emacs-21.3.50.1-20050130c-w32\site-lisp 里面即可

top安装auctex

  1. http://www.gnu.org/software/auctex/ 下载auctex,然后解压到任意目录,不过不要解压到 $HOME 目录下面,这里解压缩到 D:\auctex
  2. 然后可以根据 INSTALL.windows 这个文件进行安装,用cygwin安装的步骤如下:
    $cd d: (或者$cd /cygdrive/d)
    $cd auctex
    $./configure --prefix=d:/"Program Reserved"/emacs-21.3.50.1-20050130c-w32
    --with-emacs=d:/"Program Reserved"/emacs-21.3.50.1-20050130c-w32/bin/emacs.exe
    $make
    $make install
    (注意上面对于有空格的目录要加双引号,同时用/而不是\,用d:而不是/cygdrive/d)
    这样,可以在 $HOME\site-lisp 目录下面看到生成了 auctex 目录,同时在 $HOME 目录下面也生成了一个 var 目录
  3. $HOME\.emacs 文件中添加
    (require 'tex-mik)
    (setq TeX-electric-escape t)
    这样就可以正常使用auctex了

top安装mule-gbk

安装mule-gbk后可以显示更多的汉字,比如朱�基的"�",如果不用mule-gbk是无法正确显示的
  1. http://mule-gbk.sourceforge.net/ 下载mule-gbk,然后解压到任意目录,不过不要解压到 $HOME 目录下面,这里解压缩到 D:\mule-gbk-0.1.2004080701 ,然后仿照auctex的安装方法即可,用cygwin安装的步骤如下:
    $cd d: (或者$cd /cygdrive/d)
    $cd mule-gbk-0.1.2004080701
    $./configure
    $make
    $make lispdir=d:/"Program\ Reserved"/emacs-21.3.50.1-20050130c-w32/site-lisp install
    (注意上面和auctex不同,有空格的目录名空格前要加入一个\)
    最后一条命令中, lispdir 指定的是el文件安装的目录
  2. 现在在 .emacs 中加入
    (setq w32-charset-info-alist
    (cons '("gbk" w32-charset-gb2312 . 936) w32-charset-info-alist))
    (set-w32-system-coding-system 'chinese-gbk)
    (set-selection-coding-system 'chinese-gbk)
    (set-keyboard-coding-system 'chinese-gbk)
    (set-language-environment 'chinese-gbk)
    (setq locale-coding-system 'chinese-gbk)
    (setq current-language-environment "Chinese-GBK")
    呵呵,中文问题解决了

top安装aspell

  1. http://aspell.net/win32/ 下载Windows下的aspell安装程序和词典,这里下载的是 Aspell-0-50-3-3-Setup.exeAspell-en-0.50-2-3.exe
  2. 安装即可,这里安装到 D:\Program Reserved\Aspell
  3. 设置环境变量,将 D:\Program Reserved\Aspell\bin 加入到 $Path
  4. http://kdstevens.com/~stevens/ispell-page.html 下载最新的 ispell.el ,这里下载的是 ispell.el-3.6 ,将其改名为 ispell.el 放到 $HOME\site-lisp 目录下
  5. .emacs 中加入
    (setq-default ispell-program-name "aspell")
    (setq-default ispell-local-dictionary "american")
    (global-set-key (kbd "") 'ispell-complete-word)
    这样就可以使用拼写检查功能了,但是绑定到F8上的complete-word命令还是无法使用,这个需要解决

top安装Mew

  1. http://www.mew.org/Win32/ 下载Mew的Windows版本这里下载的是Mew 4.2,文件为 MEW42W0.ZIP
  2. MEW42W0.ZIP 解压,这里解压到 E:\Download\Temp\MEW42W0\mew-4.2
  3. 安装前需要设置好两个环境变量:一个是 $HOME 变量,当然这在安装emacs的时候已经设置好了,另一个是 $TZ 变量,这个是时区,设置为 JST-8
  4. 注意emacs在Windows下需要执行 $HOME\bin\addpm.exe 来进行一下安装,否则Mew会认为没有安装emacs,然后在cygwin下进行编译:
    $cd e:
    $cd Download/Temp/MEW42W0/mew-4.2/
    $./configure
    $make
  5. 在命令行下执行
    >mew
    然后就根据提示来安装吧
  6. 注意我安装完成之后发现mew所用的图片都没有安装,将解压出来的mew-4.2目下的 etc 目录复制到 D:\Program Reserved\emacs-21.3.50.1-20050130c-w32\site-lisp\mew\ 就可以了
  7. 注意mew中的邮件默认是utf-8编码的,所以需要在mule-gbk的环境下使用utf-8支持,具体看一下 mule-gbk-0.1.2004080701.tar.gz 中的 README.unicode ,具体方法为在在 .emacs 文件中添加
    ;; Unicode support, for Emacs CVS (21.3.50) only
    (when (fboundp 'utf-translate-cjk-mode)
    ;; Load modified utf-translate-cjk-mode
    (require 'gbk-utf-mode)
    ;; Turn on utf-translate-cjk-mode
    (utf-translate-cjk-mode 1)
    ;; Setup X selection for unicode encoding
    (setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING)))
    这样,就可以存取中文Unicode编码的文件了,具体使用方法是:
    C-x RET f utf-8 RET将当前缓冲区的编码改为utf-8然后保存
    C-x RET c utf-8 RET C-x C-s filename RET在保存时转换文件格式
    C-x RET r utf-8 RET用这个命令重新以utf-8编码加载文件
  8. mew的设置和使用请看这里

    top用gnuserv给Emacs插上翅膀

      通常情况下,用Emacs编辑文件需要先启动Emacs,然后C-x C-f,再输入文件的路径,这是很麻烦的, 尤其对于用惯了图形界面的人更是不便,这个问题可以用gnuserv解决,这里是Windows下编译好 的gnuserv。
      gnuserv的安装非常简单,将上面压缩包中的 gnuserv.el 放到 $HOME/site-lisp 目录下,再把release文件夹下的几个 可执行文件放到 $HOME/bin 目录下,然后在.emacs中加入:
    (require 'gnuserv)
    (gnuserv-start)

这样就可以用 gnuclientw.exe 打开文件了,再建立一个 gnuclientw.exe 的快捷方式放到"Documents and Settings\username\SendTo"目录下, 就可以用右键的"发送到"菜单把文件传输到Emacs中编辑了。
   gnuclientw.exe 默认是用一个新的frame打开文件,在.emacs中添加下面的命令可以设置在原来的frame中打开文件:

;; 在当前frame打开
(setq gnuserv-frame (selected-frame))
;; 打开后让emacs跳到前面来
(setenv "GNUSERV_SHOW_EMACS" "1")

  如果你喜欢在新的frame中打开文件,绑定下面几个控制frame的函数,操作frame会简单一些:

;; 关闭一个frame,绑定到 C-F4
(global-set-key [(control f4)] 'delete-frame)
;; 在两个frame中切换
(global-set-key [(control tab)] 'other-frame)
(global-set-key [(control shift tab)] '(lambda ()
(interactive)
(other-frame -1)))

软件开发者面试百问

2009年3月11日星期三

0 评论  


觉得这个帖子不错,但是竟然找不到类似与收藏的功能,为了回头还能看,只好贴到自己博客了。

地址:http://vipnews.csdn.net/newscontent.aspx?pointid=2009_02_12_140215399

软件开发者面试百问

 

  想雇到搞软件开发的聪明人可不容易。万一一不小心,就会搞到一堆低能大狒狒。我去年就碰到这种事了。你肯定不想这样吧。听我的,没错。在树上开站立会议门都没有。

    问点有难度的问题能帮你把聪明人跟狒狒们分开。我决定把我自己整理出来的软件开发者面试百问发出来,希望能帮到你们的忙。

    这个列表涵盖了软件工程知识体系中定义的大多数知识域。当然,如果你只想找出类拔萃的程序员,便只需涉及结构、算法、数据结构、测试这几个话题。如果想雇架构师,也可以只考虑需求、功能设计、技术设计这些地方。

    不过不管你怎么做,都要牢记一点:这里大多数问题的答案都没有对错之分!

    你可以把我的这些问题作为引子,展开讨论。例如下面有个问题是使用静态方法或是单例的缘由。如果那个面试的就此展开长篇大论,那他很有可能是个聪明能干的 家伙!如果他一脸茫然的看着你,发出这种声音,很明显这就是只狒狒了。同样,想知道一个数是不是2的乘方也有很多方法,不过要是面试的人想用mod运算 符,嗯……你知道我的意思吧。(你不知道也没关系,来根香蕉?)

需求

    你能给出一些非功能性(或者质量)需求的例子么?

    如果客户需要高性能、使用极其方便而又高度安全,你会给他什么建议?

    你能给出一些用来描述需求的不同技术么?它们各自适用于什么场景?

    需求跟踪是什么意思?什么是向前追溯,什么是向后追溯?

    你喜欢用什么工具跟踪需求?

    你怎么看待需求变化?它是好是坏?给出你的理由。

    你怎样研究需求,发现需求?有哪些资源可以用到?

    你怎么给需求制定优先级?有哪些技术?

    在需求过程中,用户、客户、开发人员各自的职责是什么?

    你怎么对待不完整或是令人费解的需求?

功能设计

    在功能设计中有哪些隐喻?给出几个成功的例子。

    如果有些功能的执行时间很长,怎么能让用户感觉不到太长的等待?

    如果用户必须要在一个很小的区域内,从一个常常的列表中选择多个条目,你会用什么控件?

    有哪些方法可以保证数据项的完整?

    建立系统原型有哪些技术?

    应用程序怎样建立对用户行为的预期?给出一些例子。

    如何入手设计一组数量庞大而又复杂的特性,你能举出一些设计思路吗?

    有一个列表,其中有10个元素,每个元素都有20个字段可以编辑,你怎样设计这种情况?如果是1000个元素,每个元素有3个字段呢?

    用不同的颜色对一段文本中的文字标记高亮,这种做法有什么问题?

    Web环境和Windows环境各有些什么限制?

技术设计

    什么是低耦合和高聚合?封装原则又是什么意思?

    在Web应用中,你怎样避免几个人编辑同一段数据所造成的冲突?

    你知道设计模式吗?你用过哪些设计模式?在什么场合下用的?

    是否了解什么是无状态的业务层?长事务如何与之相适应?

    在搭建一个架构,或是技术设计时,你用过几种图?

    在N层架构中都有哪些层?它们各自的职责是什么?

    有哪些方法可以确保架构中数据的正确和健壮?

    面向对象设计和面向组件设计有哪些不同之处?

    怎样在数据库中对用户授权、用户配置、权限管理这几项功能建模?

    怎样按照等级制度给动物王国(包括各种物种和各自的行为)建模?

程序设计

    你怎样保证你的代码可以处理各种错误事件?

    解释一下什么是测试驱动开发,举出极限编程中的一些原则。

    看别人代码的时候,你最关心什么地方?

    什么时候使用抽象类,什么时候使用接口?

    除了IDE以外,你还喜欢哪些必不可少的工具?

    你怎么保证代码执行速度快,而又不出问题?

    什么时候用多态,什么时候用委派?

    什么时候使用带有静态成员的类,什么时候使用单例?

    你在代码里面怎么提前处理需求的变化?给一些例子。

    描述一下实现一段代码的过程,从需求到最终交付。

算法

    怎样知道一个数字是不是2的乘方?怎样判断一个数是不是奇数?

    怎样找出链表中间的元素?

    怎样改变10,000个静态HTML页面中所有电话号码的格式?

    举出一个你所用过的递归的例子。

    在散列表和排序后的列表中找一个元素,哪个查找速度最快?

    不管是书、杂志还是网络,你从中所学到的最后一点算法知识是什么?

    怎样把字符串反转?你能不用临时的字符串么?

    你愿意用什么类型的语言来编写复杂的算法?

    有一个数组,里面是从1到1,000,000的整数,其中有一个数字出现了两次,你怎么找出那个重复的数字?

    你知道“旅行商问题(Traveling Salesman Problem)”么?

数据结构

    怎样在内存中实现伦敦地铁的结构?

    怎样以最有效的方式在数据库中存储颜色值?

    队列和堆栈区别是什么?

    用堆或者栈存储数据的区别是什么?

    怎样在数据库中存储N维向量?

    你倾向于用哪种类型的语言编写复杂的数据结构?

    21的二进制值是什么?十六制值呢?

    不管是书、杂志还是网络,你从中所学到的最后一点数据结构的知识是什么?

    怎样在XML文档中存储足球比赛结果(包括队伍和比分)?

    有哪些文本格式可以保存Unicode字符?

测试

    什么是回归测试?怎样知道新引入的变化没有给现有的功能造成破坏?

    如果业务层和数据层之间有依赖关系,你该怎么写单元测试?

    你用哪些工具测试代码质量?

    在产品部署之后,你最常碰到的是什么类型的问题?

    什么是代码覆盖率?有多少种代码覆盖率?

    功能测试和探索性测试的区别是什么?你怎么对网站进行测试?

    测试套件、测试用例、测试计划,这三者之间的区别是什么?你怎么组织测试?

    要对电子商务网站做冒烟测试,你会做哪些类型的测试?

    客户在验收测试中会发现不满意的东西,怎样减少这种情况的发生?

    你去年在测试和质量保证方面学到了哪些东西?

维护

    你用哪些工具在维护阶段对产品进行监控?

    要想对一个正在产品环境中被使用的产品进行升级,该注意哪些重要事项?

    如果在一个庞大的文件中有错误,而代码又无法逐步跟踪,你怎么找出错误?

    你怎样保证代码中的变化不会影响产品的其他部分?

    你怎样为产品编写技术文档?

    你用过哪些方式保证软件产品容易维护?

    怎样在产品运行的环境中进行系统调试?

    什么是负载均衡?负载均衡的方式有哪些种?

    为什么在应用程序的生命周期中,软件维护费用所占的份额最高?

    再造工程(re-engineering)和逆向工程(reverse engineering)的区别是什么?

配置管理

    你知道配置管理中基线的含义么?怎样把项目中某个重要的时刻冻结?

    你一般会把哪些东西纳入版本控制?

    怎样可以保证团队中每个人都知道谁改变了哪些东西?

    Tag和Branch的区别是什么?在什么情况下该使用tag,什么时候用branch?

    怎样管理技术文档——如产品架构文档——的变化?

    你用什么工具管理项目中所有数字信息的状态?你最喜欢哪种工具?

    如果客户想要对一款已经发布的产品做出变动,你怎么处理?

    版本管理和发布管理有什么差异?

    对文本文件的变化和二进制文件的变化进行管理,这二者有什么不同?

    同时处理多个变更请求,或是同时进行增量开发和维护,这种事情你怎么看待?

项目管理

    范围、时间、成本,这三项中哪些是可以由客户控制的?

    谁该对项目中所要付出的一切做出估算?谁有权设置最后期限?

    减少交付的次数,或是减少每个每个交付中的工作量,你喜欢哪种做法?

    你喜欢用哪种图来跟踪项目进度?

    迭代和增量的区别在哪里?

    试着解释一下风险管理中用到的实践。风险该如何管理?

    你喜欢任务分解还是滚动式计划?

    你需要哪些东西帮助你判断项目是否符合时间要求,在预算范围内运作?

    DSDM、Prince2、Scrum,这三者之间有哪些区别?

    如果客户想要的东西太多,你在范围和时间上怎样跟他达成一致呢?