0%

字族、字系与字形

字体 (typeface) 的概念非常令人恼火,在电子化时代,基本上也都以字体 (font) 作为替代的称呼。字族、字系与字形这三者大概可以并称字体

  • 宋体、黑体、楷体,这属于字族
  • 加粗、加斜属于字系和字形
  • 五号、小四属于字号

fontspec 宏包

fontspec 是一个基于 XeLaTeX 和 LuaLaTeX 的宏包(此处划重点),所以在编译时要注意不能使用 PdfLaTeX,否则会出现编译错误(建议使用 XeLaTex)。

使用 fontspec 宏包更改字体

xelatex 编译命令能够支持直接调用系统安装的 .ttf 或 .otf 格式字体,xelatex 命令下支持用户调用字体的宏包是 fontspec

如何使用 xelatex 进行编译

  • 可以将 xelatex 作为编辑器的默认编译器,编译即自动使用 xelatex(推荐该方式)
  • 或者找到 xelatex 命令

使用 xelatex 进行编译

方式 1:以 TexStudio 为例

09-TexStduio默认编译器设置为xelatex.png

方式 2:以 TexStudio 为例

08-使用xelatex进行编译.png

语法格式

1
2
3
4
5
6
7
\usepackage{fontspec}
\setmainfont[⟨font features⟩]{⟨font name⟩} %设置衬线字体
\setsansfont[⟨font features⟩]{⟨font name⟩} %设置无衬线字体
\setmonofont[⟨font features⟩]{⟨font name⟩} %设置等宽字体

% 举个例子
\setsansfont[BoldFont={Arial Bold}, ItalicFont={Arial Italic}]{Arial}
  • font features:用来手动配置对应的粗体或斜体
  • font name:字体名称

什么是衬线字体、非衬线字体以及等宽字体?
参考资料:博客园:Serif 和 Sans-serif 字体的区别

由于中文字体少有对应的粗体或斜体,⟨font features⟩ 里多用其他字体来配置,比如习惯上将宋体的 BoldFont 配置为黑体,而 ItalicFont 配置为楷体。

(可先跳过此段)需要注意的是:fontspec 宏包会覆盖数学字体设置。需要调用一些数学字体宏包时,应当在调用 fontspec 宏包时指定 no-math 选项。
(可先跳过此段)fontspec 宏包可能被其它宏包或文档类如 xeCJK、ctex 文档类)自动调用时,则在文档开头的 \documentclass 命令里指定 no-math 选项。

需求 1:全文更换字体

在前言部分对字体进行设置

1
2
3
%语法:\setmainfont{FONT_NAME}
% 比如
\setmainfont{Times New Roman} %设置全文英文衬线字体为Times New Roman,注意Latex区分大小写

需求 2:中文为宋体,英文为 Times New Roman

在 ctex 中文文档类下,默认中文字体为宋体(衬线字体),只要将英文字体的衬线字体设置为 Times New Roman 即可满足需求

1
2
3
4
5
6
7
8
\documentclass{ctexart}
\usepackage{fontspec}
\setmainfont{Times New Roman}[BoldFont={Times New Roman Bold}, ItalicFont={Times New Roman Italic}] %设置
\begin{document}
Hello, Welcome to Latex %普通英文字体为Times New Roman
你好,欢迎来到Latex的世界 % 普通文字中文字体为宋体,英文为Times New Roman字体

\end{document}

01-中文设置为宋体,英文设置为Times,英文加粗斜体也为Times.png

对于非正文字体是不是也设置成功了呢?可以测试一下标题字体与图片标题字体

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
\documentclass{ctexart}
\usepackage{fontspec}
\setmainfont{Times New Roman}[BoldFont={Times New Roman Bold}, ItalicFont={Times New Roman Italic}] % 设置衬线字体为Times New Roman,加粗和斜体也为Times New Roman加粗体和斜体

\begin{document}
Hello, Welcome to Latex %普通英文字体为Times New Roman

你好,欢迎来到Latex的世界 % 普通文字中文字体为宋体,英文为Times New Roman字体

\textbf{Hello, Welcome to Latex} %加粗则设置为Times New Roman加粗字

\textit{Hello, Welcome to Latex} %加粗则设置为Times New Roman斜体

\section{This is a section}
\subsection{This is a subsection}
\subsubsection{This is a subsubsection}

\begin{figure}[hbp]
\caption{This is a caption}
\end{figure}

\end{document}

02-中宋英Times.png

可以看到 ctexart 对应的 section 标题都是加粗的,那么对于中文呢,还会是加粗的宋体吗?我们刚才只设定了英文衬线字体,普通文字、加粗、斜体文字均匀 Times New Roman 字体,

1
\setmainfont{Times New Roman}[BoldFont={Times New Roman Bold}, ItalicFont={Times New Roman Italic}] % 设置衬线字体为Times New Roman,加粗和斜体也为Times New Roman加粗体和斜体

首先需要明确一点:汉字没有斜体.平常我们看到的加斜汉字,通常是几何变换得到的结果,非常的粗糙,并不严格满足排版要求;而真正的字形上需要精细的设计的。同时,汉字字体里面也很少加粗体的设计。
西文一般设有加斜,但是这与 “斜体” 并不是同一回事.加斜是指某种字族的 Italy 字系;而斜体,是指 Slant 字族.在行文中表强调时使用的是前者;在 Microsoft Word 等软件中看到的倾斜的字母 I,也代表前者.

加粗和斜体通常不是加粗的宋体和宋体的斜体,而是由其他字体替代,对应的加粗体为黑体字体,斜体为楷体字体。

1
2
3
4
5
6
7
8
9
10
11
12
13
\documentclass{ctexart}
\usepackage{fontspec}
\setmainfont{Times New Roman}[BoldFont={Times New Roman Bold}, ItalicFont={Times New Roman Italic}] % 设置衬线字体为Times New Roman,加粗和斜体也为Times New Roman加粗体和斜体

\begin{document}
\section{这是一个一级标题}

你好,欢迎来到Latex的世界 % 普通文字中文字体为宋体,英文为Times New Roman字体

\textbf{你好,欢迎来到Latex的世界} %粗体

\textit{你好,欢迎来到Latex的世界} %斜体
\end{document}

03-中文字体加粗加斜的一些设置.png

需求 3:自定义中文字体

中文方面, ctex 宏包直接定义了新的中文文档类 ctexart, ctexrep 与 ctexbook,以及 ctexbeamer 幻灯片文档类
ctex 宏包已经为我们提供了以下的字体命令
参考资料:中国 TeX 用户组. CTeX 宏集手册(可以该网站可下载到最新版本的 CTeX 宏基手册)

字体 命令
宋体 songti
黑体 heiti
仿宋 fangsong
楷书 kaishu
1
2
3
4
5
6
7
\documentclass{ctexart}
\begin{document}
我是全局字体,我使用的是宋体\\
{\kaishu 我是ctex已定义好的字体,我使用的楷体}\\
{\heiti 我是ctex已定义好的字体,我使用的黑体}\\
{\fangsong 我是ctex已定义好的字体,我使用的仿宋}\\
\end{document}

05-CTeX提供的中文字体命令.png

除了以上字体,我还想使用其他的中文字体呢?
查询电脑上字体对应的英文名称,具体如何查询可以查看一下两个连接
比如说查询到华文行楷对应的英文名称为 STXingkai,那么可以通过如下方式自定义命令,在正文中,只要使用 \huawenxingkai 即可将字体设置为华文行楷

如何查询中文字体对应的英文名称参考资料

1
fc-list -f "%{family}\n" :lang=zh-cn >c:\list.txt
  1. 打开 CMD
  2. 将以上命令复制到 CMD,回车
  3. 去 C 盘根目录查看 list.txt 文件

(Latex)如何查看本地中文字体的英文名称.gif

参考资料:

1
2
\setCJKfamilyfont{hwxk}{STXingkai}             %使用STXingkai华文行楷字体
\newcommand{\huawenxingkai}{\CJKfamily{hwxk}}

最小案例如下:

1
2
3
4
5
6
\documentclass{ctexart}
\setCJKfamilyfont{hwxk}{STXingkai} %使用STXingkai华文行楷字体
\newcommand{\huawenxingkai}{\CJKfamily{hwxk}}
\begin{document}
{\huawenxingkai 我是自定义的字体,我使用的华文行楷}
\end{document}

06-我是自定义字体华文行楷.png

注意:只需要给某些文字设定字体时,请将命令和需要修改字体的文字用大括号包起来

1
2
3
4
{\huawenxingkai 我是自定义的字体,我使用的华文行楷}

% 以下命令会修改该命令之后的所有的文字字体,修改局部字体时不推荐这样使用,推荐使用花括号进行分组,如以上命令
\huawenxingkai{} 我是自定义的字体,我使用的华文行楷

比如如下案例,会导致第二行文字也变为黑体

1
2
3
4
5
6
\documentclass{ctexart}
\begin{document}
\heiti{} 你好,欢迎来到Latex的世界

你好,欢迎来到Latex的世界
\end{document}

07-设置全局字体的方式.png

待续

参考资料

本文参考资料如下:

前言

figure 环境和 table 环境是最常见的浮动体环境,将这些浮动体插入文档中时,难免会出现 Latex 排版的图表位置和我们想要插入位置不同的情况,这篇文章将会对浮动体的一些概念和误区做一些较为详细的说明,希望对我还有阅读的你们有用 o (^▽^) o。自己接触 Latex 也还只有一个月左右,文中若有错误之处还请指正。

为什么会有浮动体

内容丰富的文章或者书籍往往包含许多图片和表格等内容。这些内容的尺寸往往太大,导致分页困难。Latex 为此引入了浮动体的机制,令大块的内容可以脱离上下文,放置在合适的位置。
LATEX 预定义了两类浮动体环境 figure 和 table。习惯上 figure 里放图片,table 里放表格,但并没有严格限制,可以在任何一个浮动体里放置文字、公式、表格、图片等等任意内容。
实际上,插入图片也可以不放入 figure 环境当中,直接通过 includegraphics 命令插入图片即可(比如有的简历模板中插入照片时不推荐使用 figure 浮动体环境)

为什么叫做浮动体

  1. 排版出来供阅读的文本是主体,而图、表为辅;
  2. 插在页面的文本段落之间,打断或妨碍阅读节奏( reading flow);
  3. 那么浮动体的意义在于:图、表都尽量闪一边去,不要打断我的阅读节奏,闪到页面顶部、底部,甚至是页面之后都行,就是插在段落之间影响我阅读

实际上,这和我们使用 Word 插入图片在概念上有比较大的出入,我们习惯于在提及到图表内容的段落的下一段插入相应的图表,但这排版出来的效果确实影响到整体的阅读体验了,页面看起来也不美观。

Q:有人会说:我插入的图和表不应该就在我交叉引用的下一段出现吗,图和说明不在同一页,那读者怎么读得明白啊?
A:那么交叉引用 \label 和 \ref 的意义何在呢

07-Word排版插入的思路.png

浮动体位置参数

1
2
3
\begin{table}[位置参数]
...
\end{table}

位置参数提供了一些符号用来表示浮动体允许排版的位置,如 hbp 允许浮动体排版在当前位置、底部或者单独成页。
h:here, 就摆这里
t:top, 页面顶端
b:bottom, 页面低端
p:float page(也就是只有浮动体的页面,通常由于浮动体太长了,页面插入了浮动体之后,只能塞下几行文字了,此时 latex 不会再插入那几行文字,而是单独的排版这个浮动体,即浮动体单独成页)
!:求你了,听听我的请求吧…(在决定位置时忽视限制)

注意:

  • 排版位置的选取与参数里符号的顺序无关,LATEX 总是以 h-t-b-p 的优先级顺序决定浮动体位置。也就是说 [!htp][ph!t] 没有区别
  • 但是如果只给了某一个参数,比如 [h],那么肯定按 h 这个参数来排版
  • 图、表缺省的位置参数是 [t]

浮动体的位置选取受到先后顺序的限制(注意这里所说的先后顺序与上方所说顺序没有关系)。如果某个浮动体由于参数限制、空间限制等原因在当前页无法放置,就要推迟到之后处理,并使得之后的同类浮动体一并推迟。
比如说我论文中的图片太多了,Latex 排版时,将许多图片一并推迟到了非常靠后的页面,此时使用 \clearpage 命令,会在另起一页之前,先将所有推迟处理的浮动体排版成页,此时 htbp 等位置限制被完全忽略(clearpage 可以将之前推迟的所有浮动体一口气全排出来)。

案例分析

为了演示方便,本案例使用了 blindtext 宏包以用来生成假文

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
\documentclass[a4paper,twocolumn]{article}
\usepackage{blindtext} %生成假文宏包

\begin{document}
\section{Table position}
\blindtext[3] %生成假文

\begin{table}
\centering
\begin{tabular}{ccc}
\hline
1 & 2 & 3 \\
1 & 2 & 3 \\
1 & 2 & 3 \\
\hline
\end{tabular}
\end{table}

\blindtext[3] %生成假文
\end{document}

如果不给表格添加位置参数,其默认的位置参数是 t

01-不给位置参数则默认为顶部.png

对于双栏排版,如果想要图、表跨栏显示,如何处理?
双栏排版环境下,LATEX 提供了 table*figure* 环境用来排版跨栏的浮动体。它们的用法与 table 和 figure 一样,不同之处为双栏的 ⟨placement⟩ 参数只能用 tp 两个位置。

1
2
3
4
5
6
7
8
9
10
\begin{table*}[t]
\centering
\begin{tabular}{ccc}
\hline
1 & 2 & 3 \\
1 & 2 & 3 \\
1 & 2 & 3 \\
\hline
\end{tabular}
\end{table*}

注意是 table 带星,不是 tabular 带星

待续

主要内容:

  • LaTeX 引用参考文献 ——Bibtex 格式说明
  • LaTeX 引用参考文献 ——BibTex 参考文献格式大全
  • 参考文献类型及其标识

LaTeX 引用参考文献 ——Bibtex 格式说明

注:以下内容转载自 CSDN: Bibtex 格式说明 @人工智能靠人工

类型 简介 必需关键字 可省略关键字
@article 期刊或杂志上的一篇文章。 author, title, journal, year. volume, number, pages, month, note.
@book 有确定出版社的书籍。 author 或 editor, title, publisher, year. volume 或 number, series, address, edition, month, note.
@booklet 印制的有封皮的作品,但没有出版社或赞助机构的名称。 title. author, howpublished, address, month, year, note.
@inbook 一本书的一部分 (章,节或某些页)。 author 或 editor, title, chapter 和 / 或 pages, publisher,year. volume 或 number, series, type, address, edition, month, note.
@incollection 一本书中有自己题目的一部分。 author, title, booktitle, publisher, year. editor, volume 或 number, series, type, chapter, pages, address, edition, month, note.
@conference/@inproceedings 会议论文集中的一篇文章。 author, title, booktitle, year. editor, volume 或 number, series, pages, address, month, organization, publisher, note.
@manual 科技文档。 title. author, organization, address, edition, month, year, note.
@mastersthesis 硕士论文。 author, title, school, year. type, address, month, note.
@misc 不属于其它任何类型的作品。 没有。 author, title, howpublished, month, year, note.
@phdthesis 博士论文。 author, title, school, year. type, address, month, note.
@proceedings 会议论文集。 title, year. editor,volume 或 number, series, address, month, organization, publisher, note.
@techreport 学校或其它研究机构印制的报告。 author, title, institution, year. type, number, address, month, note.
@unpublished 有作者和标题的还未出版的作品。 author, title, note. month, year.

LaTeX 引用参考文献 ——BibTex 参考文献格式大全

注:以下内容转载自 CSDN: LaTeX 引用参考文献 ——BibTex 参考文献格式大全 @Pycharm 比 VScode 更好用

期刊杂志的论文

1
2
3
4
5
6
7
8
9
10
11
@article{RN01,
author = {Peter Adams},
title = {The title of the work},
journal = {The name of the journal},
year = 1993,
number = 2,
pages = {201-213},
month = 7,
note = {An optional note},
volume = 4
}
  • 必要域: author, title, journal, year.
  • 可选域: volume, number, pages, month, note.

公开出版书籍

1
2
3
4
5
6
7
8
9
10
11
12
13
@book{RN02,
author = {Peter Babington},
title = {The title of the work},
publisher = {The name of the publisher},
year = 1993,
volume = 4,
series = 10,
address = {The address},
edition = 3,
month = 7,
note = {An optional note},
isbn = {3257227892}
}
  • 必要域: author/editor, title, publisher, year.
  • 可选域: volume/number, series, address, edition, month, note.

会议论文(集)

1
2
3
4
5
6
7
8
9
10
11
12
13
@inproceedings{RN11,
title = {The title of the work},
year = 1993,
editor = {Peter Kidwelly},
volume = 4,
series = 5,
page = 100-102,
address = {The address of the publisher},
month = 7,
organization = {The organization},
publisher = {The name of the publisher},
note = {An optional note}
}
  • 必要域: title, page, publisher, volume/number, year.
  • 可选域: editor, volume/number, series, address, month, organization, note.

等价于 inproceedings

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@conference{RN04,
author = {Peter Draper},
title = {The title of the work},
booktitle = {The title of the book},
year = 1993,
editor = {The editor},
volume = 4,
series = 5,
pages = 213,
address = {The address of the publisher},
month = 7,
organization = {The organization},
publisher = {The publisher},
note = {An optional note}
}
  • 必要域: author, title, booktitle, year.
  • 可选域: editor, volume/number, series, pages, address, month, organization, publisher, note.

硕士论文

1
2
3
4
5
6
7
8
9
@mastersthesis{RN08,
author = {Peter Harwood},
title = {The title of the work},
school = {The school of the thesis},
year = 1993,
address = {The address of the publisher},
month = 7,
note = {An optional note}
}
  • 必要域: author, title, school, year.
  • 可选域: type, address, month, note.

博士论文

1
2
3
4
5
6
7
8
9
@phdthesis{RN10,
author = {Peter Joslin},
title = {The title of the work},
school = {The school of the thesis},
year = 1993,
address = {The address of the publisher},
month = 7,
note = {An optional note}
}
  • 必要域: author, title, year, school.
  • 可选域: address, month, keywords, note.

参考文献类型及其标识

参考文献类型

专著 论文集 报纸文章 期刊文章 学位论文 报告 标准 专利
M C N J D R S P

对于数据库 (database)、计算机程序 (computer program) 及电子公告 (electronic bulletin board) 等电子文献类型的参考文献,建议以下列双字母作为标识:

电子参考文献类型

数据库 计算机程序 电子公告
DB CP EB

对于非纸张型载体的电子文献,当被引用为参考文献时需在参考文献类型标识中同时标明其载体类型。本规范建议采用双字母表示电子文献载体类型:磁带 (magnetic tape) MT,磁盘 (disk) DK,光盘 (CD-ROM) CD,联机网络 (online) OL,并以下列格式表示包括了文献载体类型的参考文献类型标识:

文献类型标识 载体类型标识
[DB/OL] 联机网上数据库 (database online)
[DB/MT] 磁带数据库 (database on magnetic tape)
[M/CD] 光盘图书 (monograph on CD-ROM)
[CP/DK] 磁盘软件 (computer program on disk)
[J/OL] 网上期刊 (serial online)
[EB/OL] 网上电子公告 (electronic bulletin board online)

以纸张为载体的传统文献在引作参考文献时不必注明其载体类型。

待续

为什么使用 Beamer

  • 学术偏好,就是任性
  • 和 LATEX 搭配,兼容 LATEX 命令
  • 高度可读性与清晰的逻辑
  • 输出为 PDF,跨平台显示无差异
  • 详见为什么使用 LaTeX

指定文档类

beamer 的文档类(顺便设置一下整个文档的字体大小),也可以指定幻灯片的比例

1
2
3
4
5
6
7
%\documentclass{beamer} %使用默认的格式

% 指定beamer文档文字大小
\documentclas[14pt]{beamer}

% 43是幻灯片比例4:3,同理如果想设置16:9的格式则用169即可
%\documentclass[aspectratio=43,19pt, utf8, mathserif]{beamer}

设置中文环境

1
2
3
% 中文环境设置
\usepackage{xeCJK} %导入中文包,关键
\setCJKmainfont{SimHei} %中文字体采用宋体

设置图片环境

1
2
3
% 设置图片环境
\usepackage{graphicx} % 插入图片宏包
\graphicspath{images/} % 设置图片路径

设置目录

在每一小节前插入一张带有该节标题高亮的目录
需要理解的是:我们创建了多张带有不同命名的幻灯片,但是在程序看来,他们不会将这些不同名称的幻灯片标题作为该文档的目录结构,而是和普通的科技论文格式一样,需要使用到 section、subsection 等带有语义的命令来实现文档结构的划分

1
2
3
4
5
6
7
8
9
10
11
12
%...
%\begin{document}
%--------------
% 每个章节都有小目录
%--------------
\AtBeginSection[]
{
\begin{frame}
\frametitle{Table of Contents}
\tableofcontents[currentsection]
\end{frame}
}

如下代码,创建了 5 张幻灯片,但使用 tableofcontent 命令,不会有任何的标题被生成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
%--------------目录页--------------
%需要在frame环境当中,通过frametitle给该页添加幻灯片标题
\begin{frame}
\frametitle{目录}
%插入目录
\tableofcontents
\end{frame}

%--------------第1节--------------
\begin{frame}
\frametitle{选题依据}
\end{frame}

%--------------第2节--------------
\begin{frame}
\frametitle{研究内容和研究目标}
\end{frame}

%--------------第3节--------------
\begin{frame}
\frametitle{技术路线和已取得成果}
\end{frame}

%--------------第4节--------------
\begin{frame}
\frametitle{可行性分析及创新点}
\end{frame}

%--------------第5节--------------
\begin{frame}
\frametitle{研究计划及预期结果}
\end{frame}

小节

按照如下的框架往 beamer 当中填写内容,即可编译出自动为我们排好版的 PDF,当然这只是冰山一角,能够实现一些最基础的功能和最基本的框架,希望能够对你有所帮助呀 o (^▽^) o

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
\documentclass[11pt]{beamer}
% 中文环境设置
\usepackage{xeCJK} %导入中文包,关键
\setCJKmainfont{SimHei} %中文字体采用宋体

% 作者信息
\title{智朋的笔记}
\author{智朋}
\institute{机械工程学院}

%类型为presentation
\mode<presentation>
{
%使用Madrid主题
\usetheme{Madrid}
%字体主题,布局主题和颜色主题
%\usefonttheme{structuresmallcapsserif}
%\usetheme{Berlin}
%\usecolortheme{beaver}
}

% 设置图片环境
\usepackage{graphicx} % 插入图片宏包
\graphicspath{images/} % 设置图片路径

%--------------前言--------------
% 在每一个section开始的部分,tableofcontent插入一个目录页,并且会强调当前section章节
\AtBeginSection[]
{
\begin{frame}
\frametitle{Table of Contents}
\tableofcontents[currentsection]
\end{frame}
}
%--------------正文开始--------------
\begin{document}

%--------------封面--------------
\frame{\titlepage}

%--------------目录页--------------
%需要在frame环境当中,通过frametitle给该页添加幻灯片标题
\begin{frame}
\frametitle{目录}
%插入目录
\tableofcontents
\end{frame}

%--------------第1节--------------
\section{选题依据}
\begin{frame}
\frametitle{研究背景}
研究背景研究背景研究背景研究背景研究背景研究背景研究背景研究背景研究背景研究背景
\end{frame}

\begin{frame}
\frametitle{国内外研究现状}
国内外研究现状国内外研究现状国内外研究现状国内外研究现状国内外研究现状国内外研究现状
\end{frame}

\begin{frame}
\frametitle{存在的问题}
\item 问题1
存在的问题存在的问题存在的问题存在的问题存在的问题

\item 问题2
存在的问题存在的问题存在的问题存在的问题存在的问题

\end{frame}

%--------------第2节--------------
\section{研究内容和研究目标}
\begin{frame}
\frametitle{研究内容和研究目标}
\end{frame}

%--------------第3节--------------
\section{技术路线和已取得成果}
\begin{frame}
\frametitle{技术路线和已取得成果}
\end{frame}

%--------------第4节--------------
\section{可行性分析及创新点}
\begin{frame}
\frametitle{可行性分析及创新点}
\end{frame}

%--------------第5节--------------
\section{研究计划及预期结果}
\begin{frame}
\frametitle{研究计划及预期结果}
\end{frame}

\end{document}

01-beamer框架导出的PDF.png

参考资料

本案例可能需要使用到的宏包

方式 1:通过计数器

难点:插入图片之后,Latex 是如何知道这张图片是图 2(而不是图 3,图 4)呢?原因在于计数器。通过 figure 环境添加图片之后,计数器自动加一。

如果我们为图片添加了第二个标题的话,第一个标题(中文标题)为图 1,第二个标题(英文标题)就会变为图 2 了,而这两个标题明明是指同一张图片,此时就需要在添加第二个标题之前将计数器再减掉 1。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
\documentclass{ctexart}
\usepackage{graphicx}

\begin{document}
\begin{figure}
\centering
\includegraphics[width=1.5in]{fig/cat2}
\vspace{-10pt} %控制标题与图片之间的垂直距离
\caption{这是一只可爱的猫} %使用ctexart文档类,默认图例为中文“图”
\addtocounter{figure}{-1} %使用caption命令后,figure的计数器默认加一,此时再添加英文的标题,计数器就会变成2了,所以计数器减1,中英文标题计数器仍保持一致
\renewcommand{\figurename}{Fig} %将图例改为英文“Fig”
\vspace{-10pt} %控制第二个标题与第一个标题之间的垂直距离
\caption{This is a cute cat}
\renewcommand{\figurename}{图} %将图例的再次改为中文,修改为默认值,以防影响下方图片的图例
\label{Bigcat}
\end{figure}
\end{document}

01-图片双语标题示例.png

每句代码的意思已经写在注释中了,那么在插入第二章图片试一下是否有问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
\documentclass{ctexart}
\usepackage{graphicx}

\begin{document}
\begin{figure}
\centering
\includegraphics[width=1.5in]{fig/cat2}
\vspace{-10pt} %控制标题与图片之间的垂直距离
\caption{这是一只可爱的猫} %使用ctexart文档类,默认图例为中文“图”
\addtocounter{figure}{-1} %使用caption命令后,figure的计数器默认加一,此时再添加英文的标题,计数器就会变成2了,所以计数器减1,中英文标题计数器仍保持一致
\renewcommand{\figurename}{Fig} %将图例改为英文“Fig”
\vspace{-10pt} %控制第二个标题与第一个标题之间的垂直距离
\caption{This is a cute cat}
\renewcommand{\figurename}{图} %将图例的再次改为中文,修改为默认值,以防影响下方图片的图例
\label{Bigcat}
\end{figure}

以上是本示例的第一张图片:\ref{Bigcat},接下来插入第二章图片:

\begin{figure}[htbp]
\centering
\includegraphics[width=3in]{fig/QHU}
\vspace{-10pt}
\caption{青海大学美景} %使用ctexart文档类,默认图例为中文“图”
\addtocounter{figure}{-1} %使用caption命令后,figure的计数器默认加一,此时再添加英文的标题,计数器就会变成2了,所以计数器减1,中英文标题计数器仍保持一致
\renewcommand{\figurename}{Fig} %将图例改为英文“Fig”
\vspace{-10pt}
\caption{QHU's grand landscape}
\renewcommand{\figurename}{图} %将图例的再次改为中文,修改为默认值,以防影响下方图片的图例
\label{QHU-landscape}
\end{figure}
\end{document}

02-图片双语标题之插入多图示例.png

图片的图例没有问题,可是为什么图 2 会在那段文字的上方去了呢?原因在于 Latex 排版时会自动为我们排版出尽可能少的页面空白,让页面看起来更美观。这或许也正是 figure 环境为浮动体的体现吧
那么可以在第二章图片的 figure 环境后添加 htbp 参数,让 Latex 按照我们的要求进行排版

1
2
3
4
5
6
7
% ...
以上是本示例的第一张图片:\ref{Bigcat},接下来插入第二章图片:

\begin{figure}[htbp]
\centering
% ...

02-图片双语标题之插入多图示例htbp.png

浮动体中有关插图位置的参数,详细规则见文末参考资料 1

  • h: here 将图片插到此处
  • t: top 将图片插到页顶
  • b: bottom 将图片插到页底
  • p: page 插图独立一页
  • H: 将图片固定在此处

一般参数取 h 或 H 就好了,当然也可以写多个参数,如 htbp, 此时参数会按照顺序执行,首先尝试用 h,如果不行再依次使用其他参数 (其实效果和单独一个 h 差不多)。

方式 2:通过 bicaption 宏包

直接使用 bicaption 宏包就比较简单啦,毕竟宏包的开发作者就是针对这个双语标题开发出来的嘛。

1
2
3
4
5
6
7
8
9
10
11
\documentclass{ctexart}
\usepackage{graphicx}
\usepackage{bicaption} %使用双语标题宏包
\begin{document}
\begin{figure}
\centering
\includegraphics[width=1.5in]{fig/cat2}
\bicaption{这是一种可爱的猫}{This is a cute cat}
\label{Bigcat}
\end{figure}
\end{document}

04-使用bicaption宏包图片示例.png

很遗憾,并没有像我们预想的那样,第二个标题的图例还是中文。宏包作者没有直接为我们定义好第二个标题的图例是有原因的,他不针对中文用户,对于其他需求,比如第一个标题为母语,第二个标题为俄语呢,通过我们自己的需求来设置第二个标题的图例是不是更好一些。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
\documentclass{ctexart}
\usepackage{graphicx}
\usepackage{bicaption}

\begin{document}
\captionsetup[figure][bi-second]{name=Fig} %设置图的第二标题图例为Fig
\begin{figure}
\centering
\includegraphics[width=1.5in]{fig/cat2}
\bicaption{这是一种可爱的猫}{This is a cute cat}
\label{Bigcat}
\end{figure}

\end{document}

05-使用bicaption宏包设置第二标题图例.png

参考资料:

  1. CSDN: LaTex 论文排版 | (19) LaTex 中的插图问题 @CoreJT
  2. Latex 官方中文文档: 一份(不太)简短的 LATEX2ε 介绍

Latex 图片并排及子图标题设置

以下案例中可能使用到的宏包

  • 需要图片:graphics
  • 需要子图表:subfigure
  • 需要给每个图片定义小标题:subcaption
  • 修改图片的标题样式:caption
  • 案例中使用到的图片: 下载地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
\documentclass{ctexart}
\usepackage{graphicx}
\usepackage{subfigure}
\begin{document}
\begin{figure}
\centering
\subfigure[Small Box with a Long Caption]{
\label{fig:subfig:a} %% 为第一张图片添加标签
\includegraphics[width=1.0in]{figs/cat2}}
\hspace{1in}
\subfigure[Big Box]{
\label{fig:subfig:b} %% 为第二张图片添加标签
\includegraphics[width=1.5in]{figs/cat2}}
\caption{Two Subfigures}
\label{fig:subfig} %% 为整个大图添加标签
\end{figure}
\end{document}

01-不使用minipage并排插图.png

像其它的并列图形一样,子图也可以在小页环境中使用。而且在一些情况下, 这样做还能更方便的得到理想的图形间距。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
\documentclass{ctexart}
\usepackage{graphicx}
\usepackage{subfigure}

\begin{document}
\begin{figure}
\subfigure[Small Box with a Long Caption]{
\label{fig:mini:subfig:a} %% 为第一张图片添加标签
\begin{minipage}[b]{0.5\textwidth}
\centering
\includegraphics[width=1in]{figs/cat2}
\end{minipage}}%
\subfigure[Big Box]{
\label{fig:mini:subfig:b} %% 为第二张图片添加标签
\begin{minipage}[b]{0.5\textwidth}
\centering
\includegraphics[width=1.5in]{figs/cat2}
\end{minipage}}
\caption{Minipages Inside Subfigures}
\label{fig:mini:subfig} %% 为整个大图添加标签
\end{figure}
\end{document}

02-使用minipage并排插图.png

比较可发现
使用 minipage 环境:子标题的长度可以长于图片的长度

03-minipage with non-minipage.png

需求 2:那么如何引用大图当中的子图呢

这就发挥到 label 的作用了,label 标签相当于给子图片打上了一个标记,在引用的地方通过 ref 引用标签名即可

在图片环境的代码后面添加如下文字

1
2
3
4
5
6
%...
\end{figure}
%...

这里有一段文字需要引用图1中子图b。\ref{fig:mini:subfig:b} is a big cat!

04-交叉引用子图.png

需求 3:修改标签分隔符

包含子图的大图标题,图编号与图表题文字之间的分隔符为冒号,如何设置为英文句点,参考 caption 宏包使用文档(但是目前该文档似乎还没有中文翻译)

1
2
3
\usepackage{caption}
使用如下captionsetup命令需要使用到caption宏包
\captionsetup[figure]{labelformat=simple, labelsep=period}% 参数见以下分析

如何查看宏包的帮助文档

  1. 按住 shift,鼠标右键
  2. 使用 Powershell 打开
  3. texdoc 宏包名(比如 texdoc tabular

07-(Latex)查看宏包帮助文档.gif

标签格式设置

格式 说明
default 同 simple
empty 空格式,去除标签编号部分
simple 简单数字格式
brace 数字右括号格式
parens 带括号数字格式

标签分隔符

格式 说明
default 同 colon
none 无间隔
colon 英文分号
period 英文句点
space 空格
quad 一个 em 的间隔
newline 标题另起一行
endash 英文 dash 连接符

同理,对于子图当中标签分隔符的设置,只要将中括号中的 figure 改为 subfigure 即可

1
\captionsetup[subfigure]{...}

需求 4:如何修改交叉引用的图例

比如上图中,引用图 1 的子图 b,但是如何让 1(b) 显示为 图 1(b)
搜了一圈,似乎只能通过文字打上去 (lll¬ω¬)

1
2
3
4
5
6
%...
\end{figure}
%...

这里有一段文字需要引用图1中子图b。图\ref{fig:mini:subfig:b} is a big cat!

05-交叉引用图片格式.png

需求 5:多个子图,但是共享一个大标题,无需为子图添加标题

实际上就是在 figure 环境当中插入多张图片,但是只添加一个 caption

1
2
3
4
5
6
7
8
9
10
11
12
13
14
\documentclass{ctexart}
\usepackage{graphicx}

\begin{document}
\begin{figure}
\centering
\includegraphics[width=90pt]{figs/cat2} \qquad
\includegraphics[width=90pt]{figs/cat2}
\caption{There are two figure share one caption}
\label{share-one-caption}
\end{figure}

这里有一段文字需要引用图1。图\ref{share-one-caption}有两张子图组成
\end{document}

06-子图共享大标题.png

更高阶的应用

修改子图编号格式

1
2
3
\renewcommand{\thesubfigure}{\arabic{subfigure}}%使子图编号为a的格式
\renewcommand{\thesubfigure}{(\alph{subfigure})}%使子图编号为(a)的格式
\renewcommand{\thesubtable}{(\alph{subtable})} %使子表编号为(a)的格式

修改子图为 图 7.1 的形式

1
2
\renewcommand{\thefigure}{\arabic{chapter}.\arabic{figure}} %使图编号为7.1的格式 %\protect{~}
\renewcommand{\thetable}{\arabic{chapter}.\arabic{table}}%使表编号为7.1的格式

修改子图标题字体格式(详见 Caption 宏包选项和设置)

1
2
3
4
%子标题设置,编号为粗体,左对齐,文本正体
\captionsetup[subfigure]{labelfont=bf,textfont=normalfont,singlelinecheck=off,justification=raggedright}
%主标题设置
\captionsetup[figure]{labelformat=simple, labelsep=none}

参考资料

说明:

命令

命令以反斜杠开头,后面可跟花括号加参数,后面跟中括号表示可选参数

1
\documentclass[11pt,twoside,a4paper]{article}
1
2
\documentclass[UTF8]{ctexart}
% 这里的 ctexart,支持简体中文和英文的混排,指定文档的编码类型为 UTF8 格式

UTF8 是 TeXworks 编辑器默认使用的编码类型

中文的文档类为 ctexart(Chinese tex article)

.tex⇒.pdf
英文推荐:pdflatex
中文推荐:xelatex

源代码结构

documentclass 和 begin 之间的内容为导言(前言 preamble)「有点类似 HTML 当中的 head 标签」
介于 begin 和 end 之间的内容为正文「类似于 HTML 中是 body」

格式化命令

加粗:\textbf {要加粗的内容}
说明:bf 也就是 bold font 的缩写
斜体:\textit {要斜体的内容}
下划线:underline {下划线内容}

添加一个段落:输入两个换行符;「单独一个换行符只会生成一个空格」

1
2
3
4
5
6
7
% 章节
\section{章节的名字}
第一个章节中的内容
\subsection{第一个章节的子章节}
\subsubsection{三级章节}
\section{另一章节的名字}
第二个章节中的内容

插入图片

Latex 本身不支持插图功能,需要使用 graphicx 宏包辅助支持
如何控制图片的大小呢?在 graphicx 命令后加可选参数

1
2
\graphicx[width=0.5\textwidth]{这里是图片的名字}
% textwidth 表示当前文本区域的宽度,常用可选参数有:width,height,scale,angle

如果要为图片添加图注信息,则将图片嵌套在 figure 环境当中

1
2
3
4
5
\begin{figure}
\centering % 将图片居中对齐
\includegraphics{图片名字}
\caption{这个是图片的标题}
\end{figure}

列表

有序列表:enumerate
无序列表:itemize

1
2
3
4
5
\begin{itemize}
\item 列表项 1
\item 列表项 2
\item 列表项 3
\end{itemize}

数学公式

行内公式:可以使用 inline equation 直接在段落内添加公式,写在两个美元符号中间
行间公式:使用 equation 环境,「可以将环境简写为」

1
2
3
\[
公式内容
\]

一般符号:α,β……
指数上下标形式:^ and _
分式和根式

推荐:在线 Latex 公式编辑器 Equation Editor

表格

创建环境 tabular

1
2
3
4
5
6
7
\end{itemize}
\begin{tabular}{ c c c}
a11 & a12 & a13 \\
\hline
a21 & a22 & a23 \\
\hline
\end{tabular}

说明:

  • ccc 表示共表格共 3 列,且三列为居中对齐,如果是 CRR,表示第一列居中对齐,第二三列为右对齐
  • 单元格与单元格用 & 隔开
  • 表格一行结束使用两个反斜杠 \
  • 如果在参数 ccc 中插入竖线 | c|c|c|,可为表格添加垂直方向的边框
  • 水平方向的边框通过 \hline 添加
    和图片类似,如果表注,需要将表格添加的表的环境中「开始是 tabular,需要嵌入 table 环境中」,再使用 \caption {} 添加表注

注释

百分号开头,和 matlab 相同

正文文本

一个换行符等同于一个空格,多个空格的效果与一个相同
自然段分段式空一行

标题:title、author、date——maketitle
摘要 / 前言:abstract 环境 /chapter
目录:tableofcontents
章节:chapter,section
附录:appendix+chapter 或 section
文献:bibliography(自动生成参考文献)
索引:printindex

章节层次结构:

  • part:可选的最高层
  • chapter:report,book 类最高层
  • section:article 类最高层
  • subsection
  • subsubsection:默认不编号,不编目录
  • paragraph:默认不编号,不编目录
  • subparagraph:默认不编号,不编目录

正文符号

一些符号被 latex 宏语言占用,需要以命令形式输入:
比如反斜杠:\textbackslash

公式

  • 行内公式
  • 列表(显示公式)公式
    • 简单不编号的公式使用命令 \[ \]
    • 基本的编号的公式用 equation 环境(beq tab 键即可出来)
    • 更复杂的结构,使用 amsmath 宏包…

上标和下标:^ and _
分式:frac{分子}{分母}
根式:sqrt[次数]{根号下}
矩阵:amsmath 宏包提供了专门的矩阵环境,matrix,pmatrix,bmatrix 等

数学符号

  • 数学字母
  • 普通符号
    • 乘号:\times
    • 除号:\div
  • 二元运算符
  • 二元关系符:大于小于等于等
  • 括号
  • 标点:逗号,\colon 冒号,\semicolon 分号
  • 分式使用 \frac {分子}{分母} 形式书写;分式在行间正常大小显示,而如果在行中,则会被压缩
  • 根式使用 \sqrt [n 次]{内容}

数学公式

amsmath 是基本的数学工具包,在包含数学公式的文档中几乎无处不在,mathtools 则对 amsmath 做了一些补充和增强

科技功能

siunitx:数字单位的一揽子解决方案

1
2
\num{-1.2345e95}
\SI{12}{m/s}

编写化学式

chemformula 宏包(\ch 命令)

1
\ch{2 H2 + O2 -> 2 H2O}

使用Latex编辑化学反应式

列表与文本块

抄录代码

\verb | 这里是代码 |
\verbatim 环境

1
2
3
4
\begin{verbatim}
#include <stdio.h>
inputs('hello world!')
\end{verbatim}

使用Latex抄录代码

高级代码:语法高亮

使用 listings 宏包

算法结构

  • clrscode 宏包
  • algorithm2e 宏包

图表与浮动环境

画表图:使用 tabular 环境
表格转换为 latex 代码:https://tablesgenerator.com/latex_tables

在线表格转Latex

功能各异的表格宏包

  • 单元格处理:multirow、makecell
  • 长表格:longtable、xtab
  • 表线控制:booktabs(三线表)、diagbox(斜线表)
  • 综合应用:tabu

插图

graphics 宏包提供 \includegraphics 命令

代码画图

优先使用外部工具绘图,矢量图 Lnkscape(开源),Illustrator,甚至是 powerpoint(保存为 PDF 格式),数学图形使用 matlab 之类

浮动体

  • figure 环境
  • table 环境
    其他环境可以使用 float 宏包得到
    浮动体的标题使用 \caption 命令得到,自动编号

自动化工具

  • 自动目录
  • 交叉引用
  • PDF 的链接与书签(hyperref 宏包)
  • BIBTex
    • .bib 数据库
      • JabRef:管理 bib 数据库
    • \cite 命令引用
    • 末尾 \bibliography {math} 引用

设置文献格式

选用合适的.bst 格式,比如 plainnat,gbt7714-plain
natbib 与作者 - 年格式
利用 custom-bib 产生定制的格式文件
bilatex+biber:文献处理的新方式

设计文档格式

基本原则

格式与内容分离,不要在意细节上 Latex 的一大卖点

使用内容相关的命令与环境

只使用语义相关的的命令
比如推荐 emph,不推荐使用 textit
推荐 caption {流程图},不推荐 textbf {图 1:} 流程图

使用宏包

格式控制功能

字体

rmfamily,textrm
sffamily,textsf
ttfamily,texttt

字号

zihao{5},zihao{-3}

对齐

\centering,\raggedleft,\raggedright

空白间距

\hspace{2cm},vspace{3cm}

版面布局

geometry 宏包
fancyhdr 宏包(设置页眉页脚)

分页断行

linebreak、\\(一般表格的时候使用)
pagebreak,newpage,clearpage,cleardoublepage

盒子

\mbox {内容}
\parbox {4em}{内容},minipage

格式应用于文档

使用在导言区单独设置格式

直接设置相关参数:如 parindent,parskip,linespread(几倍行距),pagestyle(页眉页脚)
修改部分命令定义:thesection,labelenumi,descriptionlabe1,figurename
利用工具宏包完成设置:toclof 宏包设置目录格式

利用自定义命令和环境

例如,为程序名定义一个命令

1
2
\newcommand\prg[1]{\textsf{#1}}
程序 \prg{sort} 很有用

此后,如果想要修改 sort 的样式,那么直接修改我们自定义的命令,比如

1
2
\newcommand\prg[1]{\textbf{\huge #1}}
% huge 可以将 sort 字体变大

章节标题

ctex 宏包及文档类,用 \ctexset 定制,西文用 titlesec 等

浮动标题

caption 宏包
texdoc caption

列表环境的定制

enumitem 宏包

如设置列表不设置多倍行距

1
2
\usepackage{enumerate}
\setlist{nosep}

参考资料

初衷: 技术文章配图指南
参考视频: sketch 教程壹天上手
参考视频教程: 冷门但好用的 SKETCH 高频技巧
参考视频: Sketch Symbols 控件功能 - 善用组件 早点下班 - 新像素 UI 设计培训

为什么是 sketch

  1. 上手快,操作简单(让我想起了 sketchup 草图大师)
  2. 矢量图软件,可轻松到处不同倍率的图片
  3. 比 Adobe illustrator 体积更小,使用更流畅
  4. 软件稳定,没有碰到软件崩溃的情况,且没有保存按钮(软件会给我们自动保存)
  5. 有大量的第三方插件

常用快捷键

  1. 切片:S;切片时双击编组,可以快速选中编组进行导出
  2. 旋转:command+shift+R,按住 shift 键也可以整数旋转;按住 command 键拖动角点也可以实现旋转
  3. 选中形状吸取颜色:control+C
  4. 锁定:command+shift+L
  5. 隐藏:command+shift+H
  6. 导入图片:command+shift+K
  7. 快速复制:按住 option 拖动,command+D 可重复上一步移动复制变换
  8. 上移一层:command+]
  9. 下移一层:command+[
  10. 切换图层:Tab
  11. 连续缩放视图:command+ 滚轮键
  12. 微调形状尺寸:选中形状之后,按住 command+ 上下左右箭头移动 1px;可以加上 shift 移动 10px
  13. 复制样式:command+option+C
  14. 粘贴样式:command+option+V
  15. 注意:文字效果复制到形状是无效的,形状效果复制到文本是可以的。
  16. 调节图片透明度:选中图层,直接按数字键可以调整(比如按 10,设置透明度为 10%)
  17. 显示 / 隐藏除绘图区域的所有界面:command+.
  18. 穿透选择:按住 Command ,鼠标点击该元素,可以穿透编组进行选择

来做个小练习吧:)

sketch常用快捷键.png

如何连接两条线段

图层 –> 路径 –> 接合【layer –> paths –> join】

02-连接两条线段.png

如何获取封闭图形中的某条线段

02-连接两条线段.png

钢笔工具

钢笔工具可能是绘图中最常用和最实用的工具了
钢笔工具:V
闭合路径:钢笔右侧窗口的功能按钮
结束编辑:Enter

四种绘制模式,快捷键分别为数字键 1,2,3,4

  • 直线角模式:没有调节把手,
  • 镜像(对称模式):两边的把手的变化是一样的
  • 断开:左右把手不相关联
  • 不对称模式:两个锚点到主点之间的距离是独立的,但依然会有联系

移动节点:选中多个节点后(shift 可以加选),拖动节点可以移动节点
删除节点:选择节点,delete/backspace 即可
选择节点:可以通过节点框选工具,或者直接 shift 加选

快速复制(阵列)元素

按住 Alt 键拖拽复制一个相同元素,你可以继续按住 Command + D 复制更多的相同元素。

元素像素尺寸变成整数

不光适用于单个元素,当我们对一组元素进行缩放后,组内元素间距、大小、字号都不再是像素的整数倍时,只要选中组,点一下 Round To Pixel(对齐到像素)即可使所有元素尺寸、间距都恢复为像素的整数倍。在对齐形状时特别有用

02-对齐到像素.png

圆角半径

方法 1:点击形状进入选中模式,快速双击进入路径模式,可以选择需要圆角的角点进行圆角设置
方法 2:点击形状进入选中模式,在圆角半径框中输入 5;5;0;0 即可给不同点设置不同圆角数值

(sketch)设置圆角半径.png

高级应用

自适应布局

参考视频教程: 冷门但好用的 SKETCH 高频技巧

比方说可以实现的功能:保持元素间隔不变;拖拽后保持位置和大小;保持元素间隔不变
方法 1:通过创建控件时调整
方法 2:直接调整相对位置和固定大小,调整完之后可以在创建控件。一个是相对位置,一个是上下左右方向是否固定大小(对组合控件都是有效果的)

控件的使用

参考视频: Sketch Symbols 控件功能 - 善用组件 早点下班 - 新像素 UI 设计培训

组件化:UI 设计稿标准化
重点:如何给组件命名,斜杠的用处;斜杠就相当于多了一个层级,加上斜杠之后,(比如 card/default 和 card/clone)default 和 clone 属于一个层级,都在 card 之下。且斜杠的使用可以无限嵌套
如果组件套组件,如何将被套的组件做出控件
可以先将组件中需要做成组件的复制出来,然后创建组件,将原先的删除,将新创建的组件放进去
比如 button/wechat 和 button/alipay
控件(相当于 sketchup 中的组件)的用处

  • 在控件编辑区,直接在控件中添加文本,图形等都会直接影响到绘图区的所有控件
  • 命名逻辑:控件中可以手动更改的地方,在命名的时候可以加上一个符号等,后期复用控件的时候,一目了然知道这个控件哪些地方可以自定义修改
  • 比如想要更改组件的主体颜色,可以将背景设置成控件,然后将这个控件的名字命名好

(sketch)控件的层级关系.png

复用样式 & 复用符号

复用样式

也就相当于 word 中创建一个标题样式;与之相似,修改了应用了这个样式的属性,刷新一遍,所有应用了这个样式的元素都会跟着变化(就相当于 word 中将选中文字的样式赋予到标题样式中去了)

(sketch)复用样式.png

复用符号

双击复用符号,会跳转到复用符号的编辑界面,编辑完之后,可以返回实例(通过类创建的实例)
复制多个控件,当我们编辑其中一个控件时,其他的都会跟着变化;但是当我们修改了控件中的文字,不会都跟着变哦!!!【相当于整个框架没有变】
比如一个圆形里面填充了一张图片,将这个圆形创建控件之后,复制一个出来,此时就可以自己更改这个圆形里面的图片了,而不会影响到其他复制的控件
控件的意思是不是:创建了一个框架,使得框架中的内容变得可 “ 控 “

待续

或许可以转至 Figma 阵营,但是似乎有些 “不幸”,Adobe 同意以约 200 亿美元收购 Figma,以后可能就是 “Adobe Figma” 了

推荐工具

  • Caesium:可批量、图形化界面、不可压缩 gif
  • Compress-images:可批量、可压缩 gif,其他格式的图片当然也可以压缩
  • 以下的内容可以不用看了:)

Imagine 本地图片压缩

Github 项目名称:Imagine; GitHub 仓库

Imagine is a desktop app for compression of PNG and JPEG, with a modern and friendly UI.

优点:UI 界面,参数可视化可调;开源免费;支持中文;支持转为 webp 格式图片;本地
缺点:无法处理 gif 图片

ImagineUI界面

Compressio.app

在线 GIF 压缩 [Compressio.app]: 开源网址
github 仓库: 网址

优点:开源免费;跨设备运行;免安装;可自行搭建服务器
缺点:可能会涉及到隐私问题
Compressio.app界面

本地图片压缩 Compress-images

GitHub 仓库: Compress-images

命令行安装以下依赖:

1
2
3
4
5
6
7
npm install compress-images --save

npm install pngquant-bin@6.0.1 --save
npm install gifsicle@5.2.1 --save

注意不要升级随便升级版本,比如下面这段代码,升级之后报错(不知道为什么,可能识别不了)
npm install gifsicle --save

1、使用方法

请查阅下载的文档中的 example 示例的 Manual.txt

  1. 从 GitHub 仓库下载项目:
1
git clone git@github.com:semiromid/compress-images.git   
  1. 删除所有文件夹,除了 example 文件夹
  2. 在 example 文件夹打开命令行工具(vscode 打开),如下命令安装依赖
1
npm install compress-images --save
  1. 如遇到一下情况的报错,可能是不适合运行在某些系统上,可能需要对 example 文件中的 compress_images.js 做修改。
    PS: win7 测试,在压缩 png 图片时,需要将 pngquant 参数改为 pngcrush

pngquant2pngcrush

1
2
3
4
5
6
[1] "npm install pngquant-bin@6.0.1 --save" (It does not work properly on some OS). If you get error, you need edit './compress_images.js' and replace 'pngquant' on other PNG engine, as example on "pngcrush".
{png: {engine: 'pngcrush', command: false}},

[2] "npm install gifsicle@5.2.1 --save" (It does not work properly on some OS). If you get error, you need edit './compress_images.js' and replace 'gifsicle' on other GIF engine, as example "gif2webp"
{gif: {engine: 'gif2webp', command: false}}

  1. 运行 minify_Img.bat,如果报错缺少什么依赖,继续在命令行中安装

2、可能会遇到的问题

  1. 如果图片名太长,可能不能压缩处理,可先重命名在压缩
  2. 安装依赖可能会出现网络问题
  3. 最常见的错误就是上方第四点 pngquant|pngcrush;gifsicle|gif2webp 可能需要切换

3、自定义配置

  1. 下载的示例库已经创建好了输入文件夹和输出文件夹,层级关系已经设置好了。其实我们也可以自定义设置 input 和 output 文件夹

compress_images.js自定义设置界面

  1. 自定义配置参考文档:GitHub 仓库给了 7 中实例, 点击查看
    举例其中的集中方式:
    [1] 系数默认配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const compress_images = require("compress-images"),
INPUT_path_to_your_images,
OUTPUT_path;

INPUT_path_to_your_images = "src/img/**/*.{jpg,JPG,jpeg,JPEG,png,svg,gif}";
OUTPUT_path = "build/img/";

compress_images(INPUT_path_to_your_images, OUTPUT_path, { compress_force: false, statistic: true, autoupdate: true }, false,
{ jpg: { engine: "mozjpeg", command: ["-quality", "60"] } },
{ png: { engine: "pngquant", command: ["--quality=20-50", "-o"] } },
{ svg: { engine: "svgo", command: "--multipass" } },
{ gif: { engine: "gifsicle", command: ["--colors", "64", "--use-col=web"] } },
function (error, completed, statistic) {
console.log("-------------");
console.log(error);
console.log(completed);
console.log(statistic);
console.log("-------------");
}
);

[2]jpg⇒webp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
const compress_images = require('compress-images');

// We will be compressing images [jpg] with two algorithms, [webp] and [jpg];

//[jpg] ---to---> [webp]
compress_images(
"src/img/**/*.{jpg,JPG,jpeg,JPEG}",
"build/img/",
{ compress_force: false, statistic: true, autoupdate: true },
false,
{ jpg: { engine: "webp", command: false } },
{ png: { engine: false, command: false } },
{ svg: { engine: false, command: false } },
{ gif: { engine: false, command: false } },
function (err) {
if (err === null) {
//[jpg] ---to---> [jpg(jpegtran)] WARNING!!! autoupdate - recommended to turn this off, it's not needed here - autoupdate: false
compress_images(
"src/img/**/*.{jpg,JPG,jpeg,JPEG}",
"build/img/",
{ compress_force: false, statistic: true, autoupdate: false },
false,
{ jpg: { engine: "jpegtran", command: false } },
{ png: { engine: false, command: false } },
{ svg: { engine: false, command: false } },
{ gif: { engine: false, command: false } },
function () {}
);
} else {
console.error(err);
}
}
);

[3] jpg (webp)+gif (gifsicle)+png (webp)+svg (svgo),括号中的为压缩算法 / 格式转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
const compress_images = require('compress-images');

//[jpg+gif+png+svg] ---to---> [jpg(webp)+gif(gifsicle)+png(webp)+svg(svgo)]
compress_images('src/img/source/**/*.{jpg,JPG,jpeg,JPEG,gif,png,svg}', 'build/img/', {compress_force: false, statistic: true, autoupdate: true}, false,
{jpg: {engine: 'webp', command: false}},
{png: {engine: 'webp', command: false}},
{svg: {engine: 'svgo', command: false}},
{gif: {engine: 'gifsicle', command: ['--colors', '64', '--use-col=web']}}, function(){
//-------------------------------------------------
//[jpg] ---to---> [jpg(jpegtran)] WARNING!!! autoupdate - recommended to turn this off, it's not needed here - autoupdate: false
compress_images('src/img/source/**/*.{jpg,JPG,jpeg,JPEG}', 'src/img/combine/', {compress_force: false, statistic: true, autoupdate: false}, false,
{jpg: {engine: 'jpegtran', command: ['-trim', '-progressive', '-copy', 'none', '-optimize']}},
{png: {engine: false, command: false}},
{svg: {engine: false, command: false}},
{gif: {engine: false, command: false}}, function(){
//[jpg(jpegtran)] ---to---> [jpg(mozjpeg)] WARNING!!! autoupdate - recommended to turn this off, it's not needed here - autoupdate: false
compress_images('src/img/combine/**/*.{jpg,JPG,jpeg,JPEG}', 'build/img/', {compress_force: false, statistic: true, autoupdate: false}, false,
{jpg: {engine: 'mozjpeg', command: ['-quality', '75']}},
{png: {engine: false, command: false}},
{svg: {engine: false, command: false}},
{gif: {engine: false, command: false}}, function(){
//[png] ---to---> [png(pngquant)] WARNING!!! autoupdate - recommended to turn this off, it's not needed here - autoupdate: false
compress_images('src/img/source/**/*.png', 'build/img/', {compress_force: false, statistic: true, autoupdate: false}, false,
{jpg: {engine: false, command: false}},
{png: {engine: 'pngquant', command: ['--quality=30-60', '-o']}},
{svg: {engine: false, command: false}},
{gif: {engine: false, command: false}}, function(){
});
});
});
//-------------------------------------------------
});

4、压缩效果

图片压缩效果:文件从11M->2.2M

  1. 首先创建一个专门的文件夹
  2. 创建 imgs,PDFs 等子文件夹用于存储资源文件
  3. 注意所截取的图片一定要保存下来,在到 word 中插入图片【过程虽然比直接复制截图繁琐,但是这个图片以后如果用得到呢?难道还要在打开 PDF 进行截图吗】
  4. 截图的图片命名好名字,不要按照默认的时间命名
  5. 给图片添加题注,顺手的事情,因为图片的名字可以作为图片的图注
  6. 将图片和图注复制到其他文档中后,选择图注的域代码,按下 F9 即可更新图注,所以说前面给图片添加题注是一个好习惯,后期省的给图片添加图注
  7. 保存一份带有标题样式的 Word 模板
  8. 保存好使用到的 pdf 文件和图片,方便后期直接压缩包打包
    最后,一定要注意,文章中插入的信息要标注来源!!!