mactex学习笔记(1)

准大四狗最近在学习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 黑体。

你可能感兴趣的:(mactex学习笔记)