LaTeX中定义新命令和环境

简介: LaTeX中定义新命令和环境

LaTeX中定义新命令和环境

这一讲中,我们主要讨论LaTeX中命令和环境的定义与重定义的方法。

一般都在导言区进行命令的定义和重定义。

一、newcommand命令

newcommand用于定义一个命令,需要指定新定义的命令的名称,参数个数,默认参数值,以及具体定义。

1、简单字符串替换

例如,

定义一个不带参数的PRC命令(PRC是自己取的)。

设该命令的具体定义是“People's Republic of China”(具体定义是根据自己的需要写哒),并对“China”执行emphasize 强调命令。

image-20220211102029385

这个命令实际上是一个简单的字符串替换命令。

定义好了之后,我们就可以在正文区使用PRC这个命令。

直接在正文区写上“\PRC”即可引用此命令。

image-20220211104513069

编译并查看结果:

image-20220211104559312

显然,只需要修改PRC命令的定义,就可以修改排版结果。

而在正文区,只需要使用PRC命令,并不需要做出任何修改。

这就是LaTeX排版中内容与格式分离的基本思想。

2、指定参数

我们也可以为newcommand命令定义的新命令指定参数。

参数个数最多是9个。用1~9来表示。

用诸如#1,#2,...,#9的方式使用各参数。

例如:

#1表示第一个参数,用#2表示第二个参数。

(1)第一个例子,如图:

image-20220211105413218

在正文区,使用定义的新命令。

image-20220211105745435

编译运行查看结果:

image-20220211105838111

(2)第二个例子,如图:

image-20220211110027921

在正文区,使用定义的新命令。

image-20220211110354704

编译运行查看结果:

image-20220211110419558

如果定义的命令需要参数,则使用该命令时需要为其提供必要的参数。

例如,在loves命令中,“猫儿”对应“#1”参数,“鱼”对应“#2”参数。

在hatedby命令中,“猫儿”对应“#1”参数,“萝卜”对应“#2”参数。

3、指定参数默认值

还可以为newcommand命令定义的命令的参数指定默认值。

注意,只能为第一个参数指定默认值

此时第一个参数称为该命令的可选参数。

在使用该命令时,如果需要为第一个参数提供实际参数,则该参数需要用方括号指定。

例如,

定义一个新命令love,有三个参数,第一个参数默认值是“喜欢”,接下来是该命令的具体定义。

image-20220211111420351

可以用不同的方式使用该命令。

image-20220211111647351

查看结果:

image-20220211111845499

解释:

(1)在love的第一种使用方式中,只提供了两个参数。此处的“猫儿”对应“#2”参数,“鱼”对应“#3”参数。“#1”参数取默认值“喜欢”。

(2)在love的第二种使用方式中,提供了三个参数。此处的“猫儿”对应“#2”参数,“鱼”对应“#3”参数。方括号[]指定的可选参数“最爱”,对应于“#1”,从而取代了该参数的默认值“喜欢”。

二、renewcommand命令

我们也可以使用renewcommand重新定义已有的命令。

renewcommand命令与newcommand命令的用法完全一致,唯一的区别是renewcommand只能作用于已有的命令

例如,可以将abstractname重新定义为“内容简介”。

image-20220211112916141

该命令会被 abstract环境自动使用。

在正文区写上:

image-20220211113200144

编译运行并查看结果:

image-20220211113334545

注意,其标题为重新定义的abstractname命令的内容。

我们可以再次更改。

image-20220211113407271

正文区不用动,咱们再次查看结果:

image-20220211113543328

三、newenvironment定义新环境

newenvironment命令与newcommand命令类似。

需要指定环境名称,参数个数,首参数默认值,环境前定义,环境后定义。

image-20220211115930867

例如,

定义一个新的摘要环境myabstract,它有一个可选参数,其默认值为“摘要”。

image-20220211115522706

在“环境前定义”中,用small命令设定环境中内容的字号

image-20220211115608584

并指定#1参数的排版方式。

image-20220211115643519

begin命令开始quotation环境。

image-20220211115706173

在“环境后定义”中,用end命令结束quotation环境。

image-20220211115753186

注意,在“环境前定义”和“环境后定义”两端,使用大括号

image-20220211115859964

正文区,用begin和end命令,使用自定义的myabstract环境。

image-20220211120318354

编译运行并查看结果:

image-20220211120345984

当然,也可以为myabstract环境指定可选参数。

image-20220211120507114

查看结果:

image-20220211120601763

在此,“我的摘要”对应#1参数,并取代了第一个参数的默认值“摘要”。

四、newenvironment与newcommand命令嵌套使用

我们可以在newenvironment环境前定义中,用newcommand定义一个使用newenvironment参数的命令,并将该新命令应用于环境后定义中,以解决环境后定义中无法使用参数的问题。

如图:

image-20220211121602895

此处,“环境前定义”中的quotesource命令使用了新环境quotation#1参数。

image-20220211122239533

并在“环境后定义”中,使用了新命令。

image-20220211122218534

正文区,使用beginend命令,使用新定义的环境。

image-20220211122505909

编译运行并查看结果:

image-20220211122540866

注意,新环境Quotation的必选参数“易...乾”对应#1参数,并传递到quotesource命令中。

而且,在“环境后定义”中,使用了quotesource命令,

五、renewenvironment重定义已有环境

image-20220211120931766

newenvironment用法一致,但前提是要有已有环境。

六、总结和代码

1、总结

这一讲,我们主要讨论了命令和环境的定义与重定义,使用命令和环境的定义和重定义,达到内容与格式分离的目标。

这是LaTeX排版中的一个重要理念。

在LaTeX排版中,一定要避免直接在正文中使用原始的和基础的排版命令。

当然,还可以定义和重定义带星号的短命令与环境。

详情请大家查阅相关资料。

2、代码

tex文件代码:

%导言区
\documentclass{ctexart} %ctexbook,ctexrep

%newcommand--定义命令
%命令只能由字母组成,不能以\end开头
%\newcommand<命令>[<参数个数>][<首参数默认值>]{<具体定义>}

%\newcommand可以是简单字符串替换,例如:
%使用\PRC相当于People's Republic of \emph{China} 这一串内容
\newcommand\PRC{People's Republic of \emph{China}}

%newcommand也可以使用参数
%参数个数可以从1到9,使用时用 #1,#2,...,#9表示
\newcommand\loves[2]{#1 喜欢 #2}
\newcommand\hatedby[2]{#2 不受 #1 喜欢}

%\newcommand的参数也可以有默认值
%指定参数个数的同时,指定了首个参数的默认值,那么这个命令的第一个参数
%就成为可选的参数(需要使用中括号指定)
\newcommand\love[3][喜欢]{#2#1#3}


%renewcommand--重定义命令
%与\newcommand命令作用和用法相同,但只能用于已有命令。
%\renewcommand<命令>[<参数个数>][<首参数默认值>]{<具体定义>}
\renewcommand\abstractname{简介}


%定义和重定义环境
%\newenvironment{<环境名称>}[<参数个数>][<首参数默认值>]
%                {<环境前定义>}
%                {<环境后定义>}

%为book类中定义摘要(abstract)环境
\newenvironment{myabstract}[1][摘要]%
{\small
    \begin{center} \bfseries #1 \end{center} %
    \begin{quotation}} %
	{\end{quotation}}


%环境参数只有<环境前定义>中可以使用参数,
%<环境后定义>中不能再使用环境参数。
%如果需要,可以先把前面得到的参数保存在一个命令中,在后面使用:
\newenvironment{Quotation}[1] %
{\newcommand\quotesource{#1} %
    \begin{quotation}} %
	{\par \hfill--- 《\textit{\quotesource}》%
	\end{quotation}}
    




%\renewenvironment{<环境名称>}[<参数个数>][<首参数默认值>]
%                {<环境前定义>}
%                {<环境后定义>}


%正文区(文稿区)
\begin{document}
	\PRC
	
	\loves{猫儿}{鱼}
	
	\hatedby{猫儿}{萝卜}
	
	\love{猫儿}{鱼}
	
	\love[最爱]{猫儿}{鱼}
	
	\begin{abstract}
		这是一段摘要...
	\end{abstract}

	\begin{myabstract}[我的摘要]
		这是一段自定义格式的摘要...
	\end{myabstract}

	\begin{Quotation}{易$ \cdots $乾}
		初九,潜龙勿用。
	\end{Quotation}
	
\end{document}
相关文章
|
网络协议
校园网进不去B站/CSDN怎么办?一招搞定
校园网进不去B站/CSDN怎么办?一招搞定
2768 0
|
2月前
|
Linux C++ iOS开发
C++ SDL库入门指南(从零开始学习SDL2图形与游戏开发)
本教程来源https://www.vpshk.cn/带你使用C++和SDL2从零开始创建图形窗口,涵盖环境搭建、代码解析与编译运行,适合入门游戏开发与多媒体应用,轻松掌握跨平台图形编程基础。
|
6月前
|
PyTorch 算法框架/工具 图计算
Python音频处理-频谱图实现
本教程介绍如何使用 PyTorch 提取音频特征,重点实现频谱图的生成。内容包括使用 torchaudio 进行频谱提取、频谱图维度解析、手动实现频谱计算步骤,并对两种方法的结果进行对比分析,展示其差异与实现细节。
667 0
|
10月前
联通骨干网如何从内循环走向全球化?
中国联通骨干网的发展历程堪称中国互联网基础设施建设的缩影。从承载2G/3G业务的B网起步,经由169网的国内“内循环”先锋阶段,到A网(CUII)的企业级服务高速公路,再到国际化的AS10099骨干网,形成当前“China169+CUII”的双网格局。这一布局实现了普通用户与企业需求的分离,确保服务质量的同时提升资源调配效率,为数字中国建设提供了坚实支撑。
378 0
联通骨干网如何从内循环走向全球化?
技术笔记:tcolorbox宏包简明教程
技术笔记:tcolorbox宏包简明教程
1116 0
|
JavaScript 开发者 Docker
深入理解Docker容器化技术,打造高效开发环境
深入理解Docker容器化技术,打造高效开发环境
|
存储 IDE 开发工具
磁盘的物理组成
本文介绍了磁盘的物理组成和如何新增磁盘。磁盘主要由主轴、磁盘盘、磁头和磁头臂组成,其中磁道、簇、扇面和扇区是磁盘的基本存储单元。新增磁盘的步骤包括关闭操作系统、选择磁盘类型和容量、创建新虚拟磁盘并完成配置。常见的磁盘接口类型有IDE、SCSI、SATA和SAS。
569 1
|
存储 人工智能 算法
70倍极致压缩!大模型的检查点再多也不怕
【8月更文挑战第27天】ExCP是一种新提出的框架,旨在解决大型语言模型(LLM)训练过程中计算和存储方面的挑战。该框架通过高效地压缩训练检查点,在显著减少存储需求的同时保持几乎无损的性能。ExCP首先计算相邻检查点间的残差以提取关键信息,并采用权重-动量联合收缩方法进一步去除冗余参数。此外,它还运用非均匀量化技术进一步压缩检查点存储。在不同规模的模型上测试显示,ExCP能大幅降低存储需求,如对Pythia-410M模型实现了70倍的压缩比,且保持了原始模型的准确性。ExCP的优势包括几乎无损的性能、广泛的适用性和高效的压缩算法。
403 2