用 VIM 和 markdown 格式写学术论文

概要 相对于其它选择来说,markdown 格式方便人更专注于文章内容的写作。然而它用于写短文绰绰有余,论文排版则需要许多额外的功能。本文介绍了我使用 markdown 写论文的折腾过程,基本上扫清了论文写作中的常见需求:一键搜索并插入引用文献、文档内交叉引用、公式图表编号、LaTeX 输出与模板套用、Word 文档输出、一键后台编译多份文档、同义词查询、拼写语法检查等。 本文虽然主体已经完工,但可能不定期修改,以方便读者理解。如果觉得本文有用,欢迎收藏,并在写论文时回来看看有没有更新。 Update on Apr 29 2020: 增加了对 VIM 之外其它编辑器的一些推荐。 如有难以理解的部分,欢迎留言或者对此文件发 Pull Request。 下面是几个使用示例截屏: 一键搜索引用文献 拼写自动更正 同义词检索替换 编译预览结果 引言 去年这个时候我颇花了一点时间打造了一套 VIM 上使用 markdown 写论文的系统。现在我准备投靠 Emacs 和 org-mode,这套系统以后怕是不会再用了。在这里记下来我的配置,或许对于一些人会有用——毕竟 VIM 用户还是比 Emacs 用户多多了。而且这些的许多配置使用其它文本编辑器的人也可以借用。 为什么使用 markdown 写论文? 使用 markdown 的优点 markdown 是一种只保存必要文档结构,不保存格式和样式信息的文档格式,我们可以用同样一份 md 文档很方便地生成不同格式的最终文档。它语法简明,易读易写,作为纯文本文件,方便使用 git 进行版本控制。相较之下,其它的几种流行格式各有各的缺点 HTML 虽然可以将样式定义都放在 CSS 里,但是 HTML 本身手写起来麻烦且不易读。 …

关于文本编辑器的一点想法

在强迫自己用VIM写了三篇 paper 之后,我觉得我的 VIM 终于可以出师了。现在开始了 Emacs 的折腾之路。 这其间有几点感触 掌握新的编辑器的最佳方法是逼自己用它完成一个大项目。每天每一步都去想:如何能让操作更方便一些? VIM 和 Emacs 虽然说总被奉为神器,但确实已经开始显露疲态——负的历史包袱太重。就特殊用途来说,自然和大型 IDE 难以比肩,现在连 VSC 这样的新兴编辑器也要追不上了。 然而它们的魅力在哪里?在于——当你只是为了某个小任务想扩展一点功能的时候,用 VIM/Emacs 可以在极短时间内完成——而用 VSC 这样的编辑器,可能就必须要开发新的插件了。TypeScript 什么的门槛再低,也没有一行 VIM 宏来得快。 但是当使用者希望有像 IDE 一样的复杂支持时,VIM/Emacs 毕竟还是小众工具,开发者群体和 VSC 这样火爆的当代编辑器自然有些逊色。大部分插件都属于个人作品,加之UNIX哲学的影响,往往需要组合使用不同插件才能完成某个复杂工作环境的搭建——当然这也是折腾开源软件系统的乐趣之一。可是,对于追求稳定性的人来说,开源软件的频繁更新和复杂的依赖关系往往导致上手之后层出不穷的 bug 。 所以,VIM/Emcas 在当今的意义在哪里呢? VIM 的文本编辑操作经过历史的检验,恐怕在脑机接口出现之前,都会是效率最高的操作方式。现在的大型IDE一般也提供了 VIM 模式的支持,甚至于对 VIM 宏和 ex mode 的支持。一味坚持原教旨 VIM 而拒绝这些先进工具显然是不明智的。 而 Emacs 恐怕主要的用户群体将一直会是有着造轮子爱好的人。只打算装装插件开箱即用的人,不一定适合使用 Emacs。不过要是用一个软件解决从上网、电邮、聊天到煮咖啡的所有需求,大概 Emacs 生态仍然是目前唯一的选择。 不过呢,所有的东西都自带一个文本编辑器。Word 里有一个,WordPress 里有一个,所有的 …

Zotero 英文界面下中文字体异常的原因和解决办法

本文最后更新于 2020年4月28日 问题概述 当 Zotero 使用英文界面时,中文字体显示可能会出现异常,表现为大小粗细不一。此问题目前网上没有解答,我是第一个给出解答的人。 问题主要出现在英文操作系统下。但在中文系统下,如果用户不愿意使用中文界面而使用英文界面(这可以通过禁用 Zotero 的 intl.locale.matchOS 选项实现),也可能受到此问题的困扰。 问题表现如下图所示,Zotero 默认安装后,显示中文时出现了不同字体混搭,显示效果非常怪异。 经过下文所介绍的设置之后,问题得到解决,效果如下图 原因 操作系统中没有语言 fallback 顺序的设定。于是 zotero 使用软件自己的 fallback 顺序。先尝试英文,英文无法显示再 fallback 到其它语言。因其它语言的 fallback 顺序未设置,故为未定义行为。而默认顺序日文 ja 排序在中文 zh 之前,先落到日文字体上,无法显示的再落到中文字体。这样一行文字当中,有的字(大多为繁体字)使用日文字体显示,有的使用中文字体显示,造成了一行字体不一致。 详细的原因分析见文末讨论部分。 解决办法 2017年7月之后的解决办法 很遗憾的是,由于 Zotero 的更新,原来的较优美的解法(令中文优先于日文)已经不能使用。详见文末讨论部分。 暂时的简便解法是这样的,既然知道问题出在 Zotero 调用日文字体来渲染中文,那么我们把默认日文字体改掉就好了。 进入 Zotero 高级选项:Tools-Preferences-Advanced-Config Editor 搜索 font.default.ja,它的默认值应该是 sans-serif。 因而我们需要改掉日本默认的 sans-serif 字体。继续搜索 font.name-list.sans-serif.ja,然后将一个你喜欢的中文字体放在那一堆日文字体前面即可。我这里用的是微软雅黑。设置会立刻生效。 这种解法的缺点是日文文献可能会有显示问题,但是中文字体的汉字加上日文字体的假名,倒也不算特别不协调。实在在意的话,可以使用 Arial Unicode MS 之类的兼容中日两国所有字符的字体。 …

漫谈那些年用过的词典软件

主体写于2016年,2020年4月依最新情况予以更新和补完。 早年的时候,金山词霸名震全国。我从盗版词霸光盘(还以为是用的正版)开始用起,到大学里有正版的可用,多年以来一直是词霸的忠实拥趸。喜欢词霸的理由很简单:那时候像它这样的软件并不多,支持屏幕取词很是方便,收录的词典权威可靠质量高,也算是为好内容付费。其中专业名词委部分对于后来阅读专业论文还是颇有帮助的。谷歌金山词霸并不怎么好用,后来我电脑里一直有的是某某大学版金山词霸 2009 版。 上大学之后,不少朋友开始用灵格斯。我也在人推荐之下装了,但是除了研究了一下它的功能之外,其实甚少用作主力词典。灵格斯的取词功能相对于旧版的金山词霸是大有进步了,不过也比金山词霸更容易造成 Word 崩溃等问题。那时如果有同学出现 Word 崩溃的问题,先问一句装没装灵格斯总是没错的。(Word 的插件大多不甚稳定,微软没有早点搞 Office 插件商店实在是不明智)划词翻译这个功能是在灵格斯中首先接触到的,当时觉得比屏幕取词更可靠更灵活。除去总让 Word 崩溃外,不太喜欢灵格斯的另一个原因是,虽然我们都同意软件作者应该能从软件中赚钱养家,但灵格斯犯了和 StarDict 的胡正一样的错误:拿着侵犯版权的词库来卖钱,这让人很不舒服。 不过,自我用了 Windows Mobile 之后,早就不把电脑上的词典做主力词典了。有那么两年,Android 还没出现,iPhone 上还没有给力的词典。Windows Mobile 用户手持 MDict 真是可以笑傲天下,藐视一切智能手机用户。MDict 作为 PDA 时代的标志性软件,至今影响很大。虽然 MDict 本身现在已经没有多少用户,但是其词库格式仍然是中国最主流的用户自制词库格式之一,被许多词典软件所支持1。因它的格式设计时对网页兼容甚好,各大词典的原版光盘都可以方便转制成精美程度不输纸版的的词库。这是 StarDict、灵格斯的词库格式所不能做到的。当然,这有赖于当初 MDict 可以调用 Windows Mobile 的 IE 内核来显示内容2。MDict 的悬浮窗和划词搜索也是大杀器(这点至今没有在 Android 和 iOS 上看到同类功能),还有很多文档阅读软件可以支持 MDict 的翻译接口。从这个角度来说,Windows Mobile 当初真的是很先进和方便了。那时我的手机里一堆朗文当代、维基百科、康熙字典等网友制作的词库。最喜欢的当然还是朗文当代,可惜朗文从来没有授权第三方使用他家的词典。从支持正版的角度,我虽然用了盗版的词库,还是买了纸版正版聊作支持。 Windows Mobile 时代终究流水逝去。很多 Windows Mobile 时代的每日必用软件,至今也没有在 Android、Windows …

浅谈Word中的主题与样式

样式与主题 样式与主题都是Word中用于快速调整大批量文本格式的有力工具。不免很多人因此困惑该用哪一个。花了一点时间研究之后,我准备总结一下我的一点经验。 样式是一个古老的功能,很早开始就内置于Word当中。通过它们你可以快速地设定全篇文档不同层次文本的所有格式,是长篇文档排版必备。样式集存储在不同的模板中。默认样式存储于normal.dotm。 主题则是Office2007开始提供的新功能。主题包括哪些方面呢:字体(注意它仅有正文字体和标题字体两重设置,没有格式设置也没有其它”强调文字””标题2″等其它样式的设置)、颜色、图表形式、PPT背景。主题是没有默认主题的。主题存储在thmx文件中。 那么总结一下,样式主要是用于设置文本的,主题主要是用于视觉效果的统一。因此,对于PowerPoint,主题更为重要;而对于Word,样式集更为重要。(所以你可以看见,在PowerPoint里,一个大大的设计选项卡专门用于主题设置。而两者的共同点:快速套用微软已经设计好的大批设置,不用在自己细调设置使它们协调。  (插一句,那么,在PowerPoint与Word样式集对应的存储在模板中的纯格式内容是什么呢?是幻灯片母版。) 层次1 主题,对Office三大件都可设置 层次2 Word的样式集,PowerPoint的母版 什么时候用样式?什么时候用主题? 如果你只需要写一份Word文稿,样式集可以提供你更详细的设置。主题可酌情选用,不用也可。 主题在做一系列文稿时(比如你既需要提交报告,又需要做展示PPT,还要在Excel里做两个表格),使用主题可以使你的不同类型文档具有统一的风格。 如果你需要调整SmartArt图形的风格,主题也是有用的。 那么,两者可不可以一起使用呢?可以。它们本就不是一个层面的东西。主题是更高层次的。之所以会要将两者进行比较,原因是:这两者有一些调节范围是重叠的,比如字体。 这就引出要注意的问题了:样式与主题有一个相同点就是:如果你更改过文本的任何格式,再调用它们时将不会达到你理想的效果。比如说,如果你设置过字体,那么样式的字体就不会应用于其中。如果你更改过段落缩进,那么样式中的段落缩进也不会再应用于其上。所以,重复使用主题和样式的时候,就需要注意两者的次序问题。如果你使用了效果冲突的主题和样式,其中的一个的部分效果就会被掩蔽。我试验的结果好像是一般情况下主题掩蔽样式集,除少数情况外。但总而言之,无论是样式还是主题都不要频繁更改,因为word经常会出一些bug导致之前的样式有残余影响。 简要对比: 项目 样式 主题 文本 所有格式 只能设置字体 段落 能 不能 边框编号等 能 不能 颜色 能 能 效果 不能 能 SmartArt图形风格 不能 能 编辑文档时从网上下载 不能 能 新建文档时从网上下载 能(下载模板) 不能 着重点 复杂的文本格式 图形效果与整体风格搭配 再说另一个问题:主题和样式都被微软吹嘘为轻松获得专业设计水准的文档效果。但是实际呢?这些主题和样式集,在英文下的确效果不错。但是可惜的是,中文的主题还不错,而历史悠久的”样式集”质量就实在不敢恭维了。居然会出现宋体加粗或者中文字体斜体这样的排版大忌。Word的中文汉化水平一贯和软件的总体质量相差甚多。所以排版上没有常识也是可以想见的。所以真正懂点排版的同学,还是手调样式集为宜。

从Word公式编辑器的一个Bug的解决方法说到不推荐使用Ctrl空格切换中英文

Update: 原文中的链接已经失效,去除超链接 原文推荐使用 左alt+shift 切换中英文,在 Win10 系统中,已经无需专门按左Alt,右Alt可以起到相同作用 从Word公式编辑器的一个Bug的解决方法说到不推荐使用Ctrl空格切换中英文 中文版Word2007 2010的公式编辑器存在一个非常要命的Bug,目前微软也没有给出解决方法。我非常希望Word下一个补丁可以解决它。 言归正传,众所周知,录入数学公式时,函数正体,变量斜体。虚数i等常数按习惯(比如i是正体,e是斜体)。但是中文版Word2007/2010中的公式编辑器竟然不能将变量自动斜体,而需要用户手调。 (从网上的文章来看,联系客服的结果是,微软居然自以为得计,认为这是一个feature。如果想实现自动斜体,微软的建议是装英文版Word。我了个去,微软中国的软件工程师真的智商堪忧得很。公式中的中文不能斜体,不代表用中国人公式中的英文也不能斜体吧?把公式中的中英文分别对待在技术上有那么难吗?) 下面要说到这个问题的两个解决方法了。 第一个方法,也是我推荐的方法,就是切换到英文“语言”之后再录入公式。这时公式的显示就正常了。如果你确实有英文“语言”的话(我说的不是“中文(简体)美式键盘”,而是将那个CH图标切换为EN),按左Alt+Shift即可切换。 第二个方法,则纯属利用漏洞。点击公式设计面板上的“普通文本”按钮两次,则公式自动转为斜体。可以写一个宏来自动完成这个操作。 区别:使用第一种方法,中文不变斜体;第二种方法中文则会变斜体。 参考: http://yujiajin.wordpress.com/2008/09/28/ms-word-2007公式编辑器默认非斜体的解决方法/ http://hi.baidu.com/lambkin_guzhu/blog/item/cea8a9dd929717e577c6384a.html 下面要说到第二个问题了:如何切换中英文? 目前无外乎三种方法:输入法提供切换功能(比如说搜狗和微软拼音是按Shift切换);Ctrl空格切换“有无输入法”;上文提到的左Alt+Shift切换语言。 第一种方法的缺点是:有的输入法切换到英文状态后仍然是中文标点,在对标点有要求的时候就务须慎重。优点是方便快捷。 第二种方法的缺点是:对于有些笔记本电脑,容易误按成Fn+空格,而不少笔记本电脑的Fn+空格是有定义的,会造成不必要的麻烦。 第三种方法有一个很大的优点:那就是我们切换到英语之后,可以使用“美国英语-国际”键盘!这个键盘(或者说输入法吧)有一个极大的优点(我前面的日志提到过)就是可以方便地输入各种法语德语中字母的上标。比如说ê这个字只需要先按^再按e就可以录入。 综上,一般时候我们可以用输入法内置的中英文切换,而在Ctrl空格和Alt+Shift中,我更推荐后者。

WORD2007中文版翻译BUG一枚

波浪线下面一个等号,“≅”,这个符号转义符是\cong,即 congruence 的简写,也就是说这是全等号 但是在 Word 2007 的公式编辑器中,鼠标移到这个符号上面,会显示“约等于”!这可以算是一个中译的BUG了。 下面的几个算是译得不准: 约等于号\approx “≈” 被 Word 说成是“几乎等于(渐近于)”,好吧,这个解释也不算错。 而相似符号\sim “∼”却被 Word 说是“约等于号”,雷啊! \simeq,“≃”,Word 说是“渐近等于” 2020年4月更新: 经过查证,这并不是一个中文翻译错误。因为英文版 Word 里本来就是错的! 而微软犯这个错的原因是,Unicode 标准里对这些符号的解释就是错的,和数学家常用的意义不同。虽然另一个 ISO 标准中使用了正确的解释,但显然微软使用的 Unicode 解释。 对此的辨析见 https://math.stackexchange.com/questions/507609/when-to-use-congruent-vs-approximately