LaTeX教学2.7 自定义

2.7 自定义

在LaTeX中, 很多命令和环境无法满足我们的需要, 于是我们需要自己设计一些简单的命令和环境, 来方便我们文章的写作, 自定义的命令和环境会更好的服务我们自身.

2.7.1 自定义命令

定义新命令

先给出自定义命令的命令:\newcommand{<新命令>}[<参数数量>][<默认值>]{<定义内容>}.

它允许作者定义一条新命令, 该命令的各种必要参数和可选参数说明如下, 其中新命令两端的花括号可以省略, 但是不建议省略.

自定义命令说明.png

新命令是一个声明形式的命令, 通常放在导言中, 这样全文都可以使用该命令, 如果放在正文中, 那么只有该命令声明后的内容才能使用该命令, 或者所在环境和组合之内, 即在环境中定义的命令无法在环境之外使用, 在花括号内定义的命令同样无法在花括号使用, 如{\newcommand{\cmdA}{a} \cmdA} \cmdA中, 花括号内的\cmdA会正常输出a, 而花括号外的\cmdA会报错. 而且自定义命令的各种参数中不得含有抄录命令\verb或抄录环境verbatim.

自定义一条命令, 使其可以生成你自己的姓名.

    \newcommand{\myname}{Zhonghao Sun}
    \myname is a student of HIT.  \myname's sitting here to study \LaTeX. 
自定义命令-姓名示例.png

但是好像又有了点新的问题, 像我们在命令一节里讲的一样, Zhonghao Sun后面的空格又不见了, 原因应该很明显了, 自定义命令后的空格被当成了命令结束的标志从而使得Sunis中间的空格丢失, 那我们在自定义命令中主动添加一个空格不就可以了吗?也不行的, 因为那样做的话在第二句中的'前又会多出一个空格, 怎么解决呢, xspace宏包解决了这个问题, 调用宏包\usepackage{xspace}, 并将上述定义内容改为
Zhonghao Sun\xspace
即可, 命令\xspace可以自动生成一个空格, 除非其后是标点. 再试一下, 这个自定义命令就算完成了.

在上例中, 新命令\myname定义为自己的姓名, 每当使用这个命令就可以生成一个名字, 对于论文排版中要大量出现的文字, 可以将它简化为一个自定义命令, 提高输入效率也防止出错.

自定义一条带参数的命令, 用于将部分文本转为对应中文字体.

\documentclass{article}
\usepackage[UTF8]{ctex}
\begin{document}
    \newcommand{\myfont}[1]{\setCJKfamilyfont{font}{#1}\CJKfamily{font}}
    {\myfont{华文行楷} 华文行楷}
    {\myfont{方正姚体} 方正姚体}
\end{document} 
自定义命令-必要参数.png

上述自定义命令中, 定义了一个必要参数:字体, 用来选择需要的字体. 下面给出一个可选参数与一个必要参数的例子:

\documentclass{article}
\usepackage[UTF8]{ctex}
\begin{document}
    \newcommand{\myfont}[2][华文行楷]
    {\setCJKfamilyfont{CJKfont}{#1}\newfontfamily\nCJKfont{#2}\CJKfamily{CJKfont}\nCJKfont}
    \myfont[方正姚体]{Lucida Handwriting} Hello World. 这是我的字体
\end{document} 
自定义命令-带参数.png

使用可选参数可以简化命令使其更灵活, 但是可选参数也更容易被忘记.这里我们只选取了改变字体命令来进行举例, 对于其他的命令也可以自行进行尝试.

带星号的自定义命令:如果把自定义命令改为\newcommand*, 其不同之处就是命令中的各种参数不能超过一行, 即命令中不能含有换行符或\par, 否则会出错.

系统仍然提供了一种防止同名冲突的命令:\providecommand{<新命令>}[<参数数量>][<默认值>]{<定义内容>}, 如此定义出来的新命令会检查被调用的宏包提供了同名命令, 所定义的内容将会被保存下来, 直到提供重名命令的宏包被取消, 该定义的命令才会被调用. 另外, 如果想自定义有可选子参数的命令, 可以调用keycommand宏包, 并使用命令\newkeycommand, 具体使用方法可以查看宏包文档.

修改已有命令

如果我们对系统内部的某个命令或已定义的命令的排版效果不满意, 我们可以对其进行修改:

\renewcommand{<已有命令>}[<参数数量>][<默认值>]{<定义内容>}

这个命令只能用于已有命令的修改, 而且对已有命令不要轻易将其重新定义, 因为原定义中可能隐藏着你需要而没注意过的内容, 如果确实需要重新定义, 应该先查明已有命令的定义, 再进行修改. 同样, 修改命令也有对应的星号形式\renewcommand*

2.7.2 自定义环境

定义新环境

如果没有找到自己满足的环境, 那么我们也可以自定义一个环境, 如自定义命令一样, 自定义环境的命令如下

\newenvironment{<新环境>}[<参数数量>][<默认值>]{<开始定义>}{<结束定义>}

然后就可以使用这个新环境了:

\begin{新环境}{参数1}{参数2}
...
\end{新环境}

新环境定义命令中的各种参数的用途如下

自定义环境说明.png

自定义一个定理环境:

\documentclass{article}
\usepackage[UTF8]{ctex}
\begin{document}
    \newenvironment{Theorem}{\par\noindent\textbf{定理}\quad}{\par}
    \begin{Theorem}
        设可微函数……
    \end{Theorem}
\end{document}
自定义环境-定理.png

定义中的\quad是一种长度设置命令, 我们在数学式一章中会更详细的介绍它. 开始定义中与结束定义中的的\par都是要新起一段. 的如果我们需要在某些定理的后面添加定理的名称, 可以使用带可选参数的自定义环境, 看下例

\documentclass{article}
\usepackage[UTF8]{ctex}
\begin{document}
    \newenvironment{Theorem}[1][]{\par\noindent\textbf{定理}(#1)\quad}{\par}
    \begin{Theorem}[可微性定理]
        设可微函数……
    \end{Theorem}
\end{document}
自定义环境-带参数.png

我们看已完成的论文中的定理, 定义都是带着序号的, 而如何让这个序号也加在定理后面呢, 在下一节计数器中我们会介绍.

修改已有环境

与修改已有命令一样, 命令为:

\renewenvrionment{<已有环境>}[<参数数量>][<默认值>]{<开始定义>}{<结束定义>}

同样修改已有环境和定义新命令也有带号的形式\renewenvironment*\newenvironment*, 这些都与修改已有命令的使用方法相同.

2.7.3 多余的空格

在使用自定义命令或环境时, 可能会产生并不需要的空格, 如果希望消除空格的话, 可以在定义内容或新环境的定义中分别使用以下命令:

空格删除.png

自定义两个引用环境, 其中第二个使用忽略空格命令, 对比两者的排版效果.

\documentclass{article}
\usepackage[UTF8]{ctex}
\begin{document}
    \newenvironment{QuoteA}{``}{''}
    \newenvironment{QuoteB}{``\ignorespaces}{\unskip''\ignorespacesafterend}
    当设备处于\begin{QuoteA} 休眠 \end{QuoteA}时\par
    当设备处于\begin{QuoteB} 休眠 \end{QuoteB}时
\end{document}
空格删除示例.png

在后面也会有自定义的情况, 比如自定义计数器等, 在后面对应的章节我们会一一介绍.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容