mactex学习笔记(1)

原创 2015年07月09日 13:34:07

准大四狗最近在学习latex,用的是mac系统下的mactex。从饮水思源BBS上下载了学长贡献的毕业论文模板。在使用过程中遇到一些问题,问题和解决的过程记录如下。

1.缺少字体

首先测试 temptest.tex 文件(在TexShop中采用XeLaTeX模式编译),编译不通过,错误为部分..命令后没有加空格,这样会连同后面的内容一同作为命令。加上空格后编译通过,但不能显示中文,模板说明中表明需要:

• TeXGyreTermes 西文的:Regular、Italic、Bold、Bold Italic 四种 OTF 字体


• AdobeSongStd、AdobeKaitiStd、AdobeHeitiStd、 AdobeFangsongStd 四款中文字体

将字体文件名改为所需的字体名,仍然不行。观察到字体文件的内容中仍显示原来的字体信息,与文件名无关。

读 temptest.tex 与 sjtuthesis.cls 可知,上述要求的 AdobeSongStd 等字体没有显式的调用,涉及到调用 Adobe 字体的代码为:

\LoadClass[fancyhdr,fntef,UTF8,adobefonts]{ctexbook}

尝试将上述代码中的 adobefonts 改为 AdobeSongStd-Light ,编译通过并能显示中文字体,且显示的中文字体不仅为宋体、原来文件设置的页眉的楷体也能够显示。推测这里的 AdobeSongStd-Light可能仅起到一个入口的调用作用,而非设置字体为宋体。

后来查阅资料时无意中进入文件夹

/usr/local/texlive/2015/texmf-dist/tex/latex/ctex/fontset/

其中有若干设置文件,包括 ctex-fontset-adobe.def 、 ctex-fontset-mac.def 、 ctex-fontset-windows.def 等。打开 ctex-fontset-adobe.def 文件。发现其中涉及到的 Adobe 字体名为 AdobeSongStd-Light、AdobeKaitiStd-Regular、AdobeHeitiStd-Regular、AdobeFangsongStd-Regular, 即最近版本使用的 Adobe 字体。于是不再尝试安装旧的 Adobe 字体,而是将调用的代码中的 adobefonts 改为 adobe ,再次编译,能够正常显示各种设定字体。

2.未定义命令 \sjtuspace..

接着测试 diss.tex 文件,编译报错,错误信息为

Undefined control sequence \sjtuspace ->\protect \CTEX@spaceChar\protect \CTEX@spaceChar

查找错误位置, sjtuthesis.cls 文件中

\newcommand\sjtuspace{\protect\CTEX@spaceChar\protect\CTEX@spaceChar}

一行报错。

查阅资料,在 bbs.ctex 上有人问了类似的问题,引用回答如下

===============================回答部分===============================
这是 ctex 宏包的 Bug,以前没有显现出来,fontspec 2.4 版本以后显现出来了。

暂时的解决办法,在 \documentclass 的前面写:

\expandafter\def\csname CTEX@spaceChar\endcsname{\hspace{1em}}

我们会尽快上传一个 ctex 宏包的新版本处理此问题。因为准备在今年转向完全重写的 ctex 宏包 2.0,所以以前的 1.x 的 ctex 宏包一直没有上传过更新。

进一步技术细节:
ctex 包中设置中文字体的命令要早于 \CTEX@spaceChar 的定义。而可能使用 \CTEX@spaceChar 的宏 \CTEXsetfont 则在 \CTEX@spaceChar 之前定义。

因为在线安装,用的是最新的 fontspec 2.4 版本。而 fontspec 改变了内部实现,需要在定义字体时设置字号,触发 \CTEXsetfont,造成问题。

====================================================================

故在 diss.tex 文件 \documentclass 之前加入一行代码

\expandafter\def\csname CTEX@spaceChar\endcsname{\hspace{1em}}

编译通过。

3.粗体

对比生成的 diss.pdf 与参考文档 readme.pdf ,发现 readme.pdf 中黑体的部分在 diss.pdf 中为粗体的 Adobe 宋体。读 ctex-fontset-adobe.def 文件,粗体的部分应由黑体替换。但在文档中 \bf 命令没有自动将粗体替换为黑体。

两种简单的处理方法:

\renewcommand{\bf}{\heiti}

• 在要使用黑体的地方用命令 \heiti

前一种方法改变了\bf 的定义,不建议使用;后一种方法每次要设置字体,不够友好。

考虑到是 ctex-fontset-adobe.def 文件中定义粗体的部分没有起作用,在 sjtuthesis.cfg 中自行定义如下:

\setCJKmainfont
      [
       BoldFont = AdobeHeitiStd-Regular ,
        ItalicFont = AdobeKaitiStd-Regular
      ] {AdobeSongStd-Light}

生成的 pdf 文件中粗体能够良好显示为 Adobe 黑体。

在Mac OS X下搭建Latex编辑环境

在这里分享一下如何在Mac下搭建Latex编辑环境的方法首先当然是Google Mac Latex寻找已有的Blog教程,然后发现Mac上常用Sublime Text来编辑,因此搜索Mac subli...

javascript学习笔记1

  • 2017年07月29日 20:16
  • 2KB
  • 下载

react native学习笔记19——常用API(1)Dimensions、PixelRatio获取屏幕宽高及单位换算

Dimensions在React Native中通常使用Dimensions获取屏幕宽高。Dimensions的方法Dimensions的使用很简单,它只提供了两个方法: static set(dim...

机器学习笔记Week1

  • 2017年06月08日 10:52
  • 206KB
  • 下载

rmi学习笔记(1)

  • 2015年09月07日 18:46
  • 51KB
  • 下载

Scala学习笔记之 --- Array、ArrayBuffer以及遍历数组(1)

Array在Scala中,Array代表的含义与Java中类似,也是长度不可改变的数组。此外,由于Scala与Java都是运行在JVM中,双方可以互相调用,因此Scala数组的底层实际上是Java数组...

[Eclipse插件开发学习笔记].part1

  • 2015年09月22日 22:47
  • 50MB
  • 下载

Spring4.X学习笔记1

  • 2017年08月22日 10:09
  • 40MB
  • 下载

学习笔记:信息检索(1) 布尔检索

布尔检索,构建简单,或许是构建IR系统的一种最简单方式。在30多年中是最主要的检索工具。当前许多搜索系统仍然使用布尔检索模型:电子邮件、文献编目、Mac OS X Spotlight工具。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mactex学习笔记(1)
举报原因:
原因补充:

(最多只允许输入30个字)