美文网首页LaTeX科研写作
LaTeX教学2.7 自定义

LaTeX教学2.7 自定义

作者: 无锤乙醇 | 来源:发表于2019-02-05 12:37 被阅读0次

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

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

相关文章

  • LaTeX教学2.7 自定义

    2.7 自定义 在LaTeX中, 很多命令和环境无法满足我们的需要, 于是我们需要自己设计一些简单的命令和环境, ...

  • LaTeX教学1 简介

    LaTeX教学 [TOC] 1. LaTeX简介 1.1 LaTeX的历史 1978年, 斯坦福大学的Donald...

  • python03-函数

    函数传递 函数可以作为参数传递 内置函数 自定义filter函数: 自定义map函数: 文件管理 2.7 and ...

  • LaTeX教学2.1 命令

    2. LaTeX基本信息 2.1 命令 2.1.1 写一个LaTeX文档 先动手写一个LaTeX文档, 来体会La...

  • LaTeX教学2.4 环境

    2.4 环境 环境是LaTeX中红重要的一个排版理念. 简单地说, 环境就是具有某一转项功能的模板, 比如表格环境...

  • LaTeX教学2.3 符号

    2.3 符号 在写作论文时要用到标点符号, 数学符号和单位符号等许多符号. 在LaTeX系统中可以把各种符号分为以...

  • LaTeX教学2.5 字体

    2.5 字体 在论文中我们使用最多的是一个字体的四种性质:字族(font family), 字体形状(font s...

  • LaTeX:自定义颜色

    需求:表格背景色如何只用自带颜色会不好看!有时需要自定义颜色!本文的目标还是服务于"表格"的背景色。 宏包:\us...

  • LaTeX教学2.9 交叉引用

    2.9 交叉引用 同样在论文写作中, 我们在前文或者后文会提到某一个公式或定理, 但是如果我们用手敲定理对应的编号...

  • LaTeX教学3.1 数学模式

    3. 数学式 终于到了这个部分了, 排版数学公式是LaTeX设计的初衷, 它也是LaTeX中最为人称道的功能, 同...

网友评论

    本文标题:LaTeX教学2.7 自定义

    本文链接:https://www.haomeiwen.com/subject/hrcvsqtx.html