\documentclass{article}
\usepackage{ctex}
%
% \newcommand用于定义一个命令
% 命令只能由字母组成,不能以\end开头
% \newcommand<命令>[参数个数][首参数默认值]{具体定义}
\newcommand\PRC{People's Republic of \emph{China}}
% 这里的\newcommand相当于一个简单的字符串替换,使用\PRC就相当于{}里面的内容
% 参数个数最多是9个,可用1到9表示,使用时用#1,#2,……,#9表示
% \newcommand可以有默认值,但只能为第1个参数(i.e., #1)指定默认值;如使用时想为#1提供实际参数,则需要用[]指定
\newcommand\loves[2]{#1 喜欢 #2}
\newcommand\hatedby[2]{#2 不受 #1 喜欢}
\newcommand\love[3][喜欢]{#2 #1 #3}
%
% \renewcommand<命令>[参数个数][首参数默认值]{具体定义}
% 与newcommand完全一致,但只能作用于已有的命令
\renewcommand\abstractname{内容简介}
% 该命令可被abstract环境自动使用
%
% 定义和重新定义环境
% \newenvironment{环境名称}[参数个数][首参数默认值]{环境前定义}{环境后定义}
% \renewenvironment{环境名称}[参数个数][首参数默认值]{环境前定义}{环境后定义}
% 为book类中定义摘票(abstract)环境
\newenvironment{myabstract}[1][摘要]%
{\small
\begin{center}\bfseries #1\end{center}%
\begin{quotation}}%
{\end{quotation}}
% 第一行:该环境有1个可选参数,其默认值为摘要
% 第二行:用\small命令设定环境前定义中的字号,并指定#1参数的排版方式(center)
% 第三行:用\begin命令开始quotation环境
% 第四行:用\end命令结束quotation环境
%
% \newcommand和\newenvironment的嵌套使用
% 环境参数只有<环境前定义>中可以使用参数
% <环境后定义>中不能再使用环境参数
% 如果需要,可以先把前面得到的参数保存在一个命令中,在后面使用:
\newenvironment{Quotation}[1]%
{\newcommand\quotesource{#1}%
\begin{quotation}}%
{\par\hfi11---《\textit{\quotesource}》%
\end{quotation}}
\begin{document}
\PRC
\loves{猫儿}{鱼}
\hatedby{猫儿}{萝卜}
\loves[最爱]{猫儿}{鱼}
% 此处猫儿对应#2,鱼对应#3,#1默认值是喜欢,方括号中最爱取代了默认值
\begin{abstract}
这是一段摘要……
\end{abstract}
\begin{myabstract}[我的摘要]
这是一段自定义格式的摘要
\end{myabstract}
\begin{Quotation}{易$\cdot$乾}
初九,潜龙勿用。
\end{Quotation}
\end{document}



定义命令和环境是进行\LaTex{}格式定制、达成内容与格式分离目标的利器。
使用自定义的命令和环境把字体、字号、缩进、对齐、间距等各种琐细的内容包装起来,赋以一个有意义的名字,可以使文挡结构清晰、代码整洁、易于维护。在使用宏定义的功能时,要综合利用各种已有的命令、环境、变量等功能。
事实上,前面所介绍的长度变量与盒子、字体字号等内容,大多并不直接出现在文档正文中,而主要都是用在实现各种结构化的宏定义里。