LaTeX002

#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)如下(由于某些原因暂时替换成了图片):

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编写文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值