#LaTeX文件基本设定#
###文件目录组成###
排版文件文件名为"xxx.tex",但是这个是一个没有提前设定格式的文件;提前设定好的格式文件是"xxx.cls",由此可以自己预先编辑一个学校的要求的论文模板,然后自己可以任意增加"xxx.tex"文件而不需要再编辑格式;使用latex、xelatex、pdflatex三个命令可以获得一个"xxx.pdf"文件。
上面是常用的文件,之后有一些中间生成的文件,可以不需要。如"xxx.aux"、“xxx.log”、"xxx.out"文件,甚至还有"xxx.synctex.gz"压缩包(gzip压缩包使用7zip可以打开,里面可能是"xxx.synctex"文件。
下面来谈谈LaTeX安装目录里面的文件,按照目录介绍。
首先是最重要的C:\texlive\2019\bin\win32(linux下没有win32,反正都在bin里面)。里面主要有两种文件,“xxx.exe”,这是可以执行的软件,用来编译之类的;“xxx.dll”,给Windows用的动态库。另外一种文件"xxx.mem",是加密的存储文件。这个软件不同的系统有不同的文件内容,但是基本的执行命令的软件不会变。比如我们需要配置TeXStudio软件的命令,这个时候如果系统找不到软件,可以自己在bin这个目录下找到pdfLatex(省略后缀)这一类文件。
其次是texlive\2019\texmf-dist目录(一般而言,dist都是资源池,里面有很多软件使用的数据资源)。里面最多的是"xxx.sty"文件,而且极其庞大。资源管理器显示为“170,728 个文件,13,087 个文件夹”,大小为“5.47 GB (5,883,392,000 字节)”。里面是LaTeX的核心,都是宏文件,但是里面有一些python之类的少数文件,不影响主体,大都是布局之类的。复制一文件内容(a4wide.sty)如下(由于某些原因暂时替换成了图片):
下面会给出具体的内容解释。此外还有一些奇奇怪怪的目录或文件就不在讨论范围。
###sty文件详解###
######文件详情######
这是LaTeX排版的一些宏,就是预定义的命令和格式,比如该用什么页面字体之类的,不仅如此还有一些强大的绘图包也是这个类型的文件,如tikz,gnuplot,不用担心这些包不会使用,在镜像上有大量的使用手册免费下载都是极好的学习资料。当然了,也可以在控制台输入命令获取对应的使用手册。
texdoc tikz
以上命令tikz是可以替换内容,换成你已知的宏即可,当然了,由于也不可能迅速得知有哪些宏,所以我会在文章附录添加常用的宏。
其次自定义自己常用的宏和设置为一个完整的宏也是不错的做法,用于提高效率。其有相应的语法规则,比较简单的语法规则很容易编写文件,主要是类似于C语言的头文件和相应的宏而已,可以大幅降低重复的代码出现在你的tex文档里面。
######编写规则######
除去注释外有用的部分为:
\ProvidesPackage{你自己编写的包名}
\RequirePackage[支持的参数]{你需要引用的包名}
\newcommand{自定义的命令}
\newenvironment{自定义的环境}
另外和脚本语言shell很像,所以掌握不会太难。此介绍大量具体内容被省略,所以仅用于了解,在之后的内容中会着重介绍。
###cls文件详解###
######文件详情######
这是LaTeX的类文件,和宏不同的是,将一整个结构全部编写完成,使用者只需要填写内容即可。这个文件可以将上面的sty文件内容包含进来,于是就完完全全成为了一个模板,使用者的文字内容被放入一个一个制定好的格子里,格子的宽度、高度、颜色、数量以及必要的文字说明全部制定好了,使用者轻轻松松就将文章排版得极其美观。
######编写规则######
除去注释外有用的部分:
\ProvidesClass{}
\LoadClass[]{}
\DeclareOption{}
实际上几乎就是一个完整的文件编写内容。只不过正文被省略。
###tex文件详解###
######文件详情######
tex可以是我们分享给他人的文件,包含了大量标签,其实就是一种标签语言,可以认为是html一类语言,但是同时有自己的命令。对git的支持比较好,因为格式被作为了字符文件的一部分。tex文件会比pdf和docx文件要小很多,可以用来转成多种形式,如html,这种实时编译的文件便于存储和更改,传输更不用说。
######编写规则######
使用反斜线的命令或者标签,有一些字符用于分隔和组成命令。其次就是空行和内容了。
###编写第一个tex文件###
代码为:
\documentclass{article}
\usepackage{xeCJK}
\begin{document}
你好!\LaTeX\ 世界
\end{document}
保存为你喜欢的文件名。注意在该文件目录下打开powershell,(方法:点击【右shift】+【鼠标右键】,点击菜单里面的【在此处打开Powershell窗口】,使用xelatex+文件名就完成了编译工作,可以用pdf阅读软件(例如浏览器)打开这个目录下的同文件名后缀是pdf的文件。这里是我的文件库存放在gitea上,这里是我的pdf文件。任何一个tex的集成编译器都不过是在这一个过程加以自动化。这时候我们还可以将这个目录上传到git平台存放,便于版本控制。git的基本用法会在某篇文章详细解释。
这里给出这个文件的解释。第一行是只能放第一行(不考虑注释),因为他规定了这个文件的属性,或者称为文件。这个命令当然也只能用一次。
\documentclass[该文件类的属性参数]{文件类}
其中文件类可以使用article,report,book,letter,这些文档类都是来源于互联网,可能会准确一点。不过这些解释都是帮助你在写作前确定自己写作格式,然后选择一个贴切的文档类。不同的文档类可能有相同的元素,当然也有不同的排版规则。
\usepackage{sty文件的文件名,不包含后缀}
这是使用宏的命令,使用的宏必须是镜像或者镜像源的宏或自己编写的文档类,如果是自己编写的文档类需要拷贝一份cls文件到这个tex文件目录下。
\begin{环境}....\end{环境}
这是将一部分文字放入某一环境中(环境指的是文字所处的某些特定的属性区域,可能有助于表现其元素特性,比如目录元素可能就有目录环境,正文元素有正文环境)
\LaTeX \TeX \XeLaTeX \LaTeXe
这是品牌文字,给这一些和TeX排版有关的字符定制的字符块。当然还有AmS。
\spaceback
这是插入一个空格,因为LaTeX省心的设计(不论你在编写的时候不小心加了多少无关紧要的空格空行,排版系统都会忽视一定错误)这就是你不需要关心排版问题,只关注内容。
###编写第一个sty文件###
代码为:
\def\filename{nihk.sty}
\def\fileversion{0.1}
\def\filedate{2020/07/01}
\newbox\authorbox@
\def\author#1\endauthor
\def\abstract
\if
.....
\fi
这几个文件相当复杂,于是我编写一个简单的如下(极其简单,帮助理解这个文件的目的):
filename:usetikz.sty
filecontent:
\usepackage{tikz}
结束,只有一行,但是引用也很简单。(在同一目录下,或者使用绝对地址)
\documentclass{article}
\usepackage{xeCJK}
\usepackage{usetikz}
\begin{document}
你 好!\LaTeX\ 世 界\TeX
\begin{tikzpicture}
\node(A) at (0,0) {A};
\node(B) at (1,0) {B};
\node(C) at (1,5) {C};
\draw (A) --(B) --(C) --(A);
\end{tikzpicture}
\end{document}
为了检验是否article自带了这几个命令,于是注释掉某一行。如下:
\documentclass{article}
\usepackage{xeCJK}
%%\usepackage{usetikz}
\begin{document}
你 好!\LaTeX\ 世 界\TeX
\begin{tikzpicture}
\node(A) at (0,0) {A};
\node(B) at (1,0) {B};
\node(C) at (1,5) {C};
\draw (A) --(B) --(C) --(A);
\end{tikzpicture}
\end{document}
然后运行就会报错。所以确实发挥了作用。于是得到结论:tex和sty是同一种文件的不同后缀名,sty将你需要复用的格式代码放进sty文件里面,下次使用甚至可以放入一个镜像的目录下打包成另一个镜像文件,下次就直接被定制化了。
tikz不会使用不要紧,因为我只是举个例子,这个画图包又太出名了。之后我会将几大绘图包一一介绍。
###第一个cls文件###
代码如下:
\NeedsTeXFormat{LaTeX2e}[1996/06/01]
\ProvidesClass{yaletter}[2017/01/01 v1.1 Yet Another Letter Class]
\RequirePackage{xkeyval}
\pagenumbering{arabic}
\newdimen\ya@lftmarg\ya@lftmarg=0.5in
\paperheight=\the\pdfpageheight
\paperwidth=\the\pdfpagewidth
\newdimen\ya@pageheight\ya@pageheight=\the\paperheight
\newdimen\ya@pagewidth\ya@pagewidth=\the\paperwidth
\marginparwidth=0pt
\marginparpush=0pt
\topmargin=0pt
\headheight=12pt
\headsep=12pt
\footskip=24pt
\marginparsep=0pt
\newdimen\ya@headheight\ya@headheight=\the\headheight
\newdimen\ya@headsep\ya@headsep=\the\headsep
\newdimen\ya@footskip\ya@footskip=\the\footskip
\oddsidemargin=0pt
\newdimen\ya@oddsidemargin\ya@oddsidemargin=\the\oddsidemargin
\newdimen\ya@headwidth\ya@headwidth=0pt
\def\ya@headrulewidth{0.4pt}
\def\ya@footrulewidth{0.4pt}
\newdimen\ya@predate\ya@predate=12pt
很明显,这是一个copy来的文件,同样因为这个文件过于复杂,所以我编写一个极其简单的:
filename:nihk.cls
fileconnect:
\ProvidesClass{nihk}
\RequirePackage{xeCJK,usetikz}
\headheight=50pt
filename:nihk.tex
fileconnect:
\documentclass{nihk}
\begin{document}
你 好!\LaTeX\ 世 界\TeX
\begin{tikzpicture}
\node(A) at (0,0) {A};
\node(B) at (1,0) {B};
\node(C) at (1,5) {C};
\draw (A) --(B) --(C) --(A);
\end{tikzpicture}
\end{document}
于是,无法编译,报错为:
! LaTeX Error: The font size command \normalsize is not defined:
there is probably something wrong with the class file.
于是,我加上这个命令,变成了:
\ProvidesClass{nihk}
\RequirePackage{xeCJK,usetikz}
\renewcommand{\normalsize}{\fontsize{10pt}{12pt}\selectfont}
\headheight=12pt
我以为有用,然而并不那么简单,果然还是这样的报错,应该是我理解错了,报错说的是没有定义这个命令(却使用了这个命令)。但是我不知道怎么定义,于是果然自己现在只能使用现有的article.cls这个文件,但是可以看一看这个文件的源码。644行代码,毫无疑问没有办法在此处放置。但是大致的命令是:
\DeclareOption{a4paper}
{\setlength\paperheight {297mm}%
\setlength\paperwidth {210mm}}
\renewcommand\thesubsubsection{\thesubsection.\@arabic\c@subsubsection}
\renewcommand\theparagraph {\thesubsubsection.\@arabic\c@paragraph}
这两种命令占主要,分别用于定义某一环境或环境的参数和定义一个命令。
###总结###
整个庞大的排版系统文件目录树极其清晰,另外官网有其目录树的介绍。所以我们可以轻松去排版系统中查看各种文件,并且通过观察各种文件的特点总结出编写规则。但是如果提前学习了使用手册就可以避免犯错尝试,因人而异。
cls文件尽量使用官方提供的,sty则是个人风格定制使用的文件,tex主要用于存放文字尽量不要出现过多的格式显示,否则会显得杂乱无章。这样就可以很容易高效地使用LaTeX编写文档。