用latex的一些总结

用latex时间并不长,不过还是有些想吐槽;班门弄斧,可能就要贻笑大方了。

  • 别用latex写中文文档,尤其是含公式不是那么多的情况下。xelatex是latex中文解决方法中比较先进的方法,虽然有xeCJK等包,但是谈起美观来说并不见得咋地。tex本来就不是为非英语母语的人设计的,谁能指望中文中能有和ff中间的横连写相媲美的排版呢?书写文档的效率是一个极大的问题;而更令人发指的就是会有各种过时的package——比如我五月份定制的一个模板现在就没用了(而且是texlive2012和miktex都没有用!)所以现在考虑毕业论文不打算用latex写了(当然如果我不小心用上了luatex之类并感觉中文解决方案良好的话可以另当别论)。
  • pdflatex并不是写paper之类文档的首选,对bibtex支持之渣足以让人望而却步;paper之类的东西本身就不需要做得有hyperref这种玩意儿。
  • 作为一个既用Linux却又不得不用Windows的用户,装MikTeX或CTeX套件纯粹是找抽的;清一色的texlive才是王道(毕竟这是由TUG亲自维护的)。作为一个码农,用winedt写tex文件不得不说是下下之策;随便找个习惯的editor比如vim/emacs之类的都足了,习惯eclipse的话装个texlipse才是正经。为什么需要用这种渣一样还要注册的winedt呢?数落一下winedt的不是吧:
  1. 中文编码是永久的伤,乱码一坨一坨的;好些时候得改变编码才行。
  2. 添加的label更改后必须要刷新之后才能定位到正确的位置,而且对\subsection这样的环境来说如果不显式写出label都不会给个书签之类的东西——这让人如何定位啊!
  3. 语法高亮的功能就那么几种,而且还经常出错——比如lstlisting中出现$符号居然后面的文字的都变成了math mode的了。
  4. 假装有了定位起始终结符的功能,可是我发现好几次都把我的数学display环境的范围给搞错了。
  5. 有几个没多少实质的代码补全功能,比如输入\ begin{itemize}}后其实会把\end{itemize}也给补上且光标定位到这之间;但问题是如果有某个environment之后有参数(比如\begin{multicols}{2})这种功能就全失效了。倒不如texlipse中每次遇到环境时敲回车就补全end来得实在。
  6. 命令行控制台整个就是一个鸡肋,到现在为止我都不知道在windows下的tex editor为什么需要有这种玩意儿;把原有的控制台功能增强一点不就得了?
  7. 快捷键异常难用。比如我常用的块注释,竟然需要我同时按ctrl+shift+alt+$\rightarrow$才行;设计UI的人似乎从来没关心过我这种快捷键控的心态!
  • 要做成比较花哨的slides的话,beamer绝对不是首选;latex本来就不是设计出来用来放幻灯片的。如果只是因为有一块一块的公式而全用latex写slides的话大部分情况下是自讨苦吃,完全可以对把这些公式单独做成pdf或通用图片式然后插进来(话说这种插入的功能在纯latex编写中也是非常常见的)。对于slides产生的效果来说,beamer本身提供的并不让人满意,ConTeX非常灵活但是对我来说还是太麻烦了;impressive赫赫有名,liyanrui兄的cikala应该很不错(只看过demo但没用过)。但我仍觉得如果是企业里的那种slides的话用latex做实在没必要;学术上除非很formal的东西用latex也是个大坑。
  • 涉及到的矢量图如果要求不十分高的情况下用latexdraw之类工具或dot进行转换也可以解决大部分问题了。tikz可算是二维图比较简单的package了,但是用起来还是显得不方便。
  • 书写latex的时候,千万需要之前就思考好整体的排版样式;要不然在微调某些environment时会很伤。倒不是说不能,tex的灵活性那是没话说的,latex的高可定制性也比ms word这种非专业排版工具强很多。在编写数学公式时,最好的办法是先手写下来,要不一不小心就写岔了。
  • latex的cls/sty定制把内容和显示形式很好地分开了,而开放的格式又让它可以经由其他parser生成各种合适的pdf,dvi格式(或因此生成pdf/ps格式等等);非常符合现代设计思想。但问题是排版是一门细活,的确不是写作本身;所以用latex编写势必会影响行文的思路,尤其是对我这样的新手而言。精工出细活,对于我这种impatient的人来说,尽管仍然对其产生的优美的文档惊羡不已,但是还是感觉不适合;这种感觉就像我现在对C++的感受一样。
  • 诡异的是,我想到了一句话:“成功的花,人们只惊羡她现实的明艳;然而当初她的芽儿,浸透了奋斗的泪泉,洒遍了牺牲的血雨”。所以,我依然非常敬佩习惯了用tex写文档的。

NoTech Comments(49) Fri, 07 Sep 2012 00:40:27 +0800

一次不愉快的尝试及思考(5)

吐槽一下我对linux桌面应用的不满。

首先,各种桌面环境(或仅仅是窗口管理器)以及会话管理器风格迥异,完全没有一个统一的指挥棒。君不见就连Linux的文件系统结构都还有个FHS,而那个传说中的POSIX不也是考虑到异常混乱而搞出来的吗?各种发行版的包管理器(deb,rpm等)以及同样的包管理器出现的各种不同的package(比如debian的和ubuntu的对bash的打包方式)暂且不谈,看看单是gdm,kdm,lightdm,lxdm,slim,xdm和gnome,unity,kde,openbox,lxde,awesome,wmii,wm的组合就足以让人瞠目结舌了。而关键在于不同的会话管理器的功能不同导致不一定就能发挥桌面环境的功能,而不同的会话管理器的配置和使用的权限本身又非常不统一,这导致了想真正达到自由地定制在很多情况下意味着你需要很强的折腾劲才行,而这可能会无果而终。举个例子,ubuntu下的lxdm无法登陆xfce;slim下登陆时networkmanager会有权限问题;lightdm下退出可能回不到登陆界面。或许让每个用户最为头疼的是某过于当安装了某个桌面环境后会绑定其集成的工具,然而你却看到了另一个发行版的相似的工具也在;你当然会希望删去一些冗余的package,但是其依赖关系往往让你只有删除了整个环境后才可以。当然在硬盘空间如此廉价的情况下,这关键的问题并不在于删去碍眼的包,而在于挑选那些适合的包而让另外一些不可见;但是有这种机制的软件本身却是依赖于桌面环境的(比如gnome有个所谓的main menu的管理,如果将这个设置为每个发行版都必须有的那该多好啊)。那么,去除这些依赖的概念,而让每个软件都静态打包,能不能解决这种用混乱呢?众所周知,这同样不合理。要不还要那么多共享库干嘛呢?多个依赖于一个共享库的打包的程序还需要包这样的共享库都加载了这不是浪费吗?对于小型程序还好,吃资源很厉害的应用多了就扛不住了。况且,要达到一定的整体的体验,这种小件的组合打包方式是不合适的。

其次,选择太多。Python对perl的反叛莫过于一件事只用一种方法去做。而在开源的世界里,看到的是完全的反面。往往是一搜一大堆对某个问题的结果;一问一大堆可以解决问题的软件。比如说关于字符乱码问题,用vim和emacs完全可以解决,但是iconv是一般发行版都会自带的;面向Vimer当然用vim来解决最好了,Emacser亦然,都不用的iconv当然可以,同时还有数以万计的其他工具也可以完成。当然前面这个例子举得非常不好,因为这恰也可以作为其优势。但是一个不能忽视的问题是学会用一种工具是需要时间的,而真正掌握了一门工具的使用是会将写工具的理念也吸收进去的,正如书是传递思想的工具一样,工具也是。而多种理念的混杂导致先要从中选择一种方案,对面临一堆问题的且不想花很久来解决的人来说是不利,因为又引入了另一个问题。另一个例子是在处理乱码这种问题上,居然没有一个必然有效且简单明了的方案。这不禁让人想到了c语言作为这样一门优秀的语言其标准居然没有提供GUI库一样。

再有,由于要顾及多种平台写代码的苦逼作者们不得不花更多的心思来迎合各种环境,那这样的话势必就减少了更多的功能的实现。然而那些发行版为了不得罪开发者也只好将不够成熟的代码加进repo中。众所周知,现在的Linux桌面GUI软件大多都不够稳定。。。最后导致的是尽管有了这么多的应用,但是killer级别的却不是很多。而那些写应用的家伙大多则是基于自己的兴趣而不是以别人的需求为出发点的,这让开源的软件多了一些geek的风格之外也让人有了这些桌面的应用都是toy的感觉。

另外,或许由于Linux的基因问题。x window服务虽然有更多的灵活性;却需要更多的消息传递,这意味着更多的资源消耗(记得有个project正是着手解决这个问题)。而那些gtk,qt的开发库为了兼容性不得不作出牺牲,这导致了很多情况下只有靠硬件的牛逼和绚丽的效果才能和Windows下的应用媲美。

当然,上面的所有观点从反面讲或许正是Linux桌面的优势,这也未可知。

NoTech Comments(3) Thu, 14 Jun 2012 19:57:43 +0800

一次不愉快的尝试及思考(4)

在重装了各种package之后,遇到了一个不可小觑的小问题:系统时间不对。更准确的说是时区不对。网上有说法是通过date -s修改和clock -w写回CMOS的方法。但我用了之后却毫无反应,时钟依旧我行我素。后来听说可能是BIOS本身时间设置有误,于是还真的发现BIOS时间不对;但是雷人的是在修改之后时间仍然是不对的。再看看网上的说法是需要用ntpupdate通过服务器校准并写回BIOS,这样的方法开始还有效,但是重启之后,该怎样还是怎样。灰心之下,通过一个叫time-admin的GUI工具来校准,选择了shanghai的时区,但发现竟然可以在我修改数据之后它自动帮我改回去了,得,全白搭了。更为奇怪的是,当我不服输第二次重新进行同样的操作时系统提示我没有安装相应的ntp同步软件包。不得不说这中情况非常让我困惑:刚才ntpupdate都成功了,并且第一次用time-admin时没出现错误,怎么这次就出岔了呢?在费尽我的脑细胞之后终于查清原因,原来dotfiles真的是不可以瞎用的;sontek在他的.profile中直接写死了自己的TZ,然后我就屁颠屁颠地用过来了。偷懒真要命。

在找到time-admin的时候,实际上我是用tasksel安装了xubuntu的桌面环境了(一直想看看xfce这个被Linus看好的dw究竟什么鸟样)。现在才知道,总将xubuntu和lubuntu比较是极其不对的,甚至是有害的;这种不合情理的比较正像C和C++比较一样。两者根本就是两种理念;要说到渊源,至少在ubuntu系列下,xubuntu更像gnome 2时代的ubuntu。整个桌面环境更加统一,这种整体性的代价就是你再也很难自由的定制了。尽管看起来,你是得到了一个各个组件都更为独立的桌面环境,但是事实上你只能在它允许你的环境下进行为数不多的hack;如果想继续深入的话花费的代价将是指数级增加的(一个高耦合的脚本足以让人见不着北了)。比如那个看似人性话的mail reader可以让用户选择用什么邮件客户端;然而事实上可以使用的邮件客户端其实也就是thunderbird和evolution这两种主流的,用其他的GUI的可会断则会出现各种奇怪的错误信息;自然的,像mutt之类的邮件客户端是怎么着也没法用的 。另一方面,邮件客户端可能再也不是什么先进的玩意儿了,因为webmail是如此普及,而浏览器操作系统业已开始深入人心。一味地以客户端为中心,无异于让那些hacker大跌眼镜;即使对于我这种以浏览器和IDE为中心的用户也会对这种强奸人意的观念不以为然。或许有人会认为商务中用邮件客户端是不可避免的,但事实上一个如ubuntu这样不够稳定的发行版用作商务机是太具风险了。

高度的集成带来的好处是统一性,Unity给人的一致的感觉,完全对得起这名号;这中好处包括了安全性、可靠性和高质量。比如,在它这样的思路下,你很少会做出出格的事情来;你不错,就减少了case的种类,那么出错的可能性就降低了;而它也就可以把时间花在其他诸如界面优化的因素上了。然而你必须接受它的调教,说不的代价是昂贵的。

我个人还是希望有更多的定制性,可这却是不利于发行版的发展的。当众口极其难调时,出现的test case必然成指数级增长,这对所有的开发人员和测试人员无异于噩梦一场。所以现在出现的问题是,对于那些更加清爽的发行版,其支持比那种高集成的支持要少得多。比如说吧,现在的非开源新的应用大多有deb和rpm包,但是针对gentoo和arch的就少得多(更远一点,比如puppy的支持就更少了,尽管如其名它本身就是一个玩具)。真正能解决问题的是user=developer;然而这又会让更多人对开源望而却步。这是一个delimma。

为这次的失败的经历作个总结,以免下次再二了:磁盘这玩意儿少碰为好,实在没办法的话找些傻瓜式的软件搞搞就行。我不是做运维的,没有必要在这上面花时间,否则会很苦。如果被逼无奈下确实要处理磁盘的话,先想想最坏的可能。重要的东西先备份再说,千万别对这种事有太多的信心。平时就得养成备份的好习惯,做什么事留一手。跨平台的同步盘绝对是个好的东西。github,svn是备份配置文件的好工具。Linux的底层是个非常不好驯服的东西,配置是一个极其能装逼己但又不需要花很多就能学会的玩意儿;所以在这上面折腾对我不利。那些总是拿配置炫耀的人不是优秀的developer而最多算一个合格的user。所有的系统都很糙,你只可以在调教与被调教间做出折中。

NoTech Comments(7) Thu, 14 Jun 2012 19:57:23 +0800

一次不愉快的尝试及思考(3)

上回说到,被逼无奈之下我只好选择重装;可怜我那~下的文件全都付之成灰;人是物非,欲语泪先流。不禁感慨人生不过如此,赤条条来去无牵挂。然而,比那些文件好的是,还有些东西可以证明我的存在,比如如果这篇文章不小心被人看到之后还至少会有人想起这不是一个哪怕极具智能的机器人所能写出来的。顺便以此作为我对上次系统的缅怀之情,好作葬花吟。

在选择发行版的时候,又陷入了进退维谷之境。对于包管理,Ubuntu系列总算是我最熟悉不过的了,它的上流debian我应该也算熟悉;然而这两者U可用太媚俗来形容,d则过于正义;fedora也在算选之列,yum也已经比较完善。而arch和gentoo虽为至简而设计,但是其包管理机制却并不完善(此依旧是后话),而且仅仅依靠社区的支持显然是不够的——我的观点是一个成功的发行版的社区后面总有一个公司或基金会在支柱着,正如一个成功的男人后面总有一个贤惠的妻子一样(我想多了,orz)。辗转反侧之后,还是用了lubuntu的版本,原因只是它是所有有桌面环境的ubuntu家族的最清爽的一个;其实我更热性与fedora的lxde,因为它更加纯粹和好用。但是,由于我的立身处世导致了这样的选择。其实很多情况下,人作出的选择都是和冠冕堂皇的理由不同的,恰恰是有些非理性的因素在选择时占了优势,而在事后被询问为什么的时候却只用看似“理性”的理由来搪塞其选择的必然性。

Canonical这样一家弄潮公司的确在推动Linux桌面上功不可没,可惜Linux for human beings本身就决定了其必须迎合更多人的心态。然而尽管如此,那些鼓吹arch、gentoo的人贬损ubuntu却大可不必,因为论起安全性和易用性来说ubuntu的确更胜一筹,而一直被诟病的ubuntu稳定性也比arch和gentoo好些吧。再说,本是同根生,相煎何太急?不还都是一个定制的结果吗?个人觉得,ubuntu的确得为Linux哲学提供点insight。不得不说,公司对lubuntu的支持实在太少了,比如装个ibus都会出现图标不显示在panel的问题;而在xubuntu和ubuntu上居然不存在这种结果!这显然是某个库文件、图标或者脚本缺失或者粗制滥造的结果。不过这也难为那些测试人员了。在搜索空间如此广阔(explosion)之下找到bug最好的就是让用户成为最广大的同盟军了。

前面说到,我的最大的伤就是在于分布在家目录下的各种配置文件了。Linux还是有很大程度上遵循了Unix的遗留的设计理念,文件都是数据流。这样,所看到的配置文件很多都是文本文件。《Unix编程思想》中曾经说到,当Linux的提示“您选择的文件用该程序无法打开”时就是它背叛Unix的开始(大概就是这个意思吧)。反过来说,之前那些从Unix移植过来的工具都还是清一色的“Unixy”的。这导致的一个问题是很多工具都有各执己见,用自己的特有的文件配置格式,这种情况比比皆是。比如vim和emacs这被Linux黑客盛传是世界上为数不多的三种editor的两者,如果不花费各种精力配置的话其用途居然还不如一个简单的notpad用得舒坦。而不得不说,这两个利器的学习曲线是如此陡峭以致于只有真正牛逼的人和装逼的人才会说它们是法宝。配置文件以dot和rc而享誉Linux界;这和Windows的注册表并称双煞。在配置角度上它们没有注册表那样的统一格式,取而代之的是集市一般的自由洒脱——换句话说是散乱;由于没有一个“仁慈的独裁者”制定规则导致各行其道、百家争鸣。然而,它们伪善的可读性、系统独立性和系统对于配置文件的放置惯例让崇拜者们将这视为一大优势。试想,没多少人可以无聊到将注册表导出并放到github上吧?不过问题最大在于定制配置文件的过程之艰辛,我曾经花费了好多天来写bash、vim、conky等的配置文件,最后发现由于没有全局的统领导致整体的体验并不好。花费了这么多时间去做了一件可有可无的事(毕竟配置文件写得再好最多不过说明你是一个好的user而不是一个developer),而这些事件本可以用来做那些优先级更高的事(比如写写代码看看书之类),岂不更好?所以这次,我是选择了用sontek的成果。为何不站在巨人的肩膀上呢?Linux下的配置文件就是这样一个好处(但这也许是一个坏处):拿来即用。然后我所要做的就是慢慢适应sontek的做法,适时做些改进。其实,做research等不都是按照这样一个思路进行的吗?

以前的binary文件和各种都没了,这是永恒的痛,想起来都大有“黄鹤一去不复返,白云千载空悠悠”之感。尤其是在空荡荡的硬盘之下。

NoTech Comments(2) Thu, 14 Jun 2012 19:56:55 +0800

一次不愉快的尝试及思考(2)

在尝过了那种菜鸟特有的稍有一点胜利就自鸣得意之后,被冲昏头脑的我在稀里糊涂之下误以为使用fdisk调整了分区号的同时将物理位置也改变了。然后,我d掉了根分区了.............................................................................

再次重启时看到grub rescue时还微微一笑,小case,我已经是身经百战的人了,对这点小事还不驾轻就熟?然而,每次insmod时总是file not found或file system not recognized。百思不得其解,最终才发现我实在是遭天谴了。

当时那个心情啊,简直肠子都青了,悔恨,抱头,撞墙之心油然而生。要知道,我是废了多大的精力才将Linux的系统配置成我喜欢的样子的啊;而家目录中的dotfiles和那些binary包花费了我多长时间才搞定呢。

伤心之余,不由得骂起fdisk了,当时在删除的时候,居然没有特别对待一下这个根分区,好歹你也提示一下这样的操作极度危险之类的呀!我知道这正是你牛逼的地方,削铁如泥莫过于此;gparted望尘莫及。正如c语言的指针操作强悍无比一样,对内存的操作其他语言只有袖手旁观。但是,告诉用户这种行为的后果你会死啊!比如像删除某些重要的package时shell会提示用户输入一个字符串来确认用户明白知道所作所为,那这种极具杀伤力且无法挽回的操作只是告诉用户只有在reboot之后才能生效,是何居心?光凭这点,我就可以加入unix痛恨者之列了。不禁想起了rm -rf /这样的操作和fork炸弹了。这样的设计确实蛮符合Unix的哲学的。王垠大哥最近吐槽“Unix is simple. It just takes a genius to understand its simplicity.”这话恰和“The clothes made of this material are invisible to any man who is unfit for his office or unpardonably stupid.”有异曲同工之处。窃深以为然。Everything should be made as simple as possible, but not simpler.

不过还是想挽回点,用了livecd并找到了testdisk这样一个磁盘修复工具。在进行长达20分钟的deeper search之后,居然成功地定位到我前面数次磁盘格式化及删除操作。其中的一个插曲就是由于testdisk也是一个simple的工具,按q之后居然没有任何提示是否保存查询信息的操作,以致于我稀里糊涂下按了两次“成功”完全退出了搜素结果从而不得不进行第二次搜索。可是testdisk也没成功恢复出根分区的内容,提示分区损坏。

这下的我万念俱灰了,我知道肯定有修复的方法;但是已经没有这个精力和耐心去折腾了。重装吧,这是最不想做的,可不得不这样。

这种不快的经历,让我重新认识到Unix的哲学并不是那么正确的,至少对一部分人是不适合的。Unix的“无为”的做法是需要user花费巨大的代价来维护的;当然可以将Linux调教得服服帖帖,但是前提是你得先被它蹂躏得非常乖觉了。总有人将Unix和C联系在一起,的确因为设计者的思想的固化导致这两者成为杀人越货的利器的同时也总是伤人一千、自损八百。这两者都是野马,只是不是所有人都能驾驭。

NoTech Comments(0) Thu, 14 Jun 2012 19:56:27 +0800