newcommand

使用以下命令定义一个新的命令:

\newcommand{name}[num]{definition}

name是新命令的名字,num指出新命令的参数个数,默认是0,definition是定义的内容,将来要(宏)替换LaTex文档中出现的name命令。

definition中,使用#1,#2…等代表参数。

LaTex不允许定义同一个命令多次,但提供了一个特殊的命令用来重写之前定义的命令:

\renewcommand{name}[num]{definition}

renewcommandnewcommand的用法一致。

providecommand命令与newcommand的用法一致,但如果providecommand定义的命令已经存在,LaTex会忽视新定义的命令。

在LaTex2e中,允许增加默认参数:

\newcommand{name}[num][default]{definition}

使用默认参数时,definition中的#1代表第一个默认参数。

调用命令:

name[present_default_arguments]{argument}

newenvironmet

使用以下命令定义一个新环境:

\newenvironmet{name}[num][default]{before}{after}

name是新环境的名称,num是环境的参数个数,在beforeafter中使用#1, #2…等代表形参。

使用新环境:

\begin{name}[present_default_arguments]{argument}
something
\end{name}

环境定义中的before会代替\begin{name}after会代替\end{name}

renewenvironment会重写之前定义的环境。

declare command within new environment

新命令可以定义在新的环境中,这时为了不与环境的参数混淆,命令的形参使用##1, ##2…等代替。

\newenvironmet{topics}
{ % before
\newcommand{\topic}[2]{\item{##1 / ##2\}}
Topics:
\begin{itemize}
}
{ % after
\end{itemize}
}

hook

LaTex提供了两个hooks:

  • \AtBeginDocument会执行一组命令当遇到\begin{document}
  • \AtEndDocument会执行一组命令当遇到\end{document}