Spaces between Chinese and English Text

When typesetting with both Chinese and English (or other western languages), we may feel that they are squeezed too close together. In fact, a space is desired between Chinese and English texts. E.g., we prefer 中文 English 混合 over 中文English混合. This issue has been much resolved in Word or XeTeX (cctspace can be used for CJK in LaTeX to add tilde before and space after English texts), but on webpages, in Adobe Illustrator / InDesign and many other software, the manual adjustment can be tiresome. So I wrote a simple script to solve this issue. It automatically adds spaces between Chinese and English characters, remove spaces before and after Chinese punctuations as well as consecutive spaces. Hope this small tool can be useful to you.
Continue reading “Spaces between Chinese and English Text”

preview-latex在GS9.00下报错

在emacs下其实很久不用preview-latex了,一直觉得没有必要——但是忽然用一下的时候发现不能用还是很郁闷的。基本上报错是这样的:

"GSWIN32C.EXE" "-dOutputFile=(_region_.prv/tmp5723kvc/pr1-1.png)" "-q""-dSAFER" "-dNOPAUSE" "-DNOPLATFONTS" "-dPrinted" "-dTextAlphaBits=4""-dGraphicsAlphaBits=4" "-sDEVICE=png16m" "-r70.4906x70.6156"
GS>{DELAYSAFER{.setsafe}if}stopped pop/.preview-BPcurrentpagedevice/BeginPage get dup null eq{pop{pop}bind}ifdef<>setpagedevice/preview-do{[count 3 roll save]3 1 roll dup length 0 eq{pop}{setpagedevice}{ifelse .runandhide}stopped{handleerror quit}if aload pop restore}bind def[(_region_.prv/tmp3712kvc/preview.dsc)(r)file]aload exch dup 0 setfileposition 520()/SubFileDecode filter cvx .runandhide aload pop dup dup 623 setfileposition 50()/SubFileDecode filter cvx<<>>preview-do
Error: /invalidfileaccess in --file--

查了一通后来发现有人遇到这个问题之后把GS降级到8.71以下就好了。说明GS在近来做了一些改动。左看右看看到了-dSAFER这个参数——这个参数本意是要加强权限检查防止gs自动打开系统文件权限——但和权限相关的也只有它了。试着在命令行下重新跑着两个命令(用gswin32会容易些,否则后面这个长命令贴都贴不进去),居然跑通了。又大致查了查,貌似可能是一个BUG,不过我升级到了最新的9.02也没有解决这个问题。

既然如此,到site-lisp/auctex/preview.elc(最好还是用.el重新编译一下) 下面找到
(defcustom preview-gs-options '("-q" "-dSAFER" "-dNOPAUSE" "-DNOPLATFONTS" "-dPrinted" "-dTextAlphaBits=4" "-dGraphicsAlphaBits=4")
把dSAFER一项干掉就是了。虽然这似乎是一个“漏洞”,不过就自己跑跑preview来看,应该没太大风险。

一个更为稳妥的办法是在.emacs里面加上 ‘(preview-gs-options (quote (“-q” “-dNOPAUSE” “-DNOPLATFONTS” “-dPrinted” “-dTextAlphaBits=4” “-dGraphicsAlphaBits=4”))),就好了

LaTeX 中的分页环境

近来搞一个书稿,希望自己设计一个环境可以加点分页的边框底色什么的,毕竟么,内容和版式都重要,看得身心愉悦才能更好地看下去。于是想设定一个带底色或者不带底色的环境,在外侧加一个竖线,看起来多么简洁的想法啊,真做起来可不太容易。

找找现有的东西吧,找来找去找到一个 changebar,看看用起来挺简单,拿 XeTeX 一跑,报错:( 发现这个包的逻辑是算出坐标,然后用很多特殊的 ps 命令把线最后补上去。按说 XeTeX 对 pstricks 支持的还不错… 可惜不行。我这书稿肯定是不可能倒回去用 dvips 的,看看网上似乎有成功把它移植到 pdflatex 上的,但原作者从不回邮件,宏包也多年不更新了。本来想搞一下这些 special 的命令,终因没有时间细究而作罢。加底色的盒子可以用 xcolor,但是分页就实在要费些周折。

后来找到了 mdframed 包,可以画分页的盒子和边框。研究了一下包的原理,发现也颇为不易:把分页的内容暂存起来,然后分别按照第一页、中间页和末页的情况,用 rule 或者 tikz 或者 pstricks 画出底色,然后再把字用盒子放进去。作者实际上把这些盒子的计算都算好了,可以自己来定义 style 设定作画的方法。这确实是个不错的主意,处理起来余地也挺大。不过后来发现,边框和边距设定都是按照左右来分的,碰到双面排版的情况,左右边距实际上应该是内外边距。事情繁杂也没有心情仔细读代码,于是试着给作者 Marco Daniel 写信要求增加双面排版的功能。3 分钟后收到回信,承诺周末帮我搞一个出来。一日之后作者如约回信,附上了更新后的宏包、文档和 style 文件,说完全支持所有的定制功能很困难,不过单设一条框线可以,暂时只支持用 rule 画线。调试一下发现有些问题,后又往复几次,迅速解决,感叹作者之敬业及效率,实在是好人啊!

作者说后续再把用 tikz 和 pstricks 画线的功能补上,正式的新版本很值得期待!再次对 Marco 表示感谢!

用 Ghostscript 替换字体

放这儿以防止自己忘了…

1. 尽量使用 Acrobat 7 打印 pdf,然后另存成 eps。不要用 Acrobat 9! 同样一个文件,7 出来的 eps 260k,9 出来的 10M… 无数的乱七八糟的信息,bs Adobe 一记。
2. 假定原先的字体是 TimesNewRomanPSMT.*之类的,嵌入之后可能变成 ABCDEF+Times****,仅搜索/…..+Times.*? 然后替换成想要的字体,比如/Minion-Regular
3. 如果愿意,可以搜索 %ADOBeginSubsetFont: …..+Times.* 然后匹配%ADOEndSubsetFont,把嵌入的字体去掉
4. 文件末还可能有 /TJMAAA+TimesNewRomanPS-ItalicMT /Font _pdfUndefineResource ^J /N10 /Font _pdfUndefineResource 之类的,也去掉
5. 用 GSView 看一下,保证字体已经替换好了
6. MikTeX/CTeX 2.8 里面自带了一个 gs…(这实在很让人迷惑),叫做 mgs.exe
7. 如果想用这个,可以去 MikTeXghostscriptbase 相应目录里面去找 Fontmap. 这里面定义了具体指向哪个 Fontmap 文件(默认是.aliases..)
8. 如果不想用,直接把它改个名字,然后把自己的 gswin32c 复制一份叫做 mgs.exe
9. mgs -h 查看文件搜索路径
10. 把 Fontmap.atb 复制一份,叫做 Fontmap
11. 把 Minion 添进去,比如
/Minion-Regular (morg____.pfb) ;
/Minion-Bold (mob_____.pfb) ;
/Minion-Italic (moi_____.pfb) ;
/Minion-BoldItalic (mobi____.pfb) ;
12. 试着用 XeTeX 编译一下吧,应该可以看到替换嵌入的字体了,撒花~
13. 注意,GS 的字体搜索路径要在环境变量 FontResourceDir 中定义。
14. 这种办法的缺点在于,可移植性有点差。

补充一些内容:在 MacTeX 环境下,可以新建 /usr/local/share/ghostscript/8.71/lib/Fontmap 来控制字体名称的匹配。用 gs –help 可以看到字体搜索路径。

Times, or Times New Roman?

You may have been well aware of the notorious Microsoft versions of fonts: Arial the inferior imitation to the classic Helvetica, and Book Antiqua that resembles Palatino – if not, please refer to ARIAL vs HELVETICA and Wikipedia on Palatino. I would like to eradicate Arial from all my delivered works (GhostScript helped a lot). Now, for the ubiquitous TIMES NEW ROMAN, is there anything wrong?
Continue reading “Times, or Times New Roman?”

XeTeX:结合 MathTime 和 Adobe 字体

忍了很久之后终于按捺不住诱惑,刚刚上手接触 XeTeX。选择字体实在太方便了,想想以前每次重配 LaTeX 安装字体时候花的功夫就觉得很崩溃…

现在好了,不管什么中文字体英文字体统统都是拿过来直接用,再也不用自己去生成 fontmap 之类的了。兴奋了一阵子之后,觉得要是能把 Arno Pro、Minion Pro 之类的字体融合到 MathTime 的符号多好… 可惜 fontspec 包对于数学的支持实在平平,作者另外搞了一个 unipre-math 据说不错,可是难道我们折腾半天就是为了用 Cambria Math?? 那么就自己来搞一下。 Continue reading “XeTeX:结合 MathTime 和 Adobe 字体”