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