高级特性
本章介绍 LaTeX 的高级特性,包括自定义命令、宏包开发等内容。
自定义命令
newcommand
定义新命令:
\newcommand{\R}{\mathbb{R}}
\newcommand{\N}{\mathbb{N}}
实数集 $\R$,自然数集 $\N$。
带参数的命令
\newcommand{\abs}[1]{\left| #1 \right|}
$\abs{x}$
$\abs{\frac{a}{b}}$
带可选参数的命令
\newcommand{\set}[2][]{\{#2 \mid #1\}}
$\set{x}$ % {x}
$\set[x>0]{x}$ % {x | x>0}
renewcommand
重定义命令:
\renewcommand{\thesection}{\Roman{section}}
providecommand
仅在命令不存在时定义:
\providecommand{\R}{\mathbb{R}}
自定义环境
newenvironment
\newenvironment{important}
{\begin{quote}\bfseries}
{\end{quote}}
\begin{important}
这是重要内容。
\end{important}
带参数的环境
\newenvironment{boxed}[1]
{\begin{center}\fbox{\begin{minipage}{#1}}
{\end{minipage}\end{center}}
\begin{boxed}{5cm}
这是一个带边框的内容。
\end{boxed}
计数器
内置计数器
page % 页码
section % 节
subsection % 小节
figure % 图
table % 表
equation % 公式
footnote % 脚注
计数器操作
\setcounter{section}{0} % 设置值
\addtocounter{section}{1} % 增加值
\stepcounter{section} % 增加1
\refstepcounter{section} % 增加1并设置引用标签
\value{section} % 获取值
\thesection % 显示值
自定义计数器
\newcounter{mycounter}
\setcounter{mycounter}{0}
\stepcounter{mycounter}
\themycounter
计数器格式
\arabic{counter} % 阿拉伯数字:1, 2, 3
\roman{counter} % 小写罗马数字:i, ii, iii
\Roman{counter} % 大写罗马数字:I, II, III
\alph{counter} % 小写字母:a, b, c
\Alph{counter} % 大写字母:A, B, C
\fnsymbol{counter} % 符号:*, †, ‡
长度
内置长度
\textwidth % 文本宽度
\textheight % 文本高度
\linewidth % 当前行宽度
\parindent % 段落缩进
\parskip % 段落间距
\baselineskip % 行距
长度操作
\setlength{\parindent}{2em}
\addtolength{\parindent}{1em}
\settowidth{\parindent}{示例文本}
\settoheight{\parindent}{示例文本}
\settodepth{\parindent{示例文本}
自定义长度
\newlength{\mylength}
\setlength{\mylength}{5cm}
条件判断
ifthen 宏包
\usepackage{ifthen}
\ifthenelse{\equal{a}{a}}{相等}{不相等}
\ifthenelse{\isodd{3}}{奇数}{偶数}
\ifthenelse{\lengthtest{\parindent > 0pt}}{有缩进}{无缩进}
etoolbox 宏包
\usepackage{etoolbox}
\ifnum\value{section}>0
大于0
\else
不大于0
\fi
\ifdim\textwidth>10cm
宽文本
\else
窄文本
\fi
循环
loop 宏包
\usepackage{loop}
\loop{5}{\arabic{count} }
手动循环
\newcount\mycount
\mycount=0
\loop
\advance\mycount by 1
\the\mycount,
\ifnum\mycount<10
\repeat
宏包开发
基本结构
创建 .sty 文件:
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{mypackage}[2024/01/01 My Package]
% 宏包内容
\newcommand{\mycommand}{...}
\endinput
宏包选项
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{mypackage}[2024/01/01 My Package]
\newif\if@option
\@optionfalse
\DeclareOption{option}{\@optiontrue}
\ProcessOptions
\if@option
% 选项开启时的代码
\fi
\endinput
加载其他宏包
\RequirePackage{amsmath}
\RequirePackage{graphicx}
文档类开发
基本结构
创建 .cls 文件:
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myclass}[2024/01/01 My Class]
\LoadClass{article}
% 类内容
\RequirePackage{amsmath}
\RequirePackage{graphicx}
\endinput
类选项
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myclass}[2024/01/01 My Class]
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions
\LoadClass{article}
\endinput
钩子
LaTeX 钩子
\AtBeginDocument{文档开始时执行}
\AtEndDocument{文档结束时执行}
\AtBeginSection{节开始时执行}
\AtEndSection{节结束时执行}
etoolbox 钩子
\usepackage{etoolbox}
\AtBeginEnvironment{quote}{\itshape}
\AtEndEnvironment{quote}{\upshape}
\BeforeBeginEnvironment{quote}{\par\noindent}
\AfterEndEnvironment{quote}{\par}
错误处理
错误消息
\PackageError{mypackage}{错误描述}{帮助信息}
\PackageWarning{mypackage}{警告信息}
\PackageInfo{mypackage}{信息}
检查命令是否存在
\@ifundefined{mycommand}
{\newcommand{\mycommand}{...}}
{\renewcommand{\mycommand}{...}}
调试
显示信息
\show\mycommand % 显示命令定义
\showthe\textwidth % 显示长度值
\typeout{信息} % 输出到日志
调试模式
\tracingmacros=1 % 跟踪宏展开
\tracingcommands=1 % 跟踪命令
\tracingall % 跟踪所有
示例
自定义定理样式
\usepackage{amsthm}
\newtheoremstyle{mytheorem}
{10pt} % 上方间距
{10pt} % 下方间距
{\itshape} % 正文字体
{} % 缩进
{\bfseries} % 标题字体
{.} % 标题后标点
{ } % 标题后间距
{\thmname{#1}\thmnumber{ #2}\thmnote{ (#3)}}
\theoremstyle{mytheorem}
\newtheorem{mythm}{定理}
自定义列表
\usepackage{enumitem}
\newlist{steps}{enumerate}{1}
\setlist[steps,1]{label=Step \arabic*:}
\begin{steps}
\item 第一步
\item 第二步
\end{steps}
小结
本章介绍了 LaTeX 高级特性:
- 自定义命令:newcommand、renewcommand
- 自定义环境:newenvironment
- 计数器:操作和格式
- 长度:内置长度和自定义长度
- 条件判断:ifthen 和 etoolbox
- 宏包开发:创建 .sty 文件
- 文档类开发:创建 .cls 文件
- 钩子:AtBeginDocument 等
- 错误处理和调试
掌握高级特性可以创建可复用的 LaTeX 组件。下一章将介绍中文文档。