texlive_texworks_latex
Texlive
Linux下安装
sudo mount -t iso9660 -o ro,loop,noauto Downloads/texlive2019-20190410.iso /mnt
cd /mnt
sudo ./install-tl gui
sudo umount /mnt
- linux texlive
export PATH=/usr/local/texlive/2019/bin/x86_64-linux:$PATH
export MANPATH=/usr/local/texlive/2019/texmf-dist/doc/man:$MANPATH
export INFOPATH=/usr/local/texlive/2019/texmf-dist/doc/info:$INFOPATH
- 系统 texlive 检查
$ which latex
/usr/local/texlive/2021/bin/x86_64-linux/latex
无论是linux还是windows,安装texlive 都可以参考这里 Ref。
Windows下安装
打开cmd窗口并执行
Z:\install-tl-windows.bat --no-gui
可直接按键盘 I 在默认路径中直接安装TEX Live
TeX Live 2024 问题
问题描述:
Windows系统中,在使用tlmgr更新之后,就会出现一条警告:
>tlmgr update --self --all
Locale 'Chinese (Simplified)_China.936' is unsupported, and may crash the interpreter.
解决方法:
更改下Win10/11区域和语言的设置就行。设置→时间和语言→管理语言设置,弹出区域中选择非Unicode程序的语言中更改系统区域设置,把下面的UTF-8选项勾选后重启就好了。
参考来源:zhihu
中文字体设置
使用 CTeX 排版中文,目前主要可以使用两种方式:
- 使用
ctexart文档类(英文:documentclass) - 使用
ctex宏包(英文:package)
\usepackage[UTF8]{ctex}
获取字体
查看windows已安装字体,在命令窗口执行下面的命令:
fc-list :lang=zh >> c:\font.txt这个命令的作用是将计算机内所有的中文字体写入c盘下的font.txt文件内,然后我们查看一下font.txt的内容。
通过
Ctrl+F来找到“华文行楷”,然后记住STXingkai,就是它前面的内容,之后后用到这个。
REF查看linux已安装字体
fc-list
fc-list :lang=zh
字体安装
- 建立字体文件
建立/usr/share/fonts/tex_fonts目录
liupei@T470:/usr/share/fonts/tex_fonts$
把下载好的字体拷贝到/usr/share/fonts/tex_fonts目录下:
sudo cp ~/myfonts/* /usr/share/fonts/tex_fonts/
修改字体文件的权限,使root用户以外的用户也可以使用
sudo chmod -R 755 tex_fonts
- 建立字体缓存
sudo mkfontscale
sudo mkfontdir
fc-cache -fv
至此字体就安装成功了,如果需要安装其他字体,只需将字体拷贝到字体目录下,重新运行以上的命令即可。参考文献:EAST4021
- 字体卸载
# 完全卸载texlive
rm -rf /usr/local/texlive/2019
rm -rf ~/.texlive2019
字体设置
设置默认字体
\setmainfont{ }一般就是论文中西文部分默认使用的字体。通常到 Word 2003 为止,这里的默认字体都会是 Times New Roman。Linux 下也有同名字体。\setsansfont{ }是西文默认无衬线字体。一般可能出现在大标题等显眼的位置。这一部分经常碰上的字体会是 Helvetica/Arial。Linux下也有 Helvetica,前缀是 -adobe-helvetica-* 。这是一个古老的非抗锯齿版本(也就是不用 fontconfig 配置而使用 xfontsel),所以如今的 XWindow 环境应该不会再使用它作为屏幕字体。而 Windows 下的 Word 则经常会默认为 Arial。——之前我说Windows下也能看见Helvetica,应该是源自一些错误的印象。经再次确认,Word 和 Windows 本身都不自带 Helvetica。感谢@梁海 君指出 Windows 下没有 Helvetica。\setmonofont{ }是西文默认的等宽字体。一般用于排版程序代码。Courier 或者 Courier New 是常见的 Word 选项。Linux 下一般会有 Courier,但很少能看见 Courier New。\setCJKmainfont[BoldFont={ },ItalicFont={ }]{ }这个命令指定中文(或韩文日文)的默认字体。通常情况下,我见过的大部分文档论文会要求用宋体排版,实际上就是说的是SimSun。Linux 下可能用文鼎宋体代替,不过效果可能较差。另一点是和西文不同的地方,这个设置允许我们指定粗体和斜体应用何种字体代替。之所以有这个区别,是因为中文不使用粗体表示强调,也不使用斜体表示引文或书名号。我一般会指定BoldFont 和 ItalicFont 为某种黑体,Windows 环境下是SimHei,Linux 下我会用文泉驿正黑避免版权问题。但具体操作上可能需要灵活调整。有些高校的论文模板,比如我母校就是明确要求强调段落必须使用楷体(SimKai),只能照着要求设置。
参考文献:
latex帮助文档
命令行调出帮助
在 windows cmd,或 linux shell,输入一下命令:
texdoc lshort-zh
texdoc install-latex-guide-zh-cn
texdoctk
如果想知道都有哪些帮助,可以通过 texdoc 模糊搜索
texdoc -l beamer
查看有哪些 beamer 的帮助文档,然后再通过 texdoc 命令打开需要的文档。
html帮助
file:///usr/local/texlive/2021/doc.html
file:///usr/local/texlive/2021/index.html
ctex官方帮助:http://www.ctex.org/HomePage
ctex在线文档:http://www.ctex.org/OnlineDocuments
参考文献设置
LaTeX插入参考文献,可以使用BibTex,也可以不使用BibTex。
使用BibTeX-序号
这种方法需要建立参考文献数据库,引用的时候调用所需要的参考文献。
BibTeX 是一种格式和一个程序,用于协调LaTeX的参考文献处理. BibTeX 使用数据库的的方式来管理参考文献. BibTeX 文件的后缀名为 .bib . 先来看一个例子
$ cat 01_04.bib
@article{lincong2018,
title = {{样本迁移支持下的遥感影像自动分类方法}},
author = {林聪 and 李二珠 and 杜培军},
year = {2018},
journal = {测绘通报},
number = {04},
pages = {57--62},
keywords = {automatic classification,change detection,land cover,spectral curve shape vector,transfer learning,光谱形状编码,变化检测,土地覆盖,自动分类,迁移学习}
}
@article{wu2014,
title = {{迁移学习支持下的遥感影像对象级分类样本自动选择方法}},
author = {吴, 田军 and 骆, 剑承 and 夏, 列钢 and 杨, 海平 and 沈, 占锋 and 胡, 晓东},
year = {2014},
journal = {测绘学报},
volume = {43},
number = {09},
pages = {908--916},
language = {中文;},
keywords = {automation,change detection,land-cover,object-oriented classification,sample collection,transfer learning,变化检测,土地覆盖,对象级分类,样本选择,自动化,迁移学习}
}
在论文最末,\end{document}之前,插入如下两行命令:
\bibliographystyle{plain}
\bibliography{ref}
命令\bibliographystyle{plain}的作用是插入参考文献的样式,不同的杂志期刊的样式不一样,视个人情况。
命令\bibliography{ref}的作用是插入参考文献文件
常见的预设样式的可选项有8种,分别是:
plain,按字母的顺序排列,比较次序为作者、年度和标题;
unsrt,样式同plain,只是按照引用的先后排序;
alpha,用作者名首字母+年份后两位作标号,以字母顺序排序;
abbrv,类似plain,将月份全拼改为缩写,更显紧凑;
ieeetr,国际电气电子工程师协会期刊样式;
acm,美国计算机学会期刊样式;siam,美国工业和应用数学学会期刊样式;
apalike,美国心理学学会期刊样式;
引用文献:
\cite {引用文章名称}
参考文献:MOON学术论文写作
使用BibTeX-作者,年代
首先在导言区插入如下命令:
\usepackage{natbib}
\setcitestyle{authoryear,round}
在.tex文件文末插入如下命令:
\bibliographystyle{unsrtnat}
\bibliography{../Documents/01_04}
引用命令常用的有两类四种, 分别是\citet{...}, \citet*{...}, \citep{...}, \citep*{...}. 需注意的问题及命令使用规则:
在使用时花括号中的
...需用文献的bibtexkey替换.命令
\citet{…}和\citet*{…}表示只给年份加括号. 例如\citet{Fleming1975-Deterministic}的编译结果为:Fleming and Rishel (1975). 当作者数量 ≥ 3 时,\citet{…}编译结果中只会显示第一作者和年份, 例如:\citet{Chong2013TiB-mathematical}(此条文献共三位作者)的编译结果为:Chong et al. (2013). 若我们希望显示所有的作者, 可用\citet*{…}来处理, 例如\citet*{Chong2013TiB-mathematical}的编译结果为:Chong, Tchuenche, and Robert (2013).命令
\citep{…}和\citep*{…}表示给作者和年份都加括号, 效果为: (作者, 年份). 例如\citep{Hattaf2012IB-Optimal}编译结果为:(Hattaf and Yousfi, 2012). 当作者数量 ≥ 3 时,\citep{…}也会只显示第一作者, 我们可以使用\citep*{…}使其显示全部作者, 例如\citep*{Lahrouz2018PASMaiA-Dynamics}(此条文献共有四位作者)编译结果为:(Lahrouz, Mahjour, Settati, and Bernoussi, 2018).若之前使用的是数字格式引用, 即[1], [2]…的形式, 在初次加入上述命令时可能会报错, 只需把中间文件(不是你创建而是由电脑生成的那些文件)清除之后再次编译即可.
参考文献:Beta2187
显示所有文献
\nocite{*}
实例
\documentclass{article}
\usepackage[backend=biber, style=numeric]{biblatex} % 指定样式为 numeric
\addbibresource{references.bib} % 引用 .bib 文件
\begin{document}
这是一个引用示例:\cite{key2023}。
\printbibliography % 生成参考文献列表
\end{document}
参考来源:Frank
自动补全与拼写检查
texworks自动补全
环境类
对于环境的补全, 引导词第一个字母均为b, 后面字母个数不定, 但是, 对绝大多数的环境, 只需要使用环境名的前三个字母就行, 即为 “b+xyz+[tab]”.
比如 itemize 环境, 根据规则, 我们需要键入 “bite”, 然后按下tab键, 即得到了
参考文献:texworks使用指南
texworks拼写检查
使用字典步骤
- 下载词典
我们使用openoffice的词典即可, 到它的下载页面:OpenOffice 字典链接,找到合适的语言, 就可以下载了. 找到自己需要的语言,默认下载解压后是oxt文件。
- 安装字典
Help->Setting and resource
新建文件夹dictionaries,将刚才解压的文件放到 dictionaries 文件夹内 (The .oxt files can be renamed to .zip and then uncompressed to find the required .dic and .aff files.).
- 字典测试和使用
重启 TeXworks, 可以在“Edit→Spelling”中发现刚才成功安装的拼写词典. 为了每次都能使用, 去 “Edit→Preferences→Edit→Spell-check language”中选择刚才添加的词典, 这样就可以在拼写的时候帮我们进行检查了.
表格
长表格
使用宏包 \usepackage{longtable}
\begin{longtable}{ccc}
\caption{xxx\label{tab.xxx}}\\
\toprule
Name & Year & Targeted Language\\
\midrule
AutoFix-E \cite{wei_automated_2010} & 2010 & Eiffel \\
\bottomrule
\end{longtable}
自动换页并显示续表
\begin{longtable}{|*{11}{c}}
\caption{红辣椒Paprika(2006)} \label{tab:Paprika}\\
% 首页的表头
\toprule
1 & 10 & 1 & 10 & 1 & 10 & 1 & 10 & 1 & 10 & 1 \\
\midrule
\endfirsthead
% 续表的表头
\multicolumn{11}{c}{续表\ref{tab:Paprika} 辣椒Paprika(2006)}\\
\toprule
1 & 10 & 1 & 10 & 1 & 10 & 1 & 10 & 1 & 10 & 1 \\
\midrule
\endhead
% 表底
\bottomrule
\endfoot
% 表的数据
1 & 10 & 1 & 10 & 1 & 10 & 1 & 10 & 1 & 10 & 1 \\
1 & 13 & 1 & 13 & 1 & 13 & 1 & 13 & 1 & 13 & 1 \\
1 & 16 & 1 & 16 & 1 & 16 & 1 & 16 & 1 & 16 & 1 \\
\end{longtable}
参考文献:
multirow 内换行
使用 \shortstack
\multirow{7}{*}{\shortstack{交通运输\\用地} }
参考文献:
长表格某一页横排
使用 lscape 宏包提供的 landscape 环境,具体的命令如下:
\usepackage{lscape}
...
\begin{landscape}
This is a landscape page.
\end{landscape}
表格与页面同宽
参考文献:
设置表格整体宽度
- 通过设置每个单元格的宽度
\setlength{\tabcolsep}{1.5mm}{xxxx}
使用范例
\begin{table*}
\centering
\caption{Test}
\setlength{\tabcolsep}{1.5mm}{
\begin{tabular}{cc}
& & \\
\end{tabular}
\end{table*}
- 设置表格的整体宽度
\resizebox{\textwidth}{15mm}{XXXX}
小例子:
\begin{table*}
\centering
\caption{Test}
\resizebox{\textwidth}{16mm}{
\begin{tabular}{cc}
& & \\
\end{tabular}
\end{table*}
表格内容垂直居中
- 得导入array包,使用
\usepackage{array}
小例子
\begin{table*}
\centering
\caption{Test}
\begin{tabular}{|c|m{0.7\textwidth}|}
& & \\
\end{tabular}
\end{table*}
表格指定宽度并居中
居中
\begin{tabular}{ | c | c |}指定宽度
\begin{tabular}{ | c | p{2cm} |}指定宽度并居中, 可以指定宽度
p{2cm},再进行居中p{2cm}<{\centering}小例子
\begin{table}[htbp!]
\begin{tabular}{| l | p{11cm}<{\centering} |}
\hline
tab1 & tab2 \\
\hline
\end{tabular}
\end{table}
图片
图片旋转
\includegraphics[scale=0.5,angle=90]{../证书2017.jpg}
图片乱跑
- 在编辑器头部加入宏包
\usepackage{float}
然后,在插入图片的语句后加个[H]即可,如:\begin{figure}[H]
插入一张图片
\begin{figure}[htbp]% 调节图片位置,h:浮动;t:顶部;b:底部;p:当前位置,使用 float包的 H 参数,使图片固定在指定位置
\centering
\includegraphics[width=0.9\linewidth]{Figure/chutian.JPG}% 中括号中的为调节图片大小
\caption{chutian}
\label{chutian}%文中引用该图片代号
\end{figure}
插入多张图片(以2×2为例)
\begin{figure}[htbp]
\centering
\begin{minipage}{0.49\linewidth}
\centering
\includegraphics[width=0.9\linewidth]{Figure/chutian.JPG}
\caption{chutian1}
\label{chutian1}%文中引用该图片代号
\end{minipage}
\begin{minipage}{0.49\linewidth}
\centering
\includegraphics[width=0.9\linewidth]{Figure/chutian.JPG}
\caption{chutian2}
\label{chutian2}%文中引用该图片代号
\end{minipage}
%\qquad %让图片换行,
\begin{minipage}{0.49\linewidth}
\centering
\includegraphics[width=0.9\linewidth]{Figure/chutian.JPG}
\caption{chutian3}
\label{chutian3}%文中引用该图片代号
\end{minipage}
\begin{minipage}{0.49\linewidth}
\centering
\includegraphics[width=0.9\linewidth]{Figure/chutian.JPG}
\caption{chutian4}
\label{chutian4}%文中引用该图片代号
\end{minipage}
\end{figure}
使用子图
注意子页面 subfigure 的大小超过0.33,横排会容不下三个图片
\begin{figure}[htbp]
\centering
\begin{subfigure}{0.325\linewidth}
\centering
\includegraphics[width=0.9\linewidth]{Figure/chutian.JPG}
\caption{chutian3}
\label{chutian3}%文中引用该图片代号
\end{subfigure}
\centering
\begin{subfigure}{0.325\linewidth}
\centering
\includegraphics[width=0.9\linewidth]{Figure/chutian.JPG}
\caption{chutian3}
\label{chutian3}%文中引用该图片代号
\end{subfigure}
\centering
\begin{subfigure}{0.325\linewidth}
\centering
\includegraphics[width=0.9\linewidth]{Figure/chutian.JPG}
\caption{chutian3}
\label{chutian3}%文中引用该图片代号
\end{subfigure}
\caption{mother of chutian}
\label{da_chutian}
\end{figure}
参考文献:
多文件编译 | 分段编译
杂项
文档默认日期显示
文档默认日期显示
使用\date关键字并将{}里的内容置空即可,即:
\date{}
重新编译,这样就不显示时间了。
目录两个字居中
目录两个字居中
\begin{center}
\tableofcontents
\end{center}
不编号章节出现在目录
不编号的章节出现在目录中
\begin{document}
\maketitle
\tableofcontents
\addcontentsline{toc}{section}{个人综述} %
\section*{个人综述}
\section{test}
\section{try}
\end{document}
vscode 配置
下载并安装 vscode
安装插件
Latex Workshop配置
Settings.json文件配置方法:
- 点击
设置 - 打开右上角的
打开设置(json) - 输入以下内容
- 点击
"latex-workshop.latex.tools": [
{
"name": "xelatex",
"command": "xelatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOCFILE%"
]
},
{
"name": "pdflatex",
"command": "pdflatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOCFILE%"
]
},
{
"name": "latexmk",
"command": "latexmk",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdf",
"-outdir=%OUTDIR%",
"%DOCFILE%"
]
},
{
"name": "bibtex",
"command": "bibtex",
"args": [
"%DOCFILE%"
]
}
],
"latex-workshop.latex.recipes": [
{
"name": "XeLaTeX",
"tools": [
"xelatex"
]
},
{
"name": "PDFLaTeX",
"tools": [
"pdflatex"
]
},
{
"name": "BibTeX",
"tools": [
"bibtex"
]
},
{
"name": "LaTeXmk",
"tools": [
"latexmk"
]
},
{
"name": "xelatex -> bibtex -> xelatex*2",
"tools": [
"xelatex",
"bibtex",
"xelatex",
"xelatex"
]
},
{
"name": "pdflatex -> bibtex -> pdflatex*2",
"tools": [
"pdflatex",
"bibtex",
"pdflatex",
"pdflatex"
]
},
],
"latex-workshop.latex.clean.fileTypes": [
"*.aux",
"*.bbl",
"*.blg",
"*.idx",
"*.ind",
"*.lof",
"*.lot",
"*.out",
"*.toc",
"*.acn",
"*.acr",
"*.alg",
"*.glg",
"*.glo",
"*.gls",
"*.ist",
"*.fls",
"*.log",
"*.fdb_latexmk"
],
"latex-workshop.latex.autoClean.run": "onFailed",
"latex-workshop.latex.recipe.default": "lastUsed",
"latex-workshop.view.pdf.internal.synctex.keybinding": "double-click",
"editor.codeActionsOnSave": {},
"window.zoomLevel": 1,
"cmake.configureOnOpen": true,
"editor.wordWrap": "on"
参考文献:
tex转word
使用软件 pandoc,对于 xelatex编辑的有图、有公式的 tex 文件,通过以下命令,将 tex 转为 docx 文档
pandoc main.tex -o out.docx --filter pandoc-crossref --pdf-engine xelatex
关于参考文献,和模板,添加以下参数--bibliography=, --reference-doc=
pandoc mydoc.tex --bibliography=myref.bib --reference-docx=IEEE_template.doc -o mydoc.docx
pandoc 和 pandoc-crossref 工具的下载安装,
pandoc下载地址:pandoc 下载pandoc-crossref下载地址:pandoc-crossref 下载
pandoc 和 pandoc-crossref 版本要一致,不然会有警告提示导致未知错误。
将下载好的压缩文件解压,并存放在 ~/bin/ 目录下,直接运行上面的命令即可。
参考文献:
beamer
参考文献:
学习资源
- 黄旭华老师的翻译文档 beamer快速入门
- beamer官方文档
texdoc beamer
tikz
在引用 tikz 宏包之前,用户需要设置 PGF 系统驱动。比如 dvipdfmx 的设置方法如下,使用 pdflatex 和 xelatex 时,它知道驱动是谁。
\def\pgfsysdriver{pgfsys -dvipdfmx.def}
\usepackage{tikz}
\begin{document}
...
\end{document}
TikZ 宏包是一个十分强大的绘图宏包,它提供 \tikz 命令和 tikzpicture 环境,具体绘图指令可以放在 \tikz 后面,也可以放在 tikzpicture 中间。两者效果相同,用户可以任意选择。
\tikz ...
建议使用 tikzpicture 环境:
\begin{tikzpicture}
...
\end{tikzpicture}
TikZ 生成的流程图常常会带有大面积的空白边界(margin),插入 Word 后显得不协调。因此,通常使用 standalone 文档类,他会自动去除多余的空白:
\documentclass[tikz, border=2pt]{standalone} % border控制外边距大小
\usetikzlibrary{positioning, shapes, arrows.meta}
\begin{document}
\begin{tikzpicture}[
node distance=1.5cm,
process/.style={rectangle, draw, rounded corners, fill=blue!10, minimum width=2.5cm, minimum height=1cm, align=center}
]
\node[process] (a) {···};
\end{tikzpicture}
\end{document}
由于 word 中无法直接插入 pdf, 因此通常使用 pdf2svg flowchart.pdf flowchart.svg 命令,将 pdf 转换为 svg ,对于不能直接插入 svg 的如 word 2016, 可以使用 inkscape flowchart.svg --export-emf=outut.emf 命令,将 svg 转为 emf 矢量。
基本图形对象
使用 PGF 绘图的基本语法为:
\draw[option]...;
其中 \draw 称为绘图命令;后面的...部分称为操作;而[]中的能容称为可选项。
- 绘制一条直线
如果我们要绘制一条直线的话,我们只需要在 \draw 命令后面输入点的坐标并使用-- 连结起来即可。
\begin{tikzpicture}
\draw (1,3)--(2,2)--(4,5);
\end{tikzpicture}
可以通过[option]将图片中锋利的角变成圆角,在 option 处填写rounded corners
\begin{tikzpicture}
\draw[rounded corners] (1,3)--(2,2)--(4,5);
\end{tikzpicture}
如果想要绘制真正意义上的封闭图形,那我们需要使用 cycle 操作
\begin{tikzpicture}
\draw (1,3)--(2,2)--(4,5)--cycle;
\end{tikzpicture}
绘制矩形,只需要给出矩形的一对对角顶点然后将 rectangle 写在两者中间即可,如
\begin{tikzpicture}
\draw[rounded corners] (0,0) rectangle (4,2);
\end{tikzpicture}
矩阵也有圆角选项,设置方式与之前一样: [rounded corners]
- 圆、椭圆、弧形
- circle
给出圆心坐标和半径,然后将circle操作写在两者之间即可,注意半径值需要用小括号括起来
- circle
\begin{tikzpicture}
\draw (1,1) circle (1);
\end{tikzpicture}
- ellipse
给出椭圆的重心和长轴长、短轴长,然后将ellipse操作写在两者中间即可,注意,长轴长和短轴长需要用括号括起来,两者之间用and隔开
\begin{tikzpicture}
\draw (1,1) ellipse (2 and 1);
\end{tikzpicture}
- arch
\begin{tikzpicture}
\draw (1 ,1) arc (0:270:1);
\draw (6 ,1) arc (0:270:2 and 1);
\end{tikzpicture}
其中,参数 0:270 代表的是 0\degree 到 270\degree,即图片分别绘制了一个圆心在 (1,1),半径为 1 的四分之三圆弧, 和一个中心在 (6,1) ,长轴长为 2 、短轴长为 1 的四分之三椭圆弧。在终止角度之后,使用一个冒号隔开终止角度与半径(长轴长 and 短轴长)。
- 曲线
把直线的 -- 换成 .. ,就得到贝塞尔曲线,它需要至少一个控制点。抛物线用 parabola 操作,bend 操作可以指明顶点。
如下:(5,1) 代表抛物线的起点,(6,0) 代表抛物线的顶点,(7.414 ,2) 代表抛物线的终点。如果要填充某些特殊点,用 \filldraw 命令
\begin{tikzpicture}
\draw (5,1) parabola bend (6,0) (7.414 ,2);
\filldraw (5,1) circle (.1)
(6,0) circle (.1)
(7.414 ,2) circle (.1);
\end{tikzpicture}
- 网格
网格的画法如下,其缺省步长是 1cm 。grid 操作需要起止点两个参数。help lines 参数指示用 0.2pt 的灰线。
\begin{tikzpicture}
\draw [step=20pt] (0,0) grid (3,2);
\draw [help lines ,step=20pt] (4,0) grid (7,2);
\end{tikzpicture}
绘制网格类似于绘制矩形,起点和终点类似于我们在绘制矩形时给出的一对矩形的对角顶点,我们将 grid 操作放在这一对点之间即可。step 是步长,即每一个小单元格的边长(小单元格均为正方形),其单位是 pt 。如果我们想要单元格的长度大一点的话那我们就将步长设置的大一些,否则就设置的小一些。
图形控制
- 箭头
一些绘制箭头的命令如下:
\begin{tikzpicture}
\draw [->] (0,0)--(9,0);
\draw [<-] (0,1)--(9,1);
\draw [<->] (0,2)--(9,2);
\draw [>->>] (0,3)--(9,3);
\draw [|<->|] (0,4)--(9,4);
\end{tikzpicture}
绘制箭头的命令很简单,不需要任何操作。[]仍是选项,这个选项中是你要绘制的箭头的形式,其中 < 和 > 代表了箭头两侧的指向,而 — 表示线。因为我们的箭头都是有限长度的,所以,我们需要在[]后面指定箭头的起点和终点,而线是直线,所以我们仍使用--连接起点和终点。
- 线型和线宽
PGF 中线条的缺省宽度是0.4pt,线型是实线。下例给出了改变线型和线宽的方法:
\begin{tikzpicture}
\draw [line width =2pt] (0,0)--(9,0); %加粗实线
\draw [dotted] (0,1)--(9,1); %点状虚线
\draw [densely dotted] (0,2)--(9,2); %较密的点状虚线
\draw [loosely dotted] (0,3)--(9,3); %较疏的点状虚线
\draw [dashed] (0,4)--(9,4); %线状虚线
\draw [densely dashed] (0,5)--(9,5); %较密的线状虚线
\draw [loosely dashed] (0,6)--(9,6); %较疏的线状虚线
\end{tikzpicture}
- 样式
样式一旦被定义了就可以像面向对象的类一样被继承。也就是说我们可以在导言区定义一个样式,然后将来我们可以直接在文本区调用它。比如:
\tikzset{
dline/.style ={color = blue, line width =2pt}
}
\begin{document}
...
\begin{tikzpicture}
\draw[dline] (0,0) --(9,0);
\end{tikzpicture}
...
\end{document}
除了用\tikzset 命令定义样式,我们也可以在 tikzpicture 环境头部声明样式。前者是全局有效,后者则是局部范围有效。
\begin{tikzpicture}[dline /. style ={line width =2pt}]
\draw[dline] (0,0) --(9,0);
\end{tikzpicture}
- 图形变换
我们可以对图形对象进行一些变换操作,比如缩放(scale)、平移(shift)、倾斜(slant) 、旋转(rotate)、定点旋转(rotate around) 等。注意如果两种操作同时进行,它们是有顺序的。预定义的长度单位在这里对单向平移选项(xshift或yshift) 失效。我们以正方形为例,来看看如何对它进行上述变换。首先,先来画一个正方形:
\begin{tikzpicture}
\draw (0,0) rectangle (2,2);
\end{tikzpicture}
对其进行平移变换:
\begin{tikzpicture}
\draw (0,0) rectangle (2,2);
\draw[shift ={(3 ,0)}] (0,0) rectangle (2,2);
\draw[shift ={(0 ,3)}] (0,0) rectangle (2,2);
\draw[shift ={(0 ,-3)}] (0,0) rectangle (2,2);
\draw[shift ={(-3 ,0)}] (0,0) rectangle (2,2);
\draw[shift ={(3 ,3)}] (0,0) rectangle (2,2);
\draw[shift ={(-3 ,3)}] (0,0) rectangle (2,2);
\draw[shift ={(3 ,-3)}] (0,0) rectangle (2,2);
\draw[shift ={(-3 ,-3)}] (0,0) rectangle (2,2);
\end{tikzpicture}
还可以指定平移方向和平移距离。xshift 表示水平平移;yshift 表示竖直平移,后面直接跟平移的距离即可(可为负数),平移距离的单位是pt:
\begin{tikzpicture}
\draw (0,0) rectangle (2,2);
\draw[xshift =100pt] (0,0) rectangle (2,2);
\draw[xshift =-100pt] (0,0) rectangle (2,2);
\draw[yshift =100pt] (0,0) rectangle (2,2);
\draw[yshift =-100pt] (0,0) rectangle (2,2);
\end{tikzpicture}
需要注意的是如果指定了平移的方向那么后面就不能使用坐标了,而只能自定义平移距离。
下面我们再来看看缩放变换:
\begin{tikzpicture}
\draw (0,0) rectangle (2,2);
\draw[xshift =70pt ,xscale =1.5] (0,0) rectangle (2,2);
\draw[yshift =70pt ,yscale =1.5] (0,0) rectangle (2,2);
\draw[xshift =-70pt ,xscale =0.5] (0,0) rectangle (2,2);
\draw[yshift =-70pt ,yscale =0.5] (0,0) rectangle (2,2);
\end{tikzpicture}
注意,缩放变换是不需要平移的!这里用了平移是为了方便一次性说明所有缩放的效果。
xscale = a:指定水平方向缩放a倍。若a>0则代表水平方向放大(水平拉长);若a<0则代表水平方向缩小(水平缩短);yscale = a:指定竖直方向缩放a倍。若a>0则代表竖直方向放大(竖直拉长);若a<0则代表竖直方向缩小(竖直缩短);
还有一种更特殊的缩放方式,就是对图形进行整体缩放:
\begin{tikzpicture}
\draw (0,0) rectangle (2,2);
\draw[shift ={(3,0)},scale =1.5] (0,0) rectangle (2,2);
\draw[shift ={(-2 ,0)},scale =0.5] (0,0) rectangle (2,2);
\end{tikzpicture}
scale = a:指定整体缩放 a 倍。若 a>0 则代表整体放大;若 a<0 则代表整体缩小;
旋转变换:
\begin{tikzpicture}
\draw (0,0) rectangle (2,2);
\draw[xshift =125pt ,rotate =45] (0,0) rectangle (2,2);
\end{tikzpicture}
rotate 后面的数值写要旋转的角度,正数表示逆时针旋转相应角度,而负数表示顺时针旋转相应角度,这与数学上的正方向规定是一致的。
而且如果没有指定对某个点进行旋转的话那么默认是对起点进行旋转,上例中即 (0,0)
还有一个倾斜变换:
\begin{tikzpicture}
\draw (0,0) rectangle (2,2);
\draw[xshift =70pt ,xslant =1] (0,0) rectangle (2,2);
\draw[yshift =70pt ,yslant =1] (0,0) rectangle (2,2);
\end{tikzpicture}
最后一个就是我们的定点旋转了:
\begin{tikzpicture}
\draw (0,0) rectangle (2,2);
\draw[xshift =125pt ,rotate =45] (0,0) rectangle (2,2);
\draw[xshift =175pt ,rotate around ={45:(2 ,2)}] (0,0) rectangle (2,2);
\end{tikzpicture}
定点旋转的只需要在 rotate aroun 后面的 {} 中写上旋转的角度和指定点的坐标即可。旋转的方向与非定点旋转时的方向规定一致。
最后一定要说明的一点就是无论是使用哪种变换操作,后面一定要更被操作的对象!比如上面的几个例子中,每次变换后面都跟了(0,0) rectangle (2,2) 这个对象,也就是我们的正方形。
- 颜色和填充
PGF 可以结合 xcolor 宏包的色彩功能。颜色和填充的用法见下例,其中 \filldraw 命令可以用不同颜色画线和填充。注意封闭路径才可以填充!
\begin{tikzpicture}
\draw[red] (0,0) --(9,0);
\draw[green] (0,1) --(9,1);
\draw[blue] (0,2) --(9,2);
\filldraw[draw=blue!80,fill=blue!20] (14 ,1) circle (1);
\end{tikzpicture}
上例中如果我们想设置直线的颜色, 那么我们可以直接在 \draw 命令后面的选项中填写颜色即可。\filldraw 命令的选项中,draw 是为封闭图形的边界设置颜色,而fill是对封闭图形的内部填充颜色。
示意图
- 节点
PGF 中的节点(node) 可以是简单的标签,也可以有各种形状的边框,还可以有各种复杂的属性。比如下例中的box样式,它的边框是矩形,有圆角;它有最小宽度、高度、文字和边框的距离,边框和填充颜色等属性。
\tikzset{
box/.style ={
rectangle, %矩形节点
rounded corners =5pt, %圆角
minimum width =50pt, %最小宽度
minimum height =20pt, %最小高度
inner sep=5pt, %文字和边框的距离
draw=blue %边框颜色}
}
- 流程图
除了上述属性,节点还可以有名字、位置等属性。在下例中,我们先画了三个有名字和边框的节点,也就是文本框;然后用两跳箭头连线把文本框连接起来,注意连接时要引用文本框的名字;接着在连线上加了两个没有名字和边框的标签。
\begin{tikzpicture}
\node[box] (1) at(0,0) {1};
\node[box] (2) at(4,0) {2};
\node[box] (3) at(8,0) {3};
\draw[->] (1)--(2);
\draw[->] (2)--(3);
\node at(2,1) {a};
\node at(6,1) {b};
\end{tikzpicture}
\node 命令是绘制节点,[]还是选项,这个选项中可以填我们之前自定义的box,如果填了box 那么他就会按照box 所定义的样式绘制节点,否则就按缺省模式绘制。()中写的是文本框的名字,这个名字可以随便取,{}是文本框中的文本,而at+坐标表示的是节点所处的位置。
也可以绘制一棵树:
\begin{tikzpicture}[sibling distance =80pt]
\node[box] {1}
child {node[box] {2}}
child {node[box] {3}
child {node[box] {4}}
child {node[box] {5}}
child {node[box] {6}}
};
\end{tikzpicture}
child 关键字用来声明子节点;sibling distance 选项可以控制相邻节点之间的距离,单位为pt。当然,你可也以使用圆形节点,将box\.style 中的rectangle 换成circle 并删除rounded corners选项,并将minimum width 的值和minimum height 的值设为同一个值,比如这里都设置为20pt:
填充,在box\.style 在添加一项fill = blue!20即可.
用流程图搞一个神经网络
\begin{tikzpicture}
\node[circle,
minimum width =30pt ,
minimum height =30pt ,draw=blue] (1) at(0,2){$x_1$};
\node[circle,
minimum width =30pt ,
minimum height =30pt ,draw=blue] (2) at(0,0){$x_2$};
\node[circle,
minimum width =30pt ,
minimum height =30pt ,draw=orange] (3) at(2,-1){$a_3^{(2)}$};
\node[circle,
minimum width =30pt ,
minimum height =30pt ,draw=orange] (4) at(2,1){$a_2^{(2)}$};
\node[circle,
minimum width =30pt ,
minimum height =30pt ,draw=orange] (5) at(2,3){$a_1^{(2)}$};
\node[circle,
minimum width =30pt ,
minimum height =30pt ,draw=orange] (6) at(4,-1){$a_3^{(3)}$};
\node[circle,
minimum width =30pt ,
minimum height =30pt ,draw=orange] (7) at(4,1){$a_2^{(3)}$};
\node[circle,
minimum width =30pt ,
minimum height =30pt ,draw=orange] (8) at(4,3){$a_1^{(3)}$};
\node[circle,
minimum width =30pt ,
minimum height =30pt ,draw=purple] (9) at(6,2){$a_1^{(4)}$};
\node[circle,
minimum width =30pt ,
minimum height =30pt ,draw=purple] (10) at(6,0){$a_2^{(4)}$};
\draw[->] (1) --(3);
\draw[->] (1) --(4);
\draw[->] (1) --(5);
\draw[->] (2) --(3);
\draw[->] (2) --(4);
\draw[->] (2) --(5);
\draw[->] (3) --(6);
\draw[->] (3) --(7);
\draw[->] (3) --(8);
\draw[->] (4) --(6);
\draw[->] (4) --(7);
\draw[->] (4) --(8);
\draw[->] (5) --(6);
\draw[->] (5) --(7);
\draw[->] (5) --(8);
\draw[->] (6) --(9);
\draw[->] (6) --(10);
\draw[->] (7) --(9);
\draw[->] (7) --(10);
\draw[->] (8) --(9);
\draw[->] (8) --(10);
\end{tikzpicture}
函数图像绘制
tikz宏包还可以帮助绘制函数图像,比如:
\begin{tikzpicture}
\draw[->] (-0.2,0) --(6,0) node[right] {$x$};
\draw[->] (0,-0.2) --(0,6) node[above] {$f(x)$};
\draw[domain =0:4] plot (\x ,{0.1* exp(\x)}) node[right] {$f(x)=\frac{1}{10}e^x$};
\end{tikzpicture}
其中 domain 设置了我们想要绘制的范围,起始点和终止点之间用 : 隔开。plot 是绘制操作,node后面[]中填写我们文本的位置。
不过想要绘制函数图像的话我推荐一个一定会让你感觉很惊艳的网站(这是另外一个宏包了,叫做 pgfplots),如果你想画各种函数图像、曲面、三维矢量场、统计图等等:pgfplots.sourceforge.net










