【转载请注明出处】

本人是一个围棋爱好者,这几天心血来潮,看到xe(la)tex能够对中文字体提供原生的支持
,不由试了试,看能否由sgf(Smart Go Format)文件直接生成pdf文档。

由sgf制作tex,历史上已经有人为之,一个很著名的包,sgf2tex,就能够完成类似功能,
该软件包经过完善,后来改名为sgf2dg,提供了更好、更强大的功能(好像应该与时俱进得
使用很好、很强大:P)。

我的系统是Debian lenny,安装了sgf2dg 4.026-9和texlive-xetex 2007.dfsg.1-2以及一
些个人比较喜欢的字库,转换工作就由此基础开始。

简要转换步骤如下:
1 使用iconv将sgf文件的文字内码由gbk转换成utf-8
2 使用sgf2dg将sgf文件转换成tex文件
3 在sgf文件中添加如下三行(在文件头部的任何位置均可)
  /font/zh="[/home/young/fonts/simyou.ttf]"
  /XeTeXlinebreaklocale "zh"
  /XeTeXlinebreakskip = 0pt plus 1pt
4 使用jjgod的xcp.p(再次感谢!)给tex文档的中文部分添加/zh命令,其中,对xcp.py进行
一些修改,找到开头的MARK_START和MARK_END,将其内容修改为:
  MARK_START = '//input gooemacs'
  MARK_END = '//bye'
5 用xcp.py处理生成的tex文档
6 用xetex编译tex文件

为了方便起见,写了一个很简单的Makefile,用来自动完成上述所有工作,代码如下:

allok:
        iconv -f gbk -t utf-8 test.sgf > ok.sgf
        sgf2dg ok.sgf
        sed '/input gooemacs/s/^///font//zh=/"[//home//young//fonts//simyou.ttf]
/"/n//XeTeXlinebreaklocale /"zh/"/n//XeTeXlinebreakskip = 0pt plus 1pt/n/'
ok.tex > allok.tex
        python xcp.py allok.tex > final.tex
        xetex final.tex

clean:
        rm -f *.log *.dvi *.pdf

写得比较土,还没有进行优化。

最后,附上一张棋谱,供大家实验用:
(;AB[pd][pp][dp]C[坂田荣男先放三子,可能只在学棋时期有此经历。
受三子弈一局模范棋,对拥有了本因坊等七十个头衔的他来说,可能连做梦也没想到过吧!
一般业余棋手受几子,还输得一塌糊涂,心情一定很难过,也不会服气,研究一下专家高段棋手的模范受子棋的手法,定可帮助提高您的棋力,这也是出版本书的目的之一。
弈受子棋的棋理,最重要的是如何运用所受之子。]
AP[MultiGo:3.7.0]SZ[19]GN[专家让子棋·三子局]RO[221]PB[桥本昌二]BR[九段]PW[坂田荣男]
WR[九段]KM[0]HA[3]RE[黑35目胜]
;W[cd];B[ed]C[白1占据小目,为求变化常用之手段,黑2一单调挂,意在求简明,黑如A位小飞挂,变化则较多,白棋可以使用种种趣向,也就是白棋有较多的机会挽回授三子之负担。桥本昌二在二十三岁时,就已升到最高段位——九段,曾经获得王座及NHK杯快棋等多项头衔。
白3如照参考图]
(;W[ee]C[故白3上靠求较复杂的变化,这是授子者所应执有的态度。];B[fe];W[de];B[gd]
;W[ff];B[gf]C[坂田荣男在对局前说:“过去专家棋士之间的授子棋,大家都下得非常认真,我一手棋也不能下错。”
受三子的坂田荣男,他的手法与弈分先棋毫无两样,总是选择最严酷的着法,授三子的桥本昌二当然十分难下。
白9如]
(;W[fg]C[问题一:黑棋的下一手是A、B或C?]LB[cc:A][gg:B][jd:C]
(;B[gg];W[fh];B[gh];W[fi]C[白11长时,黑12再压,对受子棋来说,连压几手总是好棋,请勿忘记。
坂田荣男没有花时间,弈出了黑10、12。而白11、13只好听命,两手棋都不能扳。
问题2
黑棋的下一手是什么?在上边大围是大棋,但白棋挂左下角也很大。坂田荣男选择的着点是A、B或C?]
LB[ci:A][ck:B][cm:C]
(;B[cm];W[nd]C[两位对局者都说:“不懂,不好下。”
黑14占据左下边,而白15挂右上角是当然的着手。
白15若于左下边×位拦,目前不大,黑▲大飞,可以满意。
问题3
黑16可以A夹吗?
还是黑B外靠,或老实地黑C跳?]
TR[mc]MA[ck]LB[lc:A][ne:B][pf:C]
(;B[lc];W[pf]C[白17双挂(也可以说是反夹)是当然 的一手,此手如单A跳出,则黑在17位也跳,黑棋舒畅。
]
(;B[nc]C[黑18托碰是坚实的一手。
坂田说:“黑18托碰,可能过于坚实……”];W[md]C[白19是先手刺。
白19如不下,则黑19后手虎是好棋。]
;B[mc]C[黑20粘,不得已。];W[qn]C[白21挂右下角,桥本以快步调布局,拼命追赶。
问题4
桥本昌二苦苦思考。对手不是业余棋手,而是第一流高级棋士,何况授三子。
白21挂右下角,黑棋怎棋着手才对?A、B与C,哪一手最佳?]
LB[ld:A][pj:B][qo:C]
(;B[pj]C[黑22打入时,白23如]
(;W[nq]C[白23双挂时,黑A压好呢,还是B压好?]LB[pn:A][np:B]
(;B[np]C[普通是在黑24方面压。
白21比23子弱,黑24压是顺从“压强不压弱”的棋谚而弈出。
也可以说黑24压是攻击白21的声东击西之法。
如压向白21,有帮对方强化,方向倒逆之嫌。]
;W[mp];B[no]
(;W[qq]C[现在白27点三三求变是正确思维,也可以说是此型的常用手法。
问题5
A、B与C,哪一手最佳?]
LB[oq:A][pq:B][qp:C];B[oq];W[qp];B[mq];W[nf];B[cj];W[dq];B[eq];W[er];B[ep];W[cr]
;B[gq];W[cp];B[co];W[fr];B[bp];W[cq];B[gp];W[ec];B[fc];W[eb];B[qd];W[ld];B[kd];W[ke]
;B[je];W[kf];B[gr];W[fb];B[gb];W[oc];B[od];W[ob];B[jd];W[rc];B[qb];W[rd];B[pb];W[qe]
;B[qg];W[ql];B[rf];W[re];B[mf];W[oe];B[mg];W[rb];B[le];W[lf];B[me];W[ne];B[nb];W[ng]
;B[mh];W[oi];B[pi];W[mi];B[kg];W[nh];B[rj];W[bi];B[ci];W[ch];B[bj];W[bh];B[bq];W[br]
;B[ar];W[ds];B[fs];W[bs];B[ml];W[ik];B[im];W[ll];B[lm];W[km];B[kl];W[lk];B[kn];W[mm]
;B[ln];W[gm];B[hl];W[gl];B[gk];W[fk];B[hk];W[el];B[nl];W[bn];B[bo];W[cl];B[bl];W[bm]
;B[dm];W[bk];B[dl];W[al];B[ej];W[fj];B[aj];W[dk];B[ck];W[di];B[dj];W[ek];B[bl];W[kh]
;B[lg];W[cl];B[nj];W[oj];B[mj];W[ni];B[lj];W[bl];B[li];W[in];B[hm];W[hj];B[gj];W[gi]
;B[hi];W[ij];B[hh];W[hn];B[jn];W[en];B[do];W[io];B[gn];W[go];B[fn];W[fo];B[fm];W[em]
;B[fl];W[eo];B[jp];W[ip];B[iq];W[jq];B[jo];W[pr];B[or];W[rk];B[pk];W[ok];B[pl];W[pm]
;B[ol];W[qa];B[pa];W[ra];B[po];W[qo];B[qk];W[rl];B[pg];W[dd];B[fd];W[ga];B[ha];W[fa]
;B[hb];W[an];B[om];W[pn];B[on];W[sj];B[si];W[sk];B[rh];W[ho];B[ir];W[se];B[gs];W[es]
;B[sf];W[qc];B[pc];W[nk];B[mk];W[hp];B[hq];W[os];B[ns];W[ps];B[pq];W[qr];B[og];W[oh]
;B[ph];W[ao])
(;W[oq];B[pq];W[jq]C[白27如照此参考图下,则无谋。]))
(;B[pn];W[pm];B[on];W[qo];B[qp];W[om]C[黑1方面压,白2扳,黑3长时,白4长、6压,不但白阵趋于坚实,而且星位黑子有被攻击的危险。]))
(;W[qq];B[qp];W[pq];B[op];W[rp];B[ro];W[rq];B[qo];W[nq];B[pn]C[白1点三三,则黑2以下至10止,黑棋简明,求之不得。
白棋这样下,永远都赶不上。
]))
(;B[ld];W[pj]C[黑1拐,虽是厚实,但为时过早,目前还是小棋。
白2围右边,黑棋不利。
黑棋如一定要从上边着手,则黑A位冲击白形之急所是有力的一着。]
LB[nf:A])
(;B[qo];W[pn];B[np];W[pj]C[黑如1位尖顶,再3跳,则白4围是绝好点。如此黑棋不能满意。
上边的白子生出作用后,白棋在右边可以围到一点空。])
(;B[pj]C[黑1打入,分断白棋为二处是最佳的一手。
含有攻击的着手是弈受子棋的获胜要领。
过于重视实利,则大局容易被对方控制。
眼光要放得远。]))
(;B[oe];W[ld];B[kd];W[kc]C[黑18虽也可以考虑如图中1位尖出,但白棋有2、4扭断处理之手段,局面趋于复杂。]))
(;B[ne];W[me];B[oe];W[ld]C[黑如1位外靠,至白2、4止是最普通的进行这样与当初左上角所形成的形状差不多,但周围情况则大不相同,黑棋不能这样下。
黑棋留有被白A进三三之缺陷,且有帮白棋安定之嫌。]
LB[qc:A])
(;B[pf];W[pc];B[qc];W[oc];B[qb];W[jc]C[黑如普通地1跳,则是最稳当的着手,但此际正中白意。
白2、4托退后再6拆,在黑棋的势力圈里简单安定,且左边所筑成的黑棋势力也无法生出任何作用。])
(;B[lc]C[黑1的夹,方为最严酷之应手。
不给白棋以根据,这样,黑棋才有攻击白棋的机会。]))
(;B[ci];W[ck];B[dj];W[dk];B[ej];W[fl]C[黑1过于深入,被白2夹,待黑3尖时,白4、6封锁,黑棋无法逸出。])
(;B[ck];W[dn];B[ek];W[fn]C[黑1比前图近二路,但还是过深。
被白2反击,待黑3跳时,白也跟着4跳,下一手白A封和白B曲为见合之点。
黑棋陷入苦境。]
LB[gk:A][fp:B])
(;B[cm]C[顺从“不靠近厚势行棋”之棋谚,黑1大飞是最正确的着点,白棋再也无法遮断。]))
(;B[jd];W[gg]C[黑如1位拆,则白2拐是急所,黑棋只好A位长,上边黑棋呈重复状态,显然不利。]
LB[hf:A])
(;B[cc];W[dd];B[dc];W[ec];B[fd];W[eb];B[db];W[gb];B[bb];W[ic]C[黑如1位托角,则白2、4之手段可以成立。
白6立下时,黑7挡是最强手,但白8跳,长气是好手,黑9只好活角,白10飞出后,中央五颗黑子彻底浮起,黑棋以后很难下。])
(;B[gg]C[黑1压应是急所,这里是双方的要点,对弈双方之子接近时,绝对不能松懈,当然,黑A尖或黑B飞是不及格的,没有魄力。
黑1压,白棋在左边虽可获取相当实利,但右边黑棋之模样也在扩大,以围棋术语而言对白是“形成狭小局面”。]
LB[hg:A][hh:B]))
(;W[gg];B[fg];W[ef];B[hf];W[hg];B[ig];W[fh];B[ih]C[1位连扳,其变化如何?
在实战中时有出现,请多多研究。
黑2断打后再4长是次序,白5时,黑6扳用强,再白7打至黑8长出,只是此过程中的一种形状。]))
(;W[ec];B[fc];W[dc];B[fd];W[cf];B[jc]C[在1位托,则黑2以下至黑6止,黑棋布局简明。]))

使用xetex直接由围棋棋谱文件创建pdf书籍相关推荐

  1. 用C语言实现SGF格式围棋棋谱解析器

    这是本人(liigo)独立实现的SGF格式围棋棋谱文件解析器,本文介绍其实现细节.网络上肯定可以找到完善的开源的SGF解析器,这是毋庸置疑的,我不直接使用它们,也不参考它们的实现代码,而是自己独立编码 ...

  2. Acrobat Pro DC 教程:如何使用文本和图片文件创建 PDF?

    欢迎观看 Acrobat Pro DC 教程,小编带大家学习 Acrobat Pro DC 的基本工具和使用技巧,了解如何在 Mac 上通过 Adobe Acrobat DC,使用文本和图片文件创建 ...

  3. 230套java web开发PDF书籍和CHM参考手册资料大全 免费下载

    230套java web开发PDF书籍和CHM参考手册资料大全 免费下载 下载地址:http://yun.baidu.com/s/169jYH 文章来源:HTML5星空http://www.html5 ...

  4. 10 本 Android PDF 书籍免费分享

    极力推荐文章:欢迎收藏 Android 干货分享 本篇文章主要分享以下Android开发PDF书籍 一.Android框架揭秘 二.Launcher应用开发 三.Android进阶之光 四.深入理解A ...

  5. ipad使用的PDF书籍没有目录怎么办?

    ​预估阅读时间:4 分钟 1.引言 不知道你们有没有体会过:当你满心欢喜打开自己通过关注了无数个公众号回复了无数个关键词找到的pdf书籍时,惊讶地发现这书竟然没有目录,是个不完整的电子书! 这对于用i ...

  6. 10本 JavaScript PDF 书籍免费分享

    极力推荐文章:欢迎收藏 Android 干货分享 本篇文章主要分享以下JavaScript开发PDF书籍 一.JavaScript权威指南 二.JavaScript设计模式 三.JavaScript语 ...

  7. 10 本 Linux PDF 书籍免费分享

    极力推荐文章:欢迎收藏Android 干货分享 本篇文章主要分享以下Linux开发PDF书籍 一.Linux程序设计 一.Linux程序设计 关注微信公众号:Linux程序设计,回复 Linux程序设 ...

  8. 10本Linux PDF 书籍免费分享

    极力推荐文章:欢迎收藏 Android 干货分享 本篇文章主要分享以下Linux开发PDF书籍 一.Linux程序设计 二.Unix环境高级编程 三.Unix_Linux编程实践教程 四.鸟哥的私房菜 ...

  9. 10 本 Java PDF 书籍免费分享

    极力推荐文章:欢迎收藏 Android 干货分享 本篇文章主要分享以下Java开发PDF书籍 一.Java编程思想 二.Effective Java 三.Java核心技术卷 四.Java并发编程实践 ...

最新文章

  1. 什么是对象,为什么要面向对象,怎么才能面向对象?
  2. spring整合mybatis接口无法注入问题
  3. JS 获取浏览器、显示器 窗体等宽度和高度
  4. Reindex SQL Server DB table
  5. 【2017年第1期】大数据能力开放平台创新和发展
  6. 服务器中修改项目端口,c#-在Visual Studio 2013中更改项目端口号
  7. +0 ≠ -0:多出一个数的补码
  8. Bitmap如何高效加载图片
  9. 2022年 微信大数据挑战赛
  10. 用AD9画51单片机的最小系统
  11. 苹果cms V10 七色中文 二开苹果cms视频 图片 小说网站源码模板
  12. 驱动程序解析及其对硬件和系统发挥效能的重大作用和注意事宜
  13. Vivado SPI Flash程序下载
  14. 免费且好用的UML工具推荐
  15. clustalw序列比对_序列比对和构建进化树(clustalw和phylip)
  16. 网络编程培训之七 实现Traceroute
  17. DataBinding找不到符号,import xxx.xxx.ActivityxxxBindingImpl
  18. Revit修改部分楼层上的轴网
  19. 房屋租赁合同违约怎么赔偿
  20. Python经典编程习题100例:第78例:找出年龄最大的人

热门文章

  1. 从距离、范数、內积,线性结构到度量空间、赋范空间、內积空间、欧几里得空间、巴拿赫空间、希尔伯特空间
  2. SaltStack常用模块之file
  3. centos7升级内核重启问题:you need to load the kernel first
  4. 2D动画设计制作软件—“Reallusion Cartoon Animator”
  5. [转帖]ASML发布Q1季度财报 营收22.3亿欧元,EUV光刻机下半年产能大增 ...
  6. Android电视kodi安装失败,电视提示“解析包出现错误” ?四种方法教你轻松解决...
  7. linux内核协议栈 TCP层数据发送之TSO/GSO
  8. Python 3.8.0百度网盘资源下载
  9. linux系统安装teamview,在Ubuntu 18.04系统上安装TeamViewer的两种方法
  10. ubuntu18.04安装teamviewer后,一直登录不上原因。