三国杀孟获再起:问ctex字体管理的问题

来源:百度文库 编辑:偶看新闻 时间:2024/03/29 07:42:29

[求助中] 问ctex字体管理的问题

/usr/local/texlive/2011/texmf-dist/tex/latex/ctex/fontset/
ctex-xecjk-adobefonts.def
ctex-xecjk-winfonts.def

按传说中的改了字体名称,即fc-list中的名字
没问题

有一个想法就是如果我想添加一套字体,如macosx的一套
同样类似adobefonts的选项
添加完命名成一个文件为ctex-xecjk-macosxfonts.def在上面两个文件目录相同目录下

然后修改几个相关的配置文件:
/usr/local/texlive/2011/texmf-dist/tex/latex/ctex/opt/ctex-common-opts.def
/usr/local/texlive/2011/texmf-dist/tex/latex/ctex/engine/ctex-xecjk-engine.def
/usr/local/texlive/2011/texmf-dist/tex/latex/ctex/engine/ctex-cjk-engine.def

在相关的adobefonts/winfonts的相应部分添加上macosxfonts的字段

发现不成:编译的时候报错:

$ xelatex high-level-ctexart-macosx.tex
。。。
(/home/local/texlive/2011/texmf-dist/tex/latex/ctex/engine/ctex-cjk-common.def)


! LaTeX Error: File `ctex-xecjk-macosxfonts.def' not found.

Type X to quit or to proceed,
or enter new name. (Default extension: def)

Enter file name: X



求指点

要更新啥数据索引吗?收藏 分享

milksea

  • 发短消息
  • 加为好友

milksea (减肥失败中 >_<~~)当前离线

圡人|无良吐槽水车

UID
56635
帖子
11064
精华
5
积分
11655
阅读权限
150
在线时间
1965 小时
注册时间
2007-2-22
最后登录
2011-11-8

超级版主

2# 发表于 2011-8-19 23:56 | 只看该作者 有要求可以在ctex-kit项目网站上发issue提出来,统一更新,不熟悉不要自己改,奇怪的错误都是从这么来的。

我不是MAC用户,不知道里面预装了哪些字体。如果MAC的预装的中文字体名是固定的,我可以直接更新宏包,增加相关的选项。●入门文档●网页搜索●提问事宜●
——milksea @ bbs.ctex.org

TOP

sakulaqi
  • 发短消息
  • 加为好友

sakulaqi 当前离线

UID
40907
帖子
6
精华
0
积分
7
阅读权限
10
在线时间
2 小时
注册时间
2005-8-30
最后登录
2011-8-25

新手上路

3# 发表于 2011-8-21 16:06 | 只看该作者 我只是想搞明白那几个管理字体的配置文件是什么关系互相管理的
我也不是mac用户
只是想试试能不能添加一套别的字体来测试

希望给点提示

难道不提倡用户DIY ?只听官方的更新?

TOP

sakulaqi
  • 发短消息
  • 加为好友

sakulaqi 当前离线

UID
40907
帖子
6
精华
0
积分
7
阅读权限
10
在线时间
2 小时
注册时间
2005-8-30
最后登录
2011-8-25

新手上路

4# 发表于 2011-8-21 16:24 | 只看该作者 刚才又想到另一个办法测试成功
就是将adobe的配置文件里的字体换成macosx的字体
发现xelatex可以编译成功并且嵌入正确的字体

我的配置如下做参考:
  1. $ cat ctex-xecjk-adobefonts.def
  2. % ctex-xecjk-macosx-fonts.def: Mac OS X 的 xeCJK 字体设置,默认为四种华文字体,其余两种是中易字体
  3. % vim:ft=tex

  4. \setCJKmainfont[BoldFont={STHeiti},ItalicFont={STKaiti}]
  5. {STSong}
  6. \setCJKsansfont{STHeiti}
  7. \setCJKmonofont{STFangsong}

  8. \setCJKfamilyfont{zhsong}{STSong} % 华文宋体
  9. \setCJKfamilyfont{zhhei}{STHeiti} % 华文黑体
  10. \setCJKfamilyfont{zhkai}{STKaiti} % 华文楷体
  11. \setCJKfamilyfont{zhfs}{STFangsong} % 华文仿宋
  12. \setCJKfamilyfont{zhli}{LiSu} % 中易隶书
  13. \setCJKfamilyfont{zhyou}{YouYuan} % 中易幼圆

  14. \newcommand*{\songti}{\CJKfamily{zhsong}} % 宋体
  15. \newcommand*{\heiti}{\CJKfamily{zhhei}} % 黑体
  16. \newcommand*{\kaishu}{\CJKfamily{zhkai}} % 楷书
  17. \newcommand*{\fangsong}{\CJKfamily{zhfs}} % 仿宋
  18. \newcommand*{\lishu}{\CJKfamily{zhli}} % 隶书
  19. \newcommand*{\youyuan}{\CJKfamily{zhyou}} % 幼圆

  20. \endinput
复制代码我觉得只要知道是哪几个文件管理这个文件就可以自行添加了

目前发现的文件就是我第一篇帖子里相关的文件,但感觉是没有更新缓存,添加的文件不在缓存里系统不认。

TOP

milksea
  • 发短消息
  • 加为好友

milksea (减肥失败中 >_<~~)当前离线

圡人|无良吐槽水车

UID
56635
帖子
11064
精华
5
积分
11655
阅读权限
150
在线时间
1965 小时
注册时间
2007-2-22
最后登录
2011-11-8

超级版主

5# 发表于 2011-8-21 23:03 | 只看该作者 本帖最后由 milksea 于 2011-8-21 23:06 编辑

回复 3# sakulaqi


要 DIY 这样做:
  1. % myctexart.cls
  2. \ProvidesClass{myctexart}[2011/08/21 ctexart with local font setting]
  3. \LoadClass[nofonts]{ctexart}
  4. \setCJKmainfont{STSong}
复制代码
  1. \documentclass{myctexart}
  2. \begin{document}
  3. 汉字
  4. \end{document}
复制代码或者这样:
  1. % stfonts.sty
  2. \setCJKmainfont{STSong}
复制代码
  1. \documentclass[nofonts]{ctexart}
  2. \usepackage{stfonts}
  3. \begin{document}
  4. 汉字
  5. \end{document}
复制代码这样很容易做,而且完全不需要你去分析在原来的 ctex 宏包内部是怎么传递参数、怎么加载字体的。
这么简便易行,更重要的是没有任何危险的方法,为什么不愿意做,反而非要直接修改原来的代码呢?


你不是第一个这样做的人,我也不是第一次反对直接修改原来已经发布的宏包代码。
在原来的文档类上面修改,还连名字都不改,这当然是不值得提倡的。
直接修改原来的代码,如果你的源代码给其他的人用,结果不对,甚至编译错误,怎么办?
即使你的代码永远也不给别人用,但你忽然又遇到问题了,到底是你修改引入的问题还是原来的 BUG,谁来判断?如何保证?

不只是 ctex 宏包,也不止在 LaTeX 中。对于任何开源软件,无论开源协议如何,直接修改原来的代码都不是什么好主意。

如果你是 C 程序员,试想如果有人修改了 printf 的代码,在他的程序中使用了,当他把程序发给你时,你会怎么想?你会不会担心使用这个程序还会把你的系统运行环境搞得一团糟?
如果换一种方式,他发布了一个 printf 的扩展版本,比如叫 exprintf,这时你的感觉如何?是不是安心得多了?
如果他发现了 glibc 中 printf 的一个实现错误,然后将 patch 提交给 GNU 项目修改,这时你感觉如何?如果是我会非常感激的。●入门文档●网页搜索●提问事宜●
——milksea @ bbs.ctex.org

TOP

sakulaqi
  • 发短消息
  • 加为好友

sakulaqi 当前离线

UID
40907
帖子
6
精华
0
积分
7
阅读权限
10
在线时间
2 小时
注册时间
2005-8-30
最后登录
2011-8-25

新手上路

6# 发表于 2011-8-23 15:44 | 只看该作者
回复 sakulaqi


要 DIY 这样做:或者这样:这样很容易做,而且完全不需要你去分析在原来的 ctex ...
milksea 发表于 2011-8-21 23:03


版主你是不是有点过激了?
我说了我只是想搞明白机制和原理
换句话说:
1.如果我提议,让开发者给出添加字体的方法,即讲明白原理和机制,开发者会不会同意?这个是不是更简单?
2.如果我提议,而开发者不愿意去实现或不愿意去做,也不做到1,做为使用者,会不会很郁闷?

不要以为你是版主就认为自己坚持的什么事情认为是对的,我是看这里讨论环境不错又是ctex官方的论坛才来问的。

做为一个开源软件爱好者也快十年了,遇到了无数这种情况:
1.作者不更新软件不添加feature,对使用者的要求不响应不作为。我不怪愿,因为可能人家忙,或者没心。
2.作者尽量提供给使用者提示和帮助,让使用者自己patch软件。
3.如果作者觉得patch可以接受,就更新到upstream里。

我觉得2/3这才是真正的开源软件的本原,也见证无数的1的情况,同样也有无数的23的情况。

感觉在你印象中,你是用户就应该按用户的方法来做,不要来充当开发者的角色,不要尝试越权,
不要去修改源代码。

我觉得你过于将自己的形象提高了,开源界的浮躁就是你这等人搞起来的。不客观的看待处理事情而
强加自己的观点和立场,不知道对社区交流有什么好处。

TOP

suxpert
  • 发短消息
  • 加为好友

suxpert 当前离线

UID
88030
帖子
282
精华
0
积分
282
阅读权限
30
来自
Shandong
在线时间
187 小时
注册时间
2010-1-1
最后登录
2011-11-7

中级会员

7# 发表于 2011-8-23 15:55 | 只看该作者 回复 6# sakulaqi
淡定,和气生财……
我明白你想要做什么了,就是想在 CTeX 包默认的几个 def 中添加自己的 def,并且如果合适,这个 def 是可以提交到新版本中来用的,而不仅仅是自己系统上完成某一两篇排版所需要的自定义。

按照一般宏包的处理方式,新安装的宏包都需要刷新 TeX 数据库,所以猜测 def 文件应该也需要这么做……初级用户,对这些比较深的东西不太了解,抱歉~~

TOP

easior
  • 发短消息
  • 加为好友

easior 当前离线

UID
91319
帖子
66
精华
0
积分
66
阅读权限
20
在线时间
52 小时
注册时间
2010-4-22
最后登录
2011-10-11

初级会员

8# 发表于 2011-8-23 17:19 | 只看该作者 回复 7# suxpert


恭喜,你已经不是初级用户了!

TOP

suxpert
  • 发短消息
  • 加为好友

suxpert 当前离线

UID
88030
帖子
282
精华
0
积分
282
阅读权限
30
来自
Shandong
在线时间
187 小时
注册时间
2010-1-1
最后登录
2011-11-7

中级会员

9# 发表于 2011-8-23 18:50 | 只看该作者 回复 8# easior
实际上我是菜鸟~~:P

TOP

milksea
  • 发短消息
  • 加为好友

milksea (减肥失败中 >_<~~)当前离线

圡人|无良吐槽水车

UID
56635
帖子
11064
精华
5
积分
11655
阅读权限
150
在线时间
1965 小时
注册时间
2007-2-22
最后登录
2011-11-8

超级版主

10# 发表于 2011-8-23 19:36 | 只看该作者 本帖最后由 milksea 于 2011-8-23 19:42 编辑

回复 6# sakulaqi


我既没不让你提 feature request,也没不让你提交 patch。我相信 Mac OS 需要这样一个修改;如果 Linux 有统一的中文预装字体,也可以有。

你既然没有正确给源代码提交 patch 的能力,我就告诉了你:
1、可以告诉我字体,我来做修改;
2、给你了一个简便的方法,可以任何添加自己用的字体。

相关代码分散在 ctex-common-opts.def、ctex-xecjk-engine.def 等几个文件里面,内容很清楚,并没有设置什么陷阱。但我没有提高你看代码写代码能力的义务,也确实对此毫无兴趣。

回答你的两个问题:
1.如果我提议,让开发者给出添加字体的方法,即讲明白原理和机制,开发者会不会同意?这个是不是更简单?


再看一遍我前面的回复,你敢说我没有给出添加字体的方法?!我给你的方法不能用?不简单?因为和你原来想的不一样就伤害你了?

你如果非要讲清楚原来宏包参数传递的原理,正相反,这更复杂。实话说,这段代码原本没有任何原理和机制可讲,是最普通的条件判断。你看不懂,我没精力搞明白你明白哪里、不明白哪里。

没错,我就是不想手把手教你,因为教人比写文档、写代码更累,信不信由你。但你没任何立场因此说我对项目不负责。

2.如果我提议,而开发者不愿意去实现或不愿意去做,也不做到1,做为使用者,会不会很郁闷?

近一两年 ctex-kit 上大半的代码修改都是我做的,到目前为止我对 BUG report、feature request 都有求必应,暂时不能实现的也都给出了解释。

没人理你你郁闷也罢了。现在我答应你完成实现(但需要你提供信息),也给了两套更简单的代码给你,结果你郁闷了。你凭什么郁闷?我比你郁闷。●入门文档●网页搜索●提问事宜●
——milksea @ bbs.ctex.org