读懂LaTeX中cls文件

cls文件都以

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{selfbook}[2019/11/11 v0.1 Book Template for Self Use]
\LoadClass{ctexbook}
\RequirePackage{titlesec}

这几行代码开始,其中第一行指定了LaTeX编译器的版本需求。告诉了编译器这个宏包或者说类文件是属于哪个版本的。本文中宏包和类都指.cls文件。

第二行指出了这个宏包的版本修改日期,日期格式必须是代码中所示的那样。\ProvidesClass命令的第一个参数就是cls文件的名字,两个必须一致;第二个参数是可选的,如果给出了第二个参数,则编译器会检查文档所引用的类文件,如果引用的不是最新版本会给出警告,但是一般文档中也不会指出具体的日期,所以作用不大。

第三行给出了该类所继承的父类,一般宏包都是依托于其他宏包编写的。这里给出依托的其他类名,这样我们没有设置格式的其他文章结构都会使用父类默认的格式。

第四行\RequirePackage命令指出该类需要使用的其他宏包,这个宏包和第三行的宏包不太一样,这里的宏包提供了设置格式的功能,第三行的宏包一般是给出了各种设置的格式,如chapter、section等的格式。此外,\RequirePackage保证引用的宏包只被引入一次,类似于C++中的#pragma once。

之后的cls文件中,一般是各种格式的定义。这里记录比较困惑的常见命令格式:

  1. \makeatletter & \makeatother
    这两条命令括起来的内容中,@符号是一个普通的字符,不需要转义或者进行其他处理,就和a~z等其他字符一样。这是为了处理一些含有@符号的命令而设计的。

  2. \@ifstar
    这条命令是为了处理命令中含有*的命令而设计的。例如

    \newcommand{\mycmd}{\@ifstar{\mycmd@star}{\mycmd@nostar}}
    \newcommand{\mycmd@nostar}[nostar-num-args]{nostar-body}
    \newcommand{\mycmd@star}[star-num-args]{star-body}

    定义了\mycmd和\mycmd*两个命令,当使用\mycmd时,相当于调用了\mycmd@nostar命令,而使用\mycmd*时,相当于调用了\mycmd@star命令,当然,代码中的\mycmd、\mycmd@nostar、\mycmd@star等命令名称可以自己任意取,当似乎用@符号时,需要使用1中的两条命令包起来。

  3. glossaries宏包使用
    如果文档中有缩写表、符号表或者术语表的编写需要,可以使用nomencl、glossary、glossaries这三个宏包,其中前两个宏包比较简单,易于使用,但是功能也少,glossaries宏包功能丰富,使用起来也更复杂。

    \documentclass{ctexbook}
    \usepackage{glossaries}       % 引入glossaries宏包
    \makeglossaries               % 引入*.glo文件
    \newglossaryentry{tm}{        % 新建缩写表项name={Turing machine},      % 缩写的展开名,可以使用其他命令以设置格式,如加粗、斜体等description={A model of a machine that computes.  The model is simplebut can compute anything any existing device can compute.It is the standard model used in Computer Science.},}
    \begin{document}
    Everything begins with the definition of a \gls{tm}.  ...
    \printglossaries              % 缩写表将打印在这个位置
    \end{document}

    上面代码是使用glossaries宏包的一个最简单的例子。在TeXstudio中新建文件,粘贴进这些代码,保存为任意的.tex文件,分别按F5(编译)、F9(调用makeglossaries.exe)、F5(再次构建并预览)即可看到运行得到的pdf文件。我主要编写中文文档,构建使用的是XeLaTeX,需要在texstudio中Options->Build中将Default Compiler更改为XeLaTeX。运行中可能遇到没有perl解释器的问题,报错信息为makeglossaries.exe: The Perl interpreter could not be found.。需要搜索perl,去其官网下载perl解释器并安装。我下载的是ActivePerl-5.28.1.0000-MSWin32-x64-432e1938.msi文件,其他操作系统安装相应版本即可。此外,我测试了安装CTeX-2.9.2.164_Full.exe版本的ctex,当运行makeglossaries.exe时,会提示一大堆警告,大致是说makeglossaries使用了过时的perl语法,但是编译结果是正确的。如果对一大堆警告不爽,可以安装texlive2019.iso(win7 安装texlive2019.iso时可以解压后运行install-tl_windows.bat文件,但必须是管理员身份运行,否则安装会报错。),其对应的makeglossaries版本为4.41,本人测试,没有任何问题,完美输出。如下图:

  4. \graphicx
    图片处理功能需要的宏包,在texlive2019版本中,图片名中含有中文时导致不识别,报错信息为File `figures/inter中‘ not found. Font shape `TU/STXingkai(0)/bx/n undefined(Font)。实际上图片是存在的,字体也是存在的,将图片中的中文字符删掉重新编译就会正常输出,怀疑可能与编码有关系。另外使用CTeX-2.9.2.164_Full.exe安装的latex版本,图片中含有中文字符可以正常输出。CTeX是TeX的中文套装,包含了中文文档编写的工具及配置,对中文支持比较好,但网上搜索到的版本很老,估计很久没更新了。而texlive怎么配置使其正常支持中文文件名,目前没搜到好的解决方案,如果有人知道,求教。网络上有很多人说有图片但提示图片找不到,可以看看图片路径或名称中是否有中文。

读懂LaTeX中cls文件相关推荐

  1. 一文读懂Java中File类、字节流、字符流、转换流

    一文读懂Java中File类.字节流.字符流.转换流 第一章 递归:File类: 1.1:概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. ...

  2. 一文读懂SpringBoot中的事件机制

    一文读懂SpringBoot中的事件机制?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法. 要"监听"事件,我们总是 ...

  3. 前端面试必会 | 一文读懂 JavaScript 中的 this 关键字

    this 是一个令无数 JavaScript 编程者又爱又恨的知识点.它的重要性毋庸置疑,然而真正想掌握它却并非易事.希望本文可以帮助大家理解 this. JavaScript 中的 this Jav ...

  4. 如何读懂网页中的源代码?

    要读懂网页中的源代码,需要了解 HTML.CSS 和 JavaScript 等相关技术. HTML:网页的结构和内容都是由 HTML 代码构建的,因此要读懂网页,需要先了解 HTML.可以通过学习 H ...

  5. 一文读懂信息安全中的恶意代码、病毒、木马、蠕虫......

    一文读懂信息安全中的恶意代码.病毒.木马.蠕虫...... 病毒:破坏计算机功能或数据,以破坏为主,传染其他程序的方式是通过修改其他程序来把自身或其变种复制进去完成的,典型的熊猫烧香 蠕虫:通过网络的 ...

  6. 一文读懂机器学习中的模型偏差

    一文读懂机器学习中的模型偏差 http://blog.sina.com.cn/s/blog_cfa68e330102yz2c.html 在人工智能(AI)和机器学习(ML)领域,将预测模型参与决策过程 ...

  7. java中date类型如何赋值_一文读懂java中的Reference和引用类型

    简介 java中有值类型也有引用类型,引用类型一般是针对于java中对象来说的,今天介绍一下java中的引用类型.java为引用类型专门定义了一个类叫做Reference.Reference是跟jav ...

  8. 一文读懂密码学中的证书

    一文读懂密码学中的证书 之前的文章中,我们讲到了数字签名,数字签名的作用就是防止篡改和伪装,并且能够防止否认.但是要正确运用数字签名技术还有一个非常大的前提,那就是用来验证签名的公钥必须真正的属于发送 ...

  9. 读懂python中的self

    读懂python中的self 链接https://blog.csdn.net/xrinosvip/article/details/89647884

  10. 带你一文读懂Javascript中ES6的Symbol

    带你一文读懂Javascript中ES6的Symbol 前言 基础类型 Symbol Symbol.for 与 Symbol.keyFor Symbol.iterator Symbol.search ...

最新文章

  1. luogu P4258 [WC2016]挑战NPC(一般图的最大匹配,带花树,建图、拆点技巧)
  2. Softmax回归——logistic回归模型在多分类问题上的推广
  3. MYSQL:1045Access denied for user 'root'@'localhost
  4. @mapperscan mapper还是无法引用_高能来了!Java的四大引用
  5. 如何查看开发者账号何时到期
  6. 一步一步学Silverlight 2系列(12):数据与通信之WebClient
  7. 蓝桥杯java第四届决赛第一题--猜灯谜
  8. kotlin学习之基础(一)
  9. BP: 通过SAP name拿到central person id
  10. python网络爬虫系列(七)——selenium的介绍 selenium定位获取标签对象并提取数据 selenium的其它使用方法
  11. Git相关命令及用法
  12. ue4cmd怎么调用_虚幻引擎UE4-命令行使用的一些详细技巧
  13. 《Hadoop MapReduce实战手册》一1.10 使用MapReduce监控UI
  14. Mysql--mysqldump命令 备份数据库
  15. 网页中返回顶部代码及注释说明
  16. linux创建deamon
  17. FTP内网穿透 报错 200 227 451 注意事项
  18. 随意切换双卡流量,立即获取对应卡的SMIS
  19. 采用GlodWave软件制作个性化铃声
  20. [附源码]Java计算机毕业设计SSM个人人际关系管理软件

热门文章

  1. JNCIS-FWV Study Guide v1.3
  2. 使用promise解决回调地狱_Promise 技术调研 - 回调地狱的产生原因与解决方式
  3. 立波 iphone3gs越狱教程:成功把iphone3gs手机升级成ios6.1.3系统,完美越狱,解决no service和耗电量大的问题...
  4. linux怎么停止ping命令
  5. 中国十大软件测试网站
  6. matlab counter是什么意思,counter-propagating是什么意思
  7. 记录极致cms百度编辑器修改上传图片大小限制
  8. 古琴十大名曲——唐畅古琴
  9. html5 游戏ui设计,7款手机游戏UI界面设计欣赏
  10. digit计算机语言,计算机英语:BASIC语言入门