中英文之间的空格

中英文混排的时候,有时候我们会觉得它们都挤在一起了。中英文之间其实要空开一格才比较美观,比如中文 English 混合,而不是中文English混合。当然,用 Word 或者 XeTeX 现在已经没有这个问题了(早先的 LaTeX 可以用 cctspace 解决)。但是在网页上,在 Adobe Illustrator / InDesign 之类处理混排不特别成熟的软件里,手工一个个去注意还是很麻烦。于是我就写了个小脚本来解决这个问题。它可以在中英文字符中间自动插入空格,去除中文标点前后的空格,以及连续两个以上的多余空格。程序其实很简单,但似乎用起来还算方便。
Continue reading “中英文之间的空格”

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<</BeginPage{currentpagedevice/PageSize get dup 0 get 1 ne exch 1get 1 ne or{.preview-BP }{pop}ifelse}bind/PageSize[1 1]>>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 字体”