Tex使用指南

TEX(TeX)是由著名的计算机科学家Donald E. Knuth(高德纳)发明的排版系统,利用TeX可以很容易地生成高质量的dvi文件,打印输出。利用dvips,dvipdfmx,pdfLaTeX等程序生成pdf,ps,文件,LaTeX2html生成html文件。 它在学术界十分流行,特别是数学、物理学和计算机科学界。TeX被普遍认为是一个很好的 排版工具,特别是在处理复杂的数学公式时。利用诸如是LaTeX等终端软件,TeX就能够排版出精美的文本。

CTAN 就是 the Comprehensive TeX Archive Network,它以 HTTP 或 FTP 的形式提供大量 TeX 相关资源的下载。在 CTAN 上可以下载到最新版本的主要 TeX 发行版,如 TeX Live、MiKTeX,可以下载免费的 TeX 相关编辑器、支持工具、附件,如 LyX、WinEdt、GhostScript、TpX 等。几乎所有 TeX 宏包都发布在 CTAN 上,如果 TeX 发行版提供的包管理器无法安装部分宏包,也可以从 CTAN 下载。通过CTAN上的宏包可以扩展其功能,可以作幻灯片,定义模板。中文支持可以由CCT、CJK等来完成。

参考文献:

TEX排版

tex是Knuth开发的排版语言。Latex是在Tex基础上开发的一个扩展,使之更易用,它的底层还是tex。而Texlive和Ctex是两个套版。界面编辑器有winedt(CTEX自带),texworker(TEXLIVE自带),texmaker, texstudio,Sublime Text等。

推荐使用组合:

  • 前期文档使用底层Texlive+界面编辑器texstudio
  • 后期添加参考文献推荐使用Texlive+Sublime Text(可以检索参考文献关键词,调用smartPDF预览修改)

CTEX

CTex + Texmaker

Texmaker 本身只是一个前台软件,但是设计精良。如果已经安装了CTex,再安装Texmaker,可以直接利用CTex里提供的编译工具,只需要一些简单的配置操作。

CTex安装会自动配置好路径,无需用户自己设置。因此,关键在于Texmaker的设置。打开Texmaker,执行:选项->配置Texmaker,更改相应路径如下:(我的CTex安装到了D盘的Program Files里的CTex文件夹下,具体安装路径需根据情况自行更改)

Texlive

一直以来,包括早期的编译工具,latex与pdflatex截然分开,使用latex命令编译,源文件中包含的图片格式必须为eps,先生存ps文档,在将其转换成pdf文档;使用pdflatex命令编译,源文件中必须包含pdf格式 (当然,也可谓其他格式,如jpg,png等)的图片。如果你用pdflatex命令编译含eps的源文件时,就会出现报错信息。这种情况在我使用CTex套件时就是这样。好像本来也应该就是这样。

使用Texlive2015时情况有了改观。当你使用pdflatex编译含eps图片的源文件时,编译命令会自动将该eps图片转换成pdf类型的图片,最后生成pdf文档,整个过程一气呵成,没有任何报错信息。

TEXLIVE + Texstudio

  1. 先下载安装TEXLIVE1。下载后右键管理员,install-tl-advanced.bat按步骤即可。点击Continue即可,对于某些装了杀毒软件的,最好先关了,以免误报。安装结束后,记住在点“完成”之后要把cmd关掉。在Win7下,TeX Live提供的字体会自动为XeTeX所用。
  2. 然后下载安装Texstudio 2 3,安装可以选择安装包或者 Portable Edition(绿色版,需要自己配置MiKTeX路径)。点点点就可以了,再没有其他TEX工具时程序会自动配置成TEXLIVE。
  3. 解压软件到任意文件夹,打开TeXstudio.exe,选择 Options - Configure TeXstudio,打开选项卡,选择Command,编辑右侧的命令,配置MiKTeX、ghostscript和pdf阅读器等。

TexStudio语法检查

详情点击查看对TexStudio配置拼写和语法检查LanguageTool功能

  1. 下载插件LanguageTool。TexStudio 2.12.2 (+) 版本: 仅支持LanguageTool 3.5之后 版本。TexStudio版本2.12.2及之后的版本,支持JSON格式的调用,这里我们下载.zip格式的文件: LanguageTool-3.6.zip。将下载的插件解压缩到任意全英文目录。

  2. 根据电脑类型java JRE下载,安装。

  3. 右击我的电脑->属性->高级->环境变量。然后把Java.exe/javaw.exe所在的路径(C:Files)加入PATH环境变量。

  4. 打开命令行窗口cmd.exe, 转到languagetool所在目录,运行如下命令启动”java –jar languagetool.jar”, 会出现languagetool的窗口,如下图。打开languagetool后,在选项上勾选”运行服务器端口: 8081”。之后关闭languagetool窗口。(配置好后,以后就不需要了)

    1
    2
    e:
    cd /tools/tex/LanguageTool-3.6 %LanguageTool-3.6所在路径

  5. TexStudio启用拼写检查。打开TexStudio, 菜单-option-configure Texstudio,找到”Language Checking”标签项,设置好Spell check, wordlist directory, default language设置为“en_US”。

  6. TexStudio 启用LanguageTool。同样的上述选项卡,”LanguageTool”处,填写如下内容: Server URL: http://localhost:8081,Java: 选择javaw.exe (注意不是java.exe。 仅针对windows平台)。LT Path: .jar。LT Argements: (可以不填或者默认)。然后重新启动 TexStudio。

LanguageTool 不起作用 解决: 分几步检查问题所在 i) 是否版本匹配: TexStudio 2.12.0之前只能使用LauguageTool 2.x版本, TexStudio 2.12.2版本使用LanguageTool 3.6 及之上版本 ii) 打开TexStudio之后, 打开浏览器,输入地址: http://localhost:8081 会出现提示:Error: Missing 'text' parameter。如果未出现类似提示,请检查是否javaw.exe路径设置不正确。

TeXLive + Sublime Text

Sublime Text:一款具有代码高亮、语法提示、自动完成且反应快速的编辑器软件,不仅具有华丽的界面,还支持插件扩展机制,用她来写代码,绝对是一种享受。相比于难于上手的Vim,浮肿沉重的Eclipse,VS,即便体积轻巧迅速启动的Editplus、Notepad++,在SublimeText面前大略显失色,无疑这款性感无比的编辑器是Coding和Writing最佳的选择,没有之一。

在cite的时候可以输入关键词选择。而texstudio只能显示引用关键词。

  1. 安装TEXLIVE

  2. 安装SUBLIME TEXT + PACKAGE CONTROL + LATEXTOOLS

  3. 安装 SUMATRAPDF,下载地址。SumatraPDF 是一个轻量级的PDF阅读软件,绿色单文件,此处用于TeX源文件编译后的预览。支持 PDF、ePub、MOBI、CHM、XPS、DjVu、CBZ、CBR 等格式。

    • 将 SumatraPDF 的主程序目录(C:Files)添加到环境变量PATH,这一步很重要,否则下一步会无法进行。

    • 打开命令提示符(cmd.exe),执行以下命令:(将其中的安装路径替换成你实际的安装路径)

      1
      sumatrapdf.exe -inverse-search "\"C:\Program Files\Sublime Text 3\sublime_text.exe\" \"%f:%l\""
  4. 配置 LATEXTOOLS

    • 在 Sublime Text 中,打开 Preference 菜单,找到 Package Settings->LaTeXTools->Settings – User ,在Platfrom settings段,根据自己的系统,修改相应的配置。

      1
      2
      "texpath" : "C:\\texlive\\2016\\bin\\win32;$PATH",
      "distro" : "texlive",//miktex
  5. 至此,环境搭建完成。可以利用以下的测试文章来测试环境。编辑完成后 Ctrl+S 保存为 xx.tex(新建的文件一定要先保存,否则 build 是无效的),然后手工在 Tools->Build System 中选择 LaTeX ,最后通过 Ctrl+B 来编译。

    1
    2
    3
    4
    5
    6
    %!TEX program = xelatex
    \documentclass[UTF8]{ctexart}
    \begin{document}
    This is the context of the article.
    这就是文章的所有内容。
    \end{document}

Texlive: JPG to EPS格式

使用tex live command line,在命令行中输入待转化的图片,格式为:sam2p xxx.jpg xxx.eps。如果图片不在当前目录,请在文件名前加上文件路径,该方法转化的图片质量较高。

报错解析

! File ended while scanning use of @newl@bel.

解决方法:删除编译文件夹内.aux扩展名结尾的文件,重新用Latex命令进行编译,自动生成正确的aux文件即可。

TEX中文

TeX Live 2009 的 LaTeX 中文支持
TexLive的中文编辑——xeTex,xeLatex

未测试

LaTeX 本身虽然变化不大,但中文处理的技术近两年发展飞快,像CCT这种老古董应该没有什么人用了吧。现在(2015 年 6 月)我们推荐使用 XeTeX 引擎或 LuaTeX 引擎处理中文,使用支持 XeLaTeX 和 LuaLaTeX 的 ctex 宏包和文档类(版本 2.0 以上)解决中文版式习惯的问题。在系统配置方面,使用 TeX Live 2015 或 MiKTeX 2.9 以上版本。其中 MiKTeX 或 CTeX 套装应在安装后在线更新 MiKTeX。

处理中文时,编辑器保存中文使用的文件编码是重要的,须以UTF8 编码保存 (或者用记事本打开并另存为,编码选项选择UTF-8)。在 Windows 下,大部分 LaTeX 编辑器都支持多种汉字编码,但编辑器默认编码可能是 UTF-8,也可能是本地编码(中文系统是 GBK)。

  • TeX Live 与 CTeX 套装都自带有 TeXworks 编辑器,其默认编码是 UTF-8。可以在选项中修改。
  • 随 CTeX 套装安装的 WinEdt 编辑器,默认使用本地编码;但如果是自己下载安装的 WinEdt,默认编码是 UTF-8。可以点击 WinEdt 的状态栏选择编码。

完整安装 CTeX 套装、MikTeX 套装、TeXLive 套装,然后选择一款自己喜欢的,最好良好支持 UTF8 编码的文本编辑器,然后

1
2
3
4
5
6
\documentclass{ctexart}
\usepackage[UTF8]{ctex}
\begin{document}
中文English
\[E = m c^2\]
\end{document}

使用 pdflatex 或者 xelatex 编译即可。

中文乱码

在文档首行增加一句:!TEX encoding = System

CJK packages

要用中文只要安装texlive-lang-cjk这个包就行了

1
2
3
4
5
sudo aptitude install texlive-lang-cjk

or

sudo apt-get install texlive-lang-cjk

安装好之后,也并不能直接在.tex文件中写中文。首先要加usepackage{CJK}这个命令,然后在有中文的段落前后要有begin{CJK}{UTF8}{gbsn}end{CJK}。其中gbsn代表是宋体,可以替换成其他的格式,比如gkai(楷体)。加了这些东西之后,就可以用TexLive编辑中文了4

CCT 模板编译

国内有不少期刊依旧在使用过时的 CCT 方式来支持中文,这些模板非常相似,似乎系出同源。虽然 CTeX 里还保留了 CCT,但是和这些编写模板时的版本已经不同;至于 TeX Live 里,根本就没有 CCT 系统。所以,编译报错也就是自然而然的事情了。陈旧的模板与现代的 TeX 发行版之间的矛盾不可调和,因此必有一方需要妥协。

这篇文章【LaTeX Tips】国内期刊 CCT 模板编译经验提出了一些帮助。

你可以到下载 CTeX 并安装。CTeX 里的 WinEdt 有一个 CCTLaTeX 按钮,点击它之后,可以正确编译得到 .dvi.ps 文件,如果需要 .pdf 文件可以用 ps2pdf 工具转换。

如果你坚持使用现代的发行版,那么就需要对模板进行一些微调。这里提供两种方法,两种方法均适用于各个操作系统5

使用 ctexart

  • \documentclass 里载入的文档类,从 cctart 更换为 ctexart
  • 下载本站提供的 vatola.styheadrule.sty 两个宏包文件(2014-12-17 更新);
  • 到 CTAN 上下载 slashbox 宏包 并安装;
  • 将上述三个宏包安装至 TEXMFLOCAL,然后执行 texhash 命令;或者直接将它们放在与模板文件相同的文件夹里面;
  • 使用 pdfLaTeX 编译,可以得到与原模板几乎完全一致的结果;
  • 正式投稿时,只需要将 ctexart 换回 cctart 即可。

字体大小

Latex设置字体大小,字体大小命令由小到大依次为:

1
2
3
4
5
6
7
8
9
10
\tiny
\scriptsize
\footnotesize
\small
\normalsize
\large
\Large
\LARGE
\huge
\Huge

段落设置

首行缩进

1
2
3
4
5
6
7
8
% 如果默认首行不缩进,则使用indentfirst宏包
\usepackage{indentfirst}
% 指定某段首行缩进,在段首加
\indent
% 指定某段首行不缩进,在段首加
\noindent
% 设置缩进量
\setlength\parindent{2em}

字间距

1
2
3
4
% 只适用于CJK和xeCJK
\renewcommand{\CJKglue}{\hskip 宽度}
比如
\renewcommand{\CJKglue}{\hskip 1pt plus 0.08\baselineskip}

行间距

1
2
3
4
5
6
7
\linespread{因子}
% 或者
\renewcommand{\baselinestretch}{因子}
% 比如
\linespread{1.5}
% 或者
\renewcommand{\baselinestretch}{1.5}

段间距

1
2
% 设置\parskip的值,比如
\setlength{\parskip}{0.5\baselineskip}

交叉引用

使用\usepackage{hyperref}可以生成文中引用点击跳转。 `

1
2
~\ref{tab.5}
~\ref{Fig.5}

脚注

1
\footnote{footnote text}

正文插入网址

在文档头加上宏

1
2
3
4
5
\usepackage{hyperref}
\usepackage{lineno,hyperref}
% \usepackage[colorlinks,linkcolor=blue]{hyperref}
% 在正文中直接输入如下代码:
\url{https://www.google.com.hk}

其中linkcolor=red是指将链接的颜色设置为红色,也可以设置为blue,black,green等颜色。

如果不想在正文中出现链接地址的话,而想用文字或其他字体显示链接,则可以输入如下代码:

1
\href{https://www.google.com.hk}{google}

设置邮箱地址超链接也需要在文档开头加上宏包

1
\usepackage[colorlinks,linkcolor=red]{hyperref}

含义同上,同时需要在转入的邮箱地址前加上mailto命令,然后在后面大括号里面输入邮箱地址便可。

1
\href{mailto:365917549@163.com}{365917549@163.com}

作者信息

同一个单位的作者们

1
2
3
4
5
6
7
8
9
> \title{A Title\thanksref{label}}
\thanks[label]{Project supported by the Fundamental Research Funds for the Central Universities(2012RC0504).}
\author{Ping Wang\corauthref{cor}},
\ead{wp112@bupt.edu.cn} \corauth[cor]{Corresponding author}
\author{Ping Xue},
\author{Mingtao DU},
\author{Qingxuan JIA},
\author{Qifei ZHAO}
\address{School of Automation, Beijing University of Posts and Telecommunications, Beijing 100876, China}

不同单位的作者们

1
2
3
4
5
6
7
8
> \author[add1]{Aaron\corauthref{cor1}},% Aaron是第1个单位的作者,且是通讯作者
\ead{* @.edu.cn}
\corauth[cor1]{Corresponding author.}
\author[add1]{Bill} % Bill是第1个单位的作者,且是通讯作者
\author[add2]{Cart} % Cart是第2个单位的作者,且是通讯作者
\author[add1]{Damon} % Damon是第2个单位的作者,且是通讯作者
\address[add1]{** University, Shanghai , China} % 第1个单位的地址
\address[add2]{** University, Beijing, China} % 第2个单位的地址

同一作者属于不同单位

1
2
3
4
5
6
7
8
9
10
11
> %列出所有作者所属单位
\author[author1,author2]{Qingmao}, %Qingmao属于第1,2个单位
\author[author2]{Xiaosui}, %Xiaosui属于第2个单位
\author[author3]{Houcheng}, %Houcheng属于第3个单位
\author[author2]{Tonglin\corauthref{cor1}} %Tonglin属于第2个单位,同时还是通讯作者
\corauth[cor1]{Corresponding author.}
\ead{zzz@163.com}
%所有单位地址
\address[author1]{Colle...
\address[author2]{Colle...
\address[author3]{Colle...

常用数学符号

摘自“一份不太简短的 LATEX2e 介绍” http://mohu.org/info/symbols/symbols.htm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
\begin{tabular}{|lcc|lcc|}
\hline
命令 & 大写 & 小写 & 命令 & 大写 & 小写 \\
\hline
alpha & $A$ & $\alpha$ & beta & $B$ &$\beta$ \\
gamma & $\Gamma$ & $\gamma$ & delta & $\Delta$ & $\delta$ \\
epsilon & $E$ & $\epsilon,\varepsilon$ & zeta & $Z$ & $\zeta$ \\
eta & $H$ &$\eta$ & theta & $\Theta$ & $\theta,\vartheta$ \\
iota & $I$ & $\iota$ & kappa & $K$ & $\kappa$ \\
lambda & $\Lambda$ & $\lambda$ & mu & $M$ & $\mu$ \\
nu & $N$ & $\nu$ & omicron & $O$ & $o$ \\
xi & $\Xi$ & $\xi$ & pi & $\Pi$ & $\pi,\varpi$ \\
rho & $P$ & $\rho,\varrho$ & sigma & $\Sigma$ & $\sigma,\varsigma$ \\
tau & $T$ & $\tau$ & upsilon & $\Upsilon$ & $\upsilon$ \\
phi & $\Phi$ & $\phi,\varphi$ & chi & $X$ & $\chi$ \\
psi & $\Psi$ & $\psi$ & omega & $\Omega$ &$\omega$ \\
\hline
\end{tabular}
1
2
3
4
大于等于号,小于等于号
\geqslant和\leqslant代替\geq和\leq

\lq左引号,\rq右引号;双引号就输入两个

做图技巧

一般IEEE要求的Width是3.5inchs,分辨率是600dpi。

对于用subfigure或tabular由多个eps小图生成的一个eps大图,根本不需要前面说的那么麻烦。最简单的办法还是在latex中,写一个tex文档,比如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
\documentclass[12pt,onecolumn]{article}
\usepackage{geometry}
\usepackage[]{graphicx}
\geometry{left=1in,right=1in,top=1in,bottom=1in}
\pagestyle{empty}
\begin{document}
{\centering
\footnotesize
\begin{tabular}{@{}c@{}c@{}c@{}}
\includegraphics[width=0.33\textwidth]{Cm-scene-8-prod-max-r1.eps}
&\includegraphics[width=0.33\textwidth]{Cm-scene-13-prod-max-r1.eps}
&\includegraphics[width=0.33\textwidth]{Cm-scene-15-prod-max-r1.eps}\\
(a)&(b)&(c)
\end{tabular}
}
\end{document}

然后编译生成dvi,再使用dvips生成ps文件,然后用GSview打开,转换成eps文件。需要注意的是,tex文档会自动插入页码,这样生成的eps的boundingbox不正确。应该加一句\pagestyle{empty},这样就没有页码,最终生成完美的eps文件。

图片-PS-EPS

选择Photoshop EPS,对话框选项即可「EPS Options --> Encoding: ASCII」。

图片-PDF-EPS

使用adobe acrobat中的裁剪工具,然后另存为ps。再用gsviewer打开ps,另存为eps即可。

AI-EPS

PostScript-PS-EPS

安装PostScript虚拟打印机,然后把图片打印成.ps格式,再用GSview转化成eps格式。

CTEX/TEXLIVE

命令行。这个方法和先存到photoshop等图像软件再保存为eps的方法相比,优点是不失真。

1
2
pdf2ps abc.pdf abc.ps 导出ps文件,再用
ps2epsi.bat abc.ps abc.eps 就行了

MATLAB图片

为了在latex中使用且避免失真,一般可直接将图片保存为eps格式。建议画图时均单独plot,不使用subplot,其中的legend大小比例更好设置。MATLAB中常用标准命令可以查看PLOT设置

对于数据量较大的图,最好的方法在Matlab里直接存成增强型JPG格式,然后用bmeps工具转换成eps格式,效果比较好,也可以克服图转换成JPG后失真的问题。小数据量的图,直接通过Matlab图形界面另存为eps格式即可,但是设置不当生成的eps格式图容易超出边界,这点可以通过GsView先预览一下,如果没有超出边界就可以采用,如果超出边界了可以作如下处理:直接复制到word文档里,转换成PDF格式,再用GSview处理或ImageMagic处理6

按照PLOT设置的EPS一般均可以使用,无须进行裁剪。但是有时由于原来的图像可能有较大的空白边缘,在文章中显示效果不佳,需要将图片裁剪空白边缘。这样需要进行如下设置:

EPS-PS-EPS

MATLAB保存成EPS文件后,可以用Gsview(使用ctex套件中的Gsview版本)裁剪。

  • 菜单栏 “options--show bounding boxs” 选中.
  • 打开eps图,然后File->PS TO EPS,不选择Automatically calculate Bounding Box,然后点击yes,用鼠标单击上下左右,输入要保存的文件名。也可以选择Automatically calculate Bounding Box。

注意,这样生成的新文件如果用Gsview打开了看,还是会发现空白依然存在,但是插入LaTex中使用,生成PDF后会发现使用的图,空白消失了,完全按照你刚才设定的大小输出。

EPS-PDF-adobe-PS-EPS

把已有的eps图片转化为pdf,使用adobe acrobat中的裁剪工具,然后另存为ps。再用gsviewer打开ps,另存为eps即可。

台湾某牛写的pdf裁剪的一个小工具,pdfcropper。 ctex有eps和pdf裁剪包(pdfcrop),不过需要Perl支持,可安装草莓Perl,效果不错。

visio图片

Latex插入Visio绘制的流程图

visio本来就用另存为pdf的功能,但是直接存的话,很难避免页面的空白边缘。

点击“打印”,弹出“打印”对话框。在打印机“名称”下拉列表中选择“Adobe PDF”,然后点击“属性”按钮,弹出“Adobe PDF 文档属性”对话框。选择“布局”选项卡,点击右下角的“高级”按钮,弹出“Adobe PDF Converter 高级选项”对话框,在“文档选项-PostScript选项-PostScript输出选项”,选择“内嵌的PostScript (EPS)”,点击“确定”,返回到“Adobe PDF 文档属性”对话框,选择“Adobe PDF 设置”选项卡,把“不要发送字体到Adobe PDF(N)”复选框前面的对号去掉,点击“确定”,返回到“打印”对话框,点击“确定”(注意,在“打印”对话框中不要选中“打印到文件(L)”复选框),选择文件名,保存成pdf文件。

  • visio转化为pdf。

  • 先用visio画好图,然后“设计”--“大小”--"适应绘图"。visio就会自动调整画布来去除空白边缘,此时再另存外pdf即可。

  • visio中的图copy到adobe illustrator中。最后,在adobe illustrator中,直接”另存为“eps即可。

Origin教程

百度文库教程

图片调用技巧

图片位置排版技巧

头文件:

1
\usepackage{graphicx}

eps文件和tex文件放在同一个文件夹,只用文件名就可以调用,不用写路径。编译时不能使用pdflatex,会出错。即使不出错,也看不到图。应使用latex编译生成dvi,然后dvi2ps,ps2pdf就可以看到图了。

位置

如果希望避免浮动体跨过 \section,可以使用 placeins 宏包。

1
\usepackage[section]{placeins}

如果希望禁止浮动,可以使用 float 宏包,结合 H 选项。

1
2
3
4
5
6
\usepackage{float}
% ...
\begin{figure}[H]
% ...
\begin{table}[H]
% ...

h 当前位置。 将图形放置在 正文文本中给出该图形环境的地方。如果本页所剩的页面不够, 这一参数将不起作用。 t 顶部。 将图形放置在页面的顶部。 b 底部。 将图形放置在页面的底部 16.1。 p 浮动页。 将图形放置在一只允许 有浮动对象的页面上。 如果在图形环境中没有给出上述任一参数,则缺省为 [tbp]。给出参数的顺序不会影响到最后的结果。给出的参数越多, LATEX 的排版结果就会越好。 在浮动位置选项前加上一个惊叹号会使 LATEX 忽略应用于文本页的审美条件,试图用最严格的标准来 放置浮动图形。

大小

使用[选项]可以指定图片大小:

\includegraphics[width=3in]{file.eps} 设定图片宽度为3 inches,图片高度会自动缩放。
\includegraphics[width=\testwidth]{file.eps} 设定图片宽度为文本宽度。
\includegraphics[width=0.8\textwidth]{file.eps} 设定图片宽度为文本宽度的0.8倍
\includegraphics[width=\testwidth-2.0in]{file.eps} 设定图片宽度比文本宽度少2 inches。
使用[选项]指定图片旋转角度将图片旋转270度。 \includegraphics[angle=270]{file.eps}
两个选项同时使用,中间用逗号隔开: \includegraphics[width=\testwidth, angle=270]{file.eps}

如果不喜欢让Latex自动安排图片位置,可以使用float包,然后用\begin{figure}[H]

1
2
\usepackage{float}  
\begin{figure}[H]

插入并列的子图

头文件:\usepackage{subfigure}

1
2
3
4
5
6
7
8
9
10
11
\begin{figure}[H]
\centering
\subfigure[SubfigureCaption]{
\label{Fig.sub.1}
\includegraphics[width=0.4\textwidth]{figurename.eps}}
\subfigure[SubfigureCaption]{
\label{Fig.sub.2}
\includegraphics[width=0.4\textwidth]{figurename.eps}}
\caption{MainfigureCaption}
\label{Fig.lable}
\end{figure}
1
2
3
4
5
6
7
8
9
10
11
\begin{figure}
\centering
\begin{minipage}[c]{0.45\textwidth}
\includegraphics[width=0.9\textwidth]{result.png}
\caption{Report after querying}
\end{minipage}
\begin{minipage}[c]{0.45\textwidth}
\includegraphics[width=0.9\textwidth]{chart.png}
\caption{Chart being outputted}
\end{minipage}
\end{figure}

改变间距用 和,置于两subfigure间。这里的in表示inch, 另外也可以用cm控制。

使用subfig如何去掉子图上部空白

subfig定义了一个farskip与上边有个10pt的距离,我们可以通过以下两个方式去掉: 1,subfig包加参数去掉:

1
\usepackage[farskip=0pt]{subfig}

2,使用caption来进行设置,如下:

1
2
\usepackage{caption}
\captionsetup[subfloat]{farskip=0pt}

subfigure竖排图形

注意要使用宏包和 IEEE给的模板是图形横排,subfigure不支持\换行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
\begin{figure}
\centering
\subfigure[the first subfigure]{
\begin{minipage}[b]{0.2\textwidth}
\includegraphics[width=1\textwidth]{fig1.eps} \\
\includegraphics[width=1\textwidth]{fig2.eps}
\end{minipage}
}
\subfigure[the second subfigure]{
\begin{minipage}[b]{0.2\textwidth}
\includegraphics[width=1\textwidth]{fig3.eps} \\
\includegraphics[width=1\textwidth]{fig4.eps}
\end{minipage}
}
\end{figure}

多子图分页

宏包:

1
2
\usepackage[centerlast]{caption2}
\usepackage{subfigure}

使用两个图形环境,欺骗下LaTeX的计数器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 \begin{figure}
\centering
\subfigure[First Part]{
\label{fig:graphics:a}
\includegraphics[width=\textwidth]{wide.eps}}
\caption{Large Graphics}
\label{fig:graphics} % label for figure
\end{figure}
\addtocounter{figure}{-1} %先欺骗LaTeX图形计数器
\begin{figure}
\addtocounter{figure}{1} %再告诉LaTeX图形计数器真相
\centering
\subfigure[Second Part]{
\label{fig:graphics:b}
\includegraphics[width=\textwidth]{wide.eps}}%
\caption{Large Graphics (con't)}
\end{figure}

子图如何添加双语标题

来源

1
2
3
4
5
6
7
8
9
10
11
\begin{figure}[htbp]
\centering
\subfigure{\label{第1个子图标签名}}\addtocounter{subfigure}{-2}
\subfigure[The 1st subfigure caption]{\subfigure[第1个子图标题]
{\includegraphics[width=0.4\textwidth]{文件名}}}
\subfigure{\label{第2个子图标签名}}\addtocounter{subfigure}{-2}
\subfigure[The 2nd subfigure caption]{\subfigure[第2个子图标题]
{\includegraphics[width=0.4\textwidth]{文件名}}}
\bicaption[总标签名]{}{中文总标题}{Fig.$\!$}{The total caption}
\vspace{-1em}
\end{figure}

IEEE模板

IEEE模板中图下面的标题应该是左对齐,但只有在标题超过一行的时候才会激活,需要将对齐方式对单行的标题也有效需要对caption宏包进行设置 singlelinecheck=false,否则默认会居中 。还有,Latex模板中默认的Fig. 1后面使用的是冒号分隔符,即“Fig.1 :”,与word模板不一致,可以修改为labelsep=period 。所以,最后在开头的package声明中应该是: \usepackage[singlelinecheck=false, labelsep=period]{caption} ,这样就可以与word中一致了 。

latex文档请记得在开头加上

1
2
\documentclass[conference, a4paper]{IEEEtran}
\captionsetup{font=sc}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
\begin{table}[!htbp]%\renewcommand{\arraystretch}{1.5}
\centering
\caption{XXX~方法和~YYY~方法的对比}\label{tab:5-5}
%\vspace{15pt}
\begin{tabular}{|l|c|c|}
\hline
& XXX & YYY \\
\hline
A1 & 7.4027 & 8.5846 \\
A2 & 4.4622 & 9.2157 \\
A3 & 7.5864 & 13.1597 \\
A4 & 5.5718 & 6.5974 \\
\hline
\end{tabular}
\end{table}

表格使用技巧

制作方法

  • 手动输入
  • 读取CSV。可以使用一个叫pgfplotstable的包,它可以从csv生成表格。也可以使用Nicola Talbot编写的datatool 宏包。下面看看是如何来进行制作的。
  • LaTeX Table Generator在线表格制作
  • Excel2LaTeX宏插件。LaTeX使用excel2latex插入表格
    • 首先要在 文件-选项-信任中心-信任中心设置-宏设置 里确认没有选择禁用所有宏,若已禁用的就更改下设置。
    • 然后在 文件-选项-加载项-管理加载项 的选项卡里点浏览,载入已下载好的Excel2LaTeX.xla文件,并勾选确认。
    • 打开想要转化成latex代码的表格,选择表格内容点"Convert table to Latex"

三线表格横竖线断开

  • 不用booktabs宏包,使用makecell宏包

    1
    2
    3
    4
    %模仿booktabs宏包的三线宽度设置
    \newcommand\toprule{\Xhline{.08em}}
    \newcommand\midrule{\Xhline{.05em}}
    \newcommand\bottomrule{\Xhline{.08em}}
  • 用booktabs宏包

    1
    2
    3
    \setlength{\abovetopsep}{0.5ex}
    \setlength{\belowrulesep}{0pt}
    \setlength{\aboverulesep}{0pt}

自动宽度表格

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

\begin{tabularx}{0.9\textwidth}{rX}%注意对齐方式用rX,其中X表示自动宽度
\centering
\toprule
Period & Progress \\
\midrule
Week 1-2 & Pre-conferences and documentation study \\
Week 3-4 & Confirming development tool and frame designing \\
Week 5-6 & Login system designing and debugging \\
Week 7-8 & Inputing graphical user interface(GUI) designing \\
Week 9-10 & Development of the query and the report function \\
Week 11-12 & Overall debugging and testing \\
\bottomrule
\caption{Progress schedule}
\label{Progress Control}
\end{tabularx}

表格内文字过长自动换行

  • 在一些论文中往往出现表格表头文字过长,使得表格排到页面以外,我们可以把表头文字进行竖排。我们可以使用graphicx提供的\rotatebox{90}{}来实现这一操作。

  • 设置字体大小控制符即可。

    1
    \begin{table}[h] \small
  • 利用graphicx宏包提供的,把表格内容(比如tabular环境中的所有东西)放到这个缩放盒子里。

    1
    2
    3
    4
    \usepackage{booktabs,graphicx}

    \scalebox{<h-scale>}[<v-scale>]{<text>}
    这里的h-scale和v-scale分别是水平和竖直的缩放因子,要缩小,那么取值就在0~1之间,后边花括号里就是缩放的内容。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    \documentclass[UTF8]{ctexart}
    \usepackage{booktabs,graphicx}

    \begin{document}
    \begin{table}[htbp]
    \centering
    \caption{实验中的仪器设备汇总表}\label{tab:addlabel2}%
    \scalebox{0.85}[0.85]{
    \begin{tabular}{ll}
    \toprule
    仪器设备名称型号 & 仪器制造厂商 \\
    \midrule
    LD-Y300A 高速万能粉碎机 & 永康顶帅五金制品有限公司 \\
    QLB平板硫化机 & 无锡市新华橡塑机械厂 \\
    CP-25冲片机 & 江都市试验机械厂 \\
    \bottomrule
    \end{tabular}
    }
    \end{table}%
    \end{document}

    参考文献1

    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
    \usepackage{array}

    % 方法3
    \begin{tabular}{m{5cm}}
    % 方法4
    \begin{tabular}{p{0.9\columnwidth}}
    \begin{tabular}{|l|p{10cm}|}
    % 方法5
    \multirow{nrows}[bigstructs]{width}[fixup]{text}
    nrows 设定所占用的行数。
    bigstructs 此为可选项,主要是在你使用了 bigstruct 宏包时使用。
    width 设定该栏文本的宽度。如果想让 LaTeX 自行决定文本的宽度,则用 * 即可。
    fixup 此为可选项,主要用来调整文本的垂直位置。
    text 所要排版的文本。可用 \\ 来强迫换行。
    % 方法6
    /newcommand{/tabincell}[2]{/begin{tabular}{@{}#1@{}}#2/end{tabular}}
    然后使用&/tabincell{c}{}&就可以在表格中自动换行

    /begin{tabular}{|c|c|}
    /hline
    1 & the first line //
    /hline
    2 & /tabincell{c}{haha// heihei//zeze} //
    /hline
    /end{tabular}

表格并排

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
% 方法1 测试无效
\begin{table}
\caption{Caption for total table}
\centering
\subtable[Caption for table 1]{
\begin{tabular}{ccc}
1 & 2 & 3
\end{tabular}
\label{tab:firsttable}
}
\qquad
\subtable[Caption for table 2]{
\begin{tabular}{ccc}
a & b & c
\end{tabular}
\label{tab:secondtable}
}
\end{table}
1
2
3
4
5
6
7
8
9
10
11
12
% 方法2
\usepackage{floatrow}

\begin{table}[htbp]
\begin{floatrow}
\subtable[P values]{...}

\subtable[P values]{...}

\end{floatrow}
\label{123}}
\end{table}
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
% 方法3 minipage 未测试
\usepackage{ctex}
\usepackage{times}
\usepackage{graphicx,floatrow}
\usepackage[labelfont=bf,labelsep=quad]{caption}
\DeclareCaptionFont{kai}{\kaishu}
\captionsetup{textfont=kai}
\floatsetup[table]{capposition=top}%加上这条命令table环境的caption才会置于表格顶端

\begin{minipage}[c]{0.46\textwidth}
\centering
\subtable[Caption for table 1]{
\begin{tabular}{ccc}
1 & 2 & 3
\end{tabular}
\label{tab:firsttable}
}
\end{minipage}

%$\rightarrow$

\begin{minipage}[c]{0.46\textwidth}
\centering
\subtable[Caption for table 2]{
\begin{tabular}{ccc}
a & b & c
\end{tabular}
\label{tab:secondtable}
}
\end{minipage}
\end{table}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
% 方法4 \ttabbox 统一标题 未测试

\begin{table}[htp]
\ttabbox{\caption{...}}{

\centering
\begin{minipage}{0.45\textwidth}
\begin{tabular}
...
\end{tabular}
\end{minipage}
\hfil
\begin{minipage}{0.45\textwidth}
\begin{tabular}
...
\end{tabular}
\end{minipage}

}
\end{table}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
% 方法5 \ttabbox 子标题 未测试

\begin{table}[htp]
\floatsetup{floatrowsep=qquad,captionskip=5pt}
\tabcolsep=9pt

\begin{floatrow}

\ttabbox{\caption{...}}{
\begin{tabular}
...
\end{tabular}}

\ttabbox{\caption{...}}{
\begin{tabular}
...
\end{tabular}}

\end{floatrow}
\end{table}

插入项目符号和编号

不带序号

关于{itemize}里序号的形式:latex默认生成的简单列表,默认为一个小圆点,而我们在写文章时可能想要一些不一样的列表符号,比如 -, * 之类的. 我们可以这样写

1
2
3
4
\begin{itemize}
\item[-] good morning...
\item[-] good morning....
\end{itemize}

带序号

关于{enumerate},这是用于带序号的列表。 默认生成 1,2,3。如果想要其他修饰,如(1) (2)....或step1,step2,需要加载 ,然后如下使用

1
2
3
4
\begin{enumerate}[step 1]
\item good morning...
\item good morning....
\end{enumerate}

公式使用技巧

编辑TEX公式可以使用网页版手绘TEX公式和MathType转化。MathType可以轻松的将数学公式转换成LaTex代码,但两者进行转换时也会有些需要注意的地方,详细请参考转换公式为LaTeX代码需要注意的问题

MathType公式转换Tex代码

方法一、使用剪切和复制预置,在txt文件中显示LaTeX代码 1.打开MathType编辑软件,编辑好公式后,点击“预置(P)”菜单,选择“剪切和复制预置(C)”。 2.弹出剪切和复制预置对话框,点选“MathML或Tex”,并去掉“在转换中包括MathType数据(D)”前面的勾,点击“确定”。 3.回到MathType,选中公式,按“Ctrl+C”复制,然后粘贴到txt文件中,公式显示为LaTex代码。

情况1:文字中插入的公式,和文字内容放在一行 上面转换的公式语句的公式环境是\[\],这种环境会使公式独占一行,所以需要将其改为$ $环境。通常是把所有的公式都转换完毕后,全文替换修改之,当然也要主意一些问题,例如会把文中的其他部分也替换之,所以应该先注意这些再全文替换。

情况2:文中的公式是不用带序列号的 考虑到文章排版的美观,最好把\[ \]环境换为\begin{eqnarray*} \end{eqnarray*},个人认为在书写公式时,先写好这样一个\begin{eqnarray*} \end{eqnarray*}公式环境,然后把转换后的公式语句粘贴到此环境里,最后把\[ \]删除即可。

情况3:文中的而公式是带序列号的 我们要把\[ ,\]环境换为\begin{eqnarray} \end{eqnarray}或者\begin{equation} \end{equation},具体做法和情况2相似,唯一的区别是情况2的环境不会产生序列号,情况3的环境会产生序列号。

1
2
3
4
5
6
7
8
% 举例
\begin{equation}
\label{labels_name}
...
\end{equation}

% 文中引用
~\ref{label_name}

方法二、使用MathType转换公式(Convert Equations)

1.在MathType公式编辑器中输入公式,保存后将其选中。 2.设置转换格式。点击 Word文档中的MathType->转换公式(Convert Equations),设置转换格式。点击Convert即可出现相应的Tex代码。

方法三、使用发布切换(Toggle MathType/TeX)自动转换

1.使用Mathtype公式编辑器编辑好准备转换的公式,保存后将其选中。 2.切换到Word中的MathType选项卡,单击第六列“发布”中的“切换TeX”按钮(相应的英文是Toggle MathType/TeX),即可自动出现相应的Tex代码。

方法四

在Word文档中选中用MathType编辑的公式,按住Alt+\键,可以将 MathType 公式快速转换成 Tex 格式。

将Tex公式转换为MathType公式

将Tex格式的公式代码复制到 Word 中,前后分别加上$符号,按下Alt+\键,就将公式切换成MathType 格式。

公式中文字

在数学模式中, 空格和分行都将被忽略。所有的空格或是由数学表达式逻辑的衍生, 或是由特殊的命令如 \,\quad\qquad来得到。。不允许有空行,每个公式中只能有一个段落。

如果你希望在公式中出现普通的文本(使用正体字并可以有空格),那么你必须使用命 令 来输入这些文本。

1
2
3
4
\begin{equation}
x^{2} \geq 0\qquad
\textrm{for all }x\in\mathbf{R}
\end{equation}

公式对齐

Tex常见公式环境与对齐方式小节

多个公式,一个编号

问题:如果有两个等式排成一列,如下: a+b=1 c+d=2 (1) 其右端的编号(1)如何显示在两个等式的中间?

如果用eqnarray环境,只能将编号显示在上面或下面等式的后面,则编号显示在第二个等式的后面。

1
2
3
4
\begin{eqnarray}
a+b &=& 1 \nonumber \\
c+d &=& 2
\end{eqnarray}

其中两个&号之间的是公式间对齐的位置,用//隔开各行公式。将eqnarray改为eqnarray*输出的公式是没有编号。

可以使用下面的语句,使得编号显示在两个等式的中间:

1
2
3
4
5
6
\begin{equation}
\begin{array}{l}
a+b=1 \\
c+d=2
\end{array}
\end{equation}

有时上下列等式之间显得拥挤,可在每个等式前加上,如:

1
2
3
4
5
6
\begin{equation}
\begin{array}{l}
\displaystyle a+b=1 \\
\displaystyle c+d=2
\end{array}
\end{equation}

rray环境中用来标示引用的符号不可任意选择!使用split环境不存在这个问题。

此外,利用split环境也可以将编号写在中间,每行只允许出现一个“&”,使用split命令后,编号会 上下居中 显示。如:

1
2
3
4
5
6
\begin{equation}
\begin{split}
a+b=1\\
c+d=2
\end{split}
\end{equation}

公式大小

在公式之前加上字体大小控制符即可。

1
2
3
4
5
6
7
\small
\begin{equation}
\begin{split}
a+b=1\\
c+d=2
\end{split}
\end{equation}

公式间距

第一,我们输入代码的问题。即我们输入公式时,自动自己空行了,会导致间距扩大。

1
2
3
4
5
6
7
8
9
10
11
12
the  text

\begin{equation}
a+b=c
\end{equation}

% 两者是不一样的

the text
\begin{equation}
a+b=c
\end{equation}

第二,的确是系统提供的公式到文本的间距过大。

我以book类为例。公式和文本之间的间距由\abovedisplayshortskip\belowdisplayshortskip 两个距离来控制的。book类10号字体的定义为:

1
2
3
4
5
6
7
8
\renewcommand\normalsize{%
\@setfontsize\normalsize\@xpt\@xiipt
\abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
\abovedisplayshortskip \z@ \@plus3\p@
\belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
\belowdisplayskip \abovedisplayskip
\let\@listi\@listI}
\normalsize

所以我们可以通过修改这些参数来控制文本和公式的间距,如下:

1
2
3
4
{\setlength\abovedisplayskip{1pt plus 3pt minus 7pt}
\setlength\belowdisplayskip{1pt plus 3pt minus 7pt}
... (Equation(s)) ...
}

这样修改只能起到局部的作用。

我们可以在导言区重定义normalsize的长度(这个值修改得比较小,为了演示效果,大家可根据自己的需要来调整其大小。),即可修改文本和公式的间距如:

1
2
3
4
5
6
7
8
9
\makeatletter
\renewcommand\normalsize{%
\@setfontsize\normalsize\@xpt\@xiipt
\abovedisplayskip 1\p@ \@plus2\p@ \@minus5\p@
\abovedisplayshortskip \z@ \@plus3\p@
\belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
\belowdisplayskip \abovedisplayskip
\let\@listi\@listI}
\makeatother

pseudo code

算法流程图

1
2
3
4
5
6
% 直接加框
\usepackage{framed}
...
\begin{framed}
copious text
\end{framed}
1
2
3
4
5
6
7
% 首先,需要使用以下宏包
\usepackage{algorithm}
\usepackage{algorithmic}

\begin{algorithm}[H] % 固定位置

\end{algorithm}

介绍下algorithmic和algorithmicx,这两个包很像,很多命令都是一样的,只是algorithmic的命令都是大写,algorithmicx的命令都是首字母大写,其他小写(EndFor两个大写)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
algorithmic的基本命令

\STATE <text>
\IF{<condition>} \STATE{<text>} \ENDIF
\FOR{<condition>} \STATE{<text>} \ENDFOR
\FOR{<condition> \TO <condition> } \STATE{<text>} \ENDFOR
\FORALL{<condition>} \STATE{<text>} \ENDFOR
\WHILE{<condition>} \STATE{<text>} \ENDWHILE
\REPEAT \STATE{<text>} \UNTIL{<condition>}
\LOOP \STATE{<text>} \ENDLOOP
\REQUIRE <text>
\ENSURE <text>
\RETURN <text>
\PRINT <text>
\COMMENT{<text>}
\AND, \OR, \XOR, \NOT, \TO, \TRUE, \FALSE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

algorithmicx包的基本命令

\State <text>
\If{<condition>} <text> \EndIf
\If{<condition>} <text> \Else <text> \EndIf
\If{<condition>} <text> \ElsIf{<condition>} <text> \Else <text> \EndIf
\For{<condition>} <text> \EndFor
\ForAll{<condition>} <text> \EndFor
\While{<condition>} <text> \EndWhile
\Repeat <text> \Until{<condition>}
\Loop <text> \EndLoop
\Require <text>
\Ensure <text>
\Function{<name>}{<params>} <body> \EndFunction
\State \Return <text>
\Comment{<text>}
另外,还有3个修改algorithm标签,require标签,ensure标签显示的三个命令:
\floatname{algorithm}{算法}
\renewcommand{\algorithmicrequire}{\textbf{输入:}}
\renewcommand{\algorithmicensure}{\textbf{输出:}}
1
2
3
4
5
6
7
8
9
10
11
12
13
%%%宏包\usepackage{algorithmic} 的改法
%%%原宏包只有require和ensure两个\item,要改成三个(加入OUTPUT)的话,
%%%在algorithmic.sty中找到
% ALGORITHMIC
\newcommand{\algorithmicrequire}{\textbf{Require:}}
\newcommand{\algorithmicensure}{\textbf{Ensure:}}
%%%再下面加入一句:\newcommand{\algorithmiclastcon}{\textbf{Lastcon:}} %%%lastcon是自己定义的
%%%再找到
\newcommand{\REQUIRE}{\item[\algorithmicrequire]}
\newcommand{\ENSURE}{\item[\algorithmicensure]}
%%%在后面加入一句
\newcommand{\lastcon}{\item[\algorithmiclastcon]} %%% lastcon是自己定义的
%%%保存ALGORITHMIC.sty,在正文中就可以加入\LASTCON 了~!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
% 输入、输出、返回值命令
\REQUIRE ~~ \\
\ENSURE ~~ \\
\RETURN
% 如果不喜欢宏包中默认的命令
\renewcommand{\algorithmrequire}{\textbf{Input:}}
\renewcommand{\algorithmensure}{\textbf{Output:}}

算法部分循环使用总结,前面加\STATE
∘ \IF {"condition"} "text" \ENDIF
∘ \IF {"condition"} "text" \ELSE "text" \ENDIF
∘ \IF {"condition"} "text" \ELSIF "text" \ELSIF "text" \ELSE "text" \ENDIF
∘ \FOR {"condition"} "text" \ENDFOR
∘ \FORALL {"condition"} "text" \ENDFOR
∘ \WHILE {"condition"} "text" \ENDWHILE
∘ \REPEAT "text" \UNTIL {"condition"}
∘ \LOOP "text" \ENDLOOP

例子:

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
\usepackage{algorithm}           
\usepackage{algorithmic} %用到的宏包,要自己改下
\usepackage{multirow}
\renewcommand{\algorithmicrequire}{\textbf{Initialization:}} %改成后面的小标题
\renewcommand{\algorithmicensure}{\textbf{Iteration:}}
\renewcommand{\algorithmiclastcon}{\textbf{Output:}}
%%正文代码
\begin{algorithm}[htb] %算法的开始
\caption{ ABC } %算法的标题
\label{alg:SA} %给算法一个标签,这样方便在文中对算法的引用
\begin{algorithmic}[1] %不知[1]是干嘛的?
\REQUIRE ~~\\ %算法的输入参数:Initialization
Set $J=0$; $S_0 = \left\{ \phi \right\}$; $R(S_0 ) = 0$; $\Omega=\{1,2,\ldots,K\}$;
\ENSURE ~~\\ %算法的迭代:Iteration
%Ensemble of classifiers on the current batch, $E_n$;
\WHILE {$J<M$}
\STATE $J\leftarrow J+1$;
\FORALL {$k\in \Omega$}
\STATE $R_{temp}=0$; $\Delta R_{J,k} = R(S_{J-1}\cup \{k\})-R(S_{J-1})$;
\IF {$\Delta R_{J,k}>0$}
\IF{$R(S_{J-1}\cup \{k\})\geq R_{temp}$}
\STATE $R_{temp}\leftarrow R(S_{J-1}\cup \{k\})$; $s_J\leftarrow k$;
\ENDIF
\ELSE
\IF{$1/(1-\Delta R_{J,k}/c_k )<rand(1)$}
\STATE $\Omega= \Omega-\{k\}$;
\ENDIF
\ENDIF
\ENDFOR
\IF {$R_{temp}>0$}
\STATE $S_J\leftarrow S_{J-1}\cup \{s_J\}$;
\ELSE
\STATE $J\leftarrow J-1$; Break;
\ENDIF
\ENDWHILE %算法的返回值
\lastcon ~~\\ %OUTPUT
selected user set $S_J$ and weighted sum rate $R(S_J)$;
\end{algorithmic}
\end{algorithm}
1
2
3
4
5
6
7
8
9
10
11
12
13
\begin{algorithm}  
\caption{A}
\label{alg:A}
\begin{algorithmic}
\STATE {set $r(t)=x(t)$}
\REPEAT
\STATE set $h(t)=r(t)$
\REPEAT
\STATE set $h(t)=r(t)$
\UNTIL{B}
\UNTIL{B}
\end{algorithmic}
\end{algorithm}
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
\begin{algorithm}  
\caption{Calculate $y = x^n$}
\label{alg1}
\begin{algorithmic}
\REQUIRE $n \geq 0 \vee x \neq 0$
\ENSURE $y = x^n$
\STATE $y \Leftarrow 1$
\IF{$n < 0$}
\STATE $X \Leftarrow 1 / x$
\STATE $N \Leftarrow -n$
\ELSE
\STATE $X \Leftarrow x$
\STATE $N \Leftarrow n$
\ENDIF
\WHILE{$N \neq 0$}
\IF{$N$ is even}
\STATE $X \Leftarrow X \times X$
\STATE $N \Leftarrow N / 2$
\ELSE[$N$ is odd]
\STATE $y \Leftarrow y \times X$
\STATE $N \Leftarrow N - 1$
\ENDIF
\ENDWHILE
\end{algorithmic}
\end{algorithm}
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
%导言区
\renewcommand{\algorithmicrequire}{ \textbf{Input:}} %Use Input in the format of Algorithm
\renewcommand{\algorithmicensure}{ \textbf{Output:}} %UseOutput in the format of Algorithm


\begin{algorithm}[htb]
\caption{ Framework of ensemble learning for our system.}
\label{alg:Framwork}
\begin{algorithmic}[1] %这个1 表示每一行都显示数字
\REQUIRE ~~\\ %算法的输入参数:Input
The set of positive samples for current batch, $P_n$;\\
The set of unlabelled samples for current batch, $U_n$;\\
Ensemble of classifiers on former batches, $E_{n-1}$;
\ENSURE ~~\\ %算法的输出:Output
Ensemble of classifiers on the current batch, $E_n$;
\STATE Extracting the set of reliable negative and/or positive samples $T_n$ from $U_n$ with help of $P_n$;
\label{ code:fram:extract }%对此行的标记,方便在文中引用算法的某个步骤
\STATE Training ensemble of classifiers $E$ on $T_n \cup P_n$, with help of data in former batches;
\label{code:fram:trainbase}
\STATE $E_n=E_{n-1}\cup E$;
\label{code:fram:add}
\STATE Classifying samples in $U_n-T_n$ by $E_n$;
\label{code:fram:classify}
\STATE Deleting some weak classifiers in $E_n$ so as to keep the capacity of $E_n$;
\label{code:fram:select}
\RETURN $E_n$; %算法的返回值
\end{algorithmic}
\end{algorithm}
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
\begin{algorithm}[h]  
\caption{An example for format For \& While Loop in Algorithm}
\begin{algorithmic}[1]
\FOR{each $i \in [1,9]$}
\STATE initialize a tree $T_{i}$ with only a leaf (the root);\
\STATE $T=T \cup T_{i};$\
\ENDFOR
\FORALL {$c$ such that $c \in RecentMBatch(E_{n-1})$}
\label{code:TrainBase:getc}
\STATE $T=T \cup PosSample(c)$;
\label{code:TrainBase:pos}
\ENDFOR
\FOR{$i=1$; $i<n$; $i++$ }
\STATE $//$ Your source here;
\ENDFOR
\FOR{$i=1$ to $n$}
\STATE $//$ Your source here;
\ENDFOR
\STATE $//$ Reusing recent base classifiers.
\label{code:recentStart}
\WHILE {$(|E_n| \leq L_1 )and( D \neq \phi)$}
\STATE Selecting the most recent classifier $c_i$ from $D$;
\STATE $D=D-c_i$;
\STATE $E_n=E_n+c_i$;
\ENDWHILE
\label{code:recentEnd}
\end{algorithmic}
\end{algorithm}
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
\documentclass{article}
\usepackage{amsmath}
\usepackage{algorithm}
\usepackage[noend]{algpseudocode}

\makeatletter
\def\BState{\State\hskip-\ALG@thistlm}
\makeatother

\begin{document}
\begin{algorithm}
\caption{My algorithm}\label{euclid}
\begin{algorithmic}[1]
\Procedure{MyProcedure}{}
\State $\textit{stringlen} \gets \text{length of }\textit{string}$
\State $i \gets \textit{patlen}$
\BState \emph{top}:
\If {$i > \textit{stringlen}$} \Return false
\EndIf
\State $j \gets \textit{patlen}$
\BState \emph{loop}:
\If {$\textit{string}(i) = \textit{path}(j)$}
\State $j \gets j-1$.
\State $i \gets i-1$.
\State \textbf{goto} \emph{loop}.
\State \textbf{close};
\EndIf
\State $i \gets i+\max(\textit{delta}_1(\textit{string}(i)),\textit{delta}_2(j))$.
\State \textbf{goto} \emph{top}.
\EndProcedure
\end{algorithmic}
\end{algorithm}
\end{document}
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
\documentclass[11pt]{article}
\usepackage{CJK}
\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry}
\usepackage{algorithm}
\usepackage{algorithmicx}
\usepackage{algpseudocode}
\usepackage{amsmath}

\floatname{algorithm}{算法}
\renewcommand{\algorithmicrequire}{\textbf{输入:}}
\renewcommand{\algorithmicensure}{\textbf{输出:}}

\begin{document}
\begin{CJK*}{UTF8}{gkai}
\begin{algorithm}
\caption{用归并排序求逆序数}
\begin{algorithmic}[1] %每行显示行号
\Require $Array$数组,$n$数组大小
\Ensure 逆序数
\Function {MergerSort}{$Array, left, right$}
\State $result \gets 0$
\If {$left < right$}
\State $middle \gets (left + right) / 2$
\State $result \gets result +$ \Call{MergerSort}{$Array, left, middle$}
\State $result \gets result +$ \Call{MergerSort}{$Array, middle, right$}
\State $result \gets result +$ \Call{Merger}{$Array,left,middle,right$}
\EndIf
\State \Return{$result$}
\EndFunction
\State
\Function{Merger}{$Array, left, middle, right$}
\State $i\gets left$
\State $j\gets middle$
\State $k\gets 0$
\State $result \gets 0$
\While{$i<middle$ \textbf{and} $j<right$}
\If{$Array[i]<Array[j]$}
\State $B[k++]\gets Array[i++]$
\Else
\State $B[k++] \gets Array[j++]$
\State $result \gets result + (middle - i)$
\EndIf
\EndWhile
\While{$i<middle$}
\State $B[k++] \gets Array[i++]$
\EndWhile
\While{$j<right$}
\State $B[k++] \gets Array[j++]$
\EndWhile
\For{$i = 0 \to k-1$}
\State $Array[left + i] \gets B[i]$
\EndFor
\State \Return{$result$}
\EndFunction
\end{algorithmic}
\end{algorithm}
\end{CJK*}
\end{document}

TikZ 宏包

框架图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[
inner/.style={draw,
solid,% <-- added
fill=blue!5,thick,inner sep=3pt,minimum width=8em},
outer/.style={draw=gray,dashed,fill=green!1,thick,inner sep=5pt}
]
\node[outer] (A) {
\begin{tikzpicture}[node distance=1cm,outer sep = 0pt]
\node [inner,minimum width=18em] (A1) {Mr. A};
\node [inner,anchor=south west,minimum width=8em] (A2) at ([yshift=1em]A1.north west) {Mr. A1};
\node [inner,anchor=south east,minimum width=8em] (A3) at ([yshift=1em]A1.north east) {Mr. A2};
\node (text) [anchor=north] at ([yshift=4em]A1.north) {Hello Tikz};
\end{tikzpicture}
};
\end{tikzpicture}
\end{document}

how-to-draw-boxes-around-set-of-nodes:

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
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}[%
auto,
block/.style={
rectangle,
draw=blue,
thick,
fill=blue!20,
text width=5em,
align=center,
rounded corners,
minimum height=2em
},
block1/.style={
rectangle,
draw=blue,
thick,
fill=blue!20,
text width=5em,
align=center,
rounded corners,
minimum height=2em
},
line/.style={
draw,thick,
-latex',
shorten >=2pt
},
cloud/.style={
draw=red,
thick,
ellipse,
fill=red!20,
minimum height=1em
}
]
\draw (2.5,-2) node[block] (C) {Subanta};
\path (0,-3) node[block] (G) {Pumlinga}
(0,-4) node[block] (H) {Strilinga}
(0,-5) node[block] (I) {Napumsaka}
(5,-3) node[block] (J) {Pumlinga}
(5,-4) node[block] (K) {Strilinga}
(5,-5) node[block] (L) {Napumsaka};
\draw (C.south) -- ++(0,-0.25) coordinate (linga);
\draw (linga) -- ++(-1,0) coordinate (ling);
\draw[-latex] (ling) |- (G.east);
\draw[-latex] (ling) |- (H.east);
\draw[-latex] (ling) |- (I.east);
\draw (linga) -- ++(1,0) coordinate (hling);
\draw[-latex] (hling) |- (J.west);
\draw[-latex] (hling) |- (K.west);
\draw[-latex] (hling) |- (L.west);
\draw[red,thick,dotted] ($(J.north west)+(-0.3,0.6)$) rectangle ($(L.south east)+(0.3,-0.6)$);
\draw[thick,dotted] ($(I.north west)+(-0.5,0.15)$) rectangle ($(L.south east)+(0.5,-0.15)$);
\end{tikzpicture}
\end{document}

流程图

在 Tex 中画流程图(FlowChart)使用 LaTeX 绘制流程图利用 TikZ 宏包在 LaTeX 中绘制流程图TikZ入门教程

先画node,然后从上往下、从左往右等规律画箭头方向。

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
导言区

\usepackage{tikz}
\usetikzlibrary{shapes,arrows,chains}
\usepackage{xcolor}
% 设置颜色代号
\colorlet{lcfree}{green}
\colorlet{lcnorm}{blue}
\colorlet{lccong}{red}
% 设置调试标志层
\pgfdeclarelayer{marx}
\pgfsetlayers{main,marx}
% 标记坐标点的宏定义。交换下面两个定义关闭。
\providecommand{\cmark}[2][]{%
\begin{pgfonlayer}{marx}
\node [nmark] at (c#2#1) {#2};
\end{pgfonlayer}{marx}
}
\providecommand{\cmark}[2][]{\relax}

正文

% 开始绘图
\begin{figure}[H]
\centering
\scalebox{.8}{ %设置缩放
\begin{tikzpicture}[
>=triangle 60, % 箭头的形状
start chain=going below, % 从上往下的流程
node distance=6mm and 60mm, % 全局间距设置
every join/.style={norm}, % 连接线的默认设置
]
% -------------------------------------------------
% 节点的样式定义
% <on chain> 和 <on grid> 可以减少手动调整节点位置的麻烦
\tikzset{
base/.style={draw, on chain, on grid, align=center, minimum height=4ex},
proc/.style={base, rectangle, text width=8em},
test/.style={base, diamond, aspect=2, text width=5em},
term/.style={proc, rounded corners},
% coord 用来表示连接线的转折点
coord/.style={coordinate, on chain, on grid, node distance=6mm and 25mm},
% nmark 用来表示调试标志
nmark/.style={draw, cyan, circle, font={\sffamily\bfseries}},
% -------------------------------------------------
% 不同的连接线样式
norm/.style={->, draw, lcnorm},
free/.style={->, draw, lcfree},
cong/.style={->, draw, lccong},
it/.style={font={\small\itshape}}
}
% -------------------------------------------------
% 先放节点
\node [term, densely dotted,fill=lccong!25, it] (p0) {输入};
% 用 join 表示和上一个节点相连
\node [proc, join] {使用非线性最小二乘法得到 $X_0$};
\node [proc, join] {记录 $X=X_0, f=f(X_0)$};
\node [test, join] (t1) {$T>T_E$?};
\node [proc] (p1) {$step=0$};
\node [test, join] (t2) {$step<count$?};
\node [proc] (p2) {得到新状态$P_N=P+scale\times rand$,计算目标函数差$\Delta f$};
\node [test, join] (t3) {$F_{Accept}<rand$?};
\node [proc] (p3) {记录新状态 $X=X_N,f=f(X_N)$};

\node [proc, left=of t1] (p4) {$T=T\times a,scale=scale\times b$};
\node [term, densely dotted, right=of t1,fill=lcfree!25](p5) {输出};
\node [proc, right=of t3](p6) {$step++$};

\node [coord, left=of t2] (c1) {};
\node [coord, right=of t2] (c2) {};
\node [coord, right=of p3] (c3) {};
%先画南北方向的连接线,先画线再画两端的标志和箭头
\path (t1.south) to node [near start, xshift=1em] {$y$} (p1);
\draw [*->,lcnorm] (t1.south) -- (p1);
\path (t2.south) to node [near start, xshift=1em] {$y$} (p2);
\draw [*->,lcnorm] (t2.south) -- (p2);
\path (t3.south) to node [near start, xshift=1em] {$y$} (p3);
\draw [*->,lcnorm] (t3.south) -- (p3);
%接着画东西方向的连接线,方法同上
\path (t1.east) to node [near start, yshift=1em] {$n$}(p5);
\draw [o->,lcnorm] (t1.east) -- (p5);
\draw [->,lcnorm] (p4.east) -- (t1);
\path (t3.east) to node [near start, yshift=1em] {$n$}(p6);
\draw [o->,lcnorm] (t3.east) -- (p6);
\path (t2.west) to node [near start, yshift=1em] {$n$}(c1);
\draw [o->,lcnorm] (t2.west) -- (c1) -| (p4);
\draw [->,lcnorm] (p3.east) -- (c3) -| (p6.south);
\draw [<-,lcnorm] (t2.east) -- (c2) -| (p6.north);

\end{tikzpicture}
}
\label{fig:algorithm}
\end{figure}

案例:start chain=going below指明了流程图的默认方向,node ditance=8mm则指明了默认的node距离。这些可以在定义node的时候更改。

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
\documentclass[a4paper,UTF8]{article}  

\usepackage{xcolor}
\usepackage{tikz}
\usetikzlibrary{arrows,shapes,chains}

\begin{document}
\centering
\begin{figure}
\scriptsize
\tikzstyle{format}=[rectangle,draw,thin,fill=white]
# \tikzstyle{test}=[diamond,aspect=2,draw,thin,text width=2cm]
\tikzstyle{test}=[diamond,aspect=2,draw,thin]
\tikzstyle{point}=[coordinate,on grid,]
\begin{tikzpicture}[node distance=8mm,
auto,>=latex',
thin,
start chain=going below,
every join/.style={norm},]
\node[format] (n0){A};
\node[format,below of=n0] (n1){B};
\node[format,below of=n1] (n2){C};
\node[format,below of=n2] (n3){D};
\node[point,right of=n3] (p0){};
\node[point,left of=n3] (p1){};
# \node[point,right of=n3,node distance=10mm] (p0){};
\node[format,below of=n3] (n4){E};
\node[format,below of=n4] (n5){F};
\node[format,right of=n5] (n6){G};
\node[test,below of=n5] (n7){H};
\node[point,right of=n7] (p2){};
\node[format,below of=n7] (n8){I};
# 直接指定node的位置
# \node[format] (n0) at(3,0){A};

\draw[->] (n0.south) -- (n1);
# \draw[-] (n0.south) -- (n1);
# \draw[<->] (n0.south) -- (n1.north);
# \draw[<-,dashed] (n1.south) -- (n2.north);
# 文字总是在箭头方向的右边
# \draw[<-] (n0.south) to node{Yes} (n1.north);
# \draw[->] (n1.north) to node{Yes} (n0.south);
# 曲线
# \draw[->] (n1.north) to[out=60,in=300] node{Yes} (n0.south);
# \draw[->,draw=red](n2)--(n1);
\draw[->] (n1.south) -- (n2);
\draw[->] (n2.south) -- (n3);
\draw[->] (n3.south) -- (n4);
\draw[->] (n4.south) -- (n5);
\draw[->] (n5.south) -- (n7);
\draw[->] (n7.south) to node {Yes} (n8);

\draw[->] (n7.east) to node {No} (p2) |- (n6.south);
\draw[->] (n6.north) -- (p0) |- (n3.east);
\end{tikzpicture}
\end{figure}
\end{document}

案例:

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
% 流程图定义基本形状
\tikzstyle{startstop} = [rectangle, rounded corners, minimum width = 2cm, minimum height=1cm,text centered, draw = black, fill = red!40]
\tikzstyle{io} = [trapezium, trapezium left angle=70, trapezium right angle=110, minimum width=2cm, minimum height=1cm, text centered, draw=black, fill = blue!40]
\tikzstyle{process} = [rectangle, minimum width=3cm, minimum height=1cm, text centered, draw=black, fill = yellow!50]
\tikzstyle{decision} = [diamond, aspect = 3, text centered, draw=black, fill = green!30]
% 箭头形式
\tikzstyle{arrow} = [->,>=stealth]

\begin{figure}[htbp]
\centering
\begin{tikzpicture}[node distance=2cm]
%定义流程图具体形状
\node (start) [startstop] {start};
\node (pro1) [process, below of=start, yshift=-0.2cm, left of=start, xshift=-1cm] {PROCESS 1};
\node (pro2) [process, right of=pro1, xshift= 4cm] {PROCESS 2};
\node (in1) [io, below of=pro1, yshift= -0.2cm, right of=pro1, xshift=1cm] {IO};
\node (pro3) [process, below of=in1, yshift= -0.2cm] {PROCESS 3};
\node (pro4) [process, below of=pro3, yshift= -0.2cm] {PROCESS 4};
\node (in2) [io, below of=pro4, yshift= -0.2cm] {IO 2};
\node (dec1) [decision, below of=in2, yshift= -0.2cm] {DECISION};
\node (stop) [startstop, below of=dec1] {end};

%连接具体形状
\draw [arrow](start) -- (pro1);
\draw [arrow](start) -- (pro2);
\draw [arrow](pro1) -- (in1);
\draw [arrow](pro2) -- (in1);
\draw [arrow](in1) -- (pro3);
\draw [arrow](pro3) -- (pro4);
\draw [arrow](pro4) -- (in2);
\draw [arrow](in2) -- (dec1);
\draw [arrow](dec1) -- ($(dec1.east) + (1.5,0)$) node[anchor=north] {NO} |- (pro3);
\draw [arrow](dec1) -- node[anchor=west] {YES} (stop);
\end{tikzpicture}
\caption{\label{fig: } 示例图}
\end{figure}

故障树

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
\usetikzlibrary{arrows,shapes,chains,shapes.gates.logic.US,trees,positioning}  

\begin{figure}
\begin{tikzpicture}[
and/.style={and gate US,thick,draw,fill=red!60,rotate=90,
anchor=east,xshift=-1mm,scale=0.7},
or/.style={or gate US,thick,draw,fill=blue!60,rotate=90,
anchor=east,xshift=-1mm,scale=0.7},
label distance=1mm,
every label/.style={blue},
event/.style={rectangle,thick,draw,fill=yellow!20,text width=0.5cm,
text centered,font=\sffamily,anchor=north},
basicEvent/.style={circle,thick,draw,fill=blue!20,text width=0.5cm,
text centered,font=\sffamily,anchor=north},
edge from parent/.style={very thick,draw=black!70},
edge from parent path={(\tikzparentnode.south) -- ++(0,-0.8cm)
-| (\tikzchildnode.north)},
level 1/.style={sibling distance=7cm,level distance=0.9cm,
growth parent anchor=south,nodes=event},
level 2/.style={sibling distance=3cm},
level 3/.style={sibling distance=2cm},
level 4/.style={sibling distance=1cm}
]

\node (g1) [event] {A}
child{node (g2) {B}
child {node (g3) {C}
child {node (g4) {D}
child {node (t1)[basicEvent] {e0}}
child {node (b2)[basicEvent] {e1}}
}
child {node (g5) {G}
child {node (t2)[basicEvent] {e1}}
child {node (b3)[basicEvent] {e2}}
}
}
child {node (b1)[basicEvent] {e3}}
};

\node [and] at (g1.south) {};
\node [or] at (g2.south) {};
\node [and] at (g3.south) {};
\node [or] at (g4.south) {};
\node [or] at (g5.south) {};

\end{tikzpicture}
\end{figure}

beamer

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
\begin{figure}  
\begin{minipage}[t]{0.68\linewidth}
\begin{figure}
\centering
\footnotesize
\tikzstyle{serviceA}=[rectangle,draw,ultra thick,fill=blue!40]
\tikzstyle{serviceB}=[rectangle,draw,ultra thick,fill=blue!10]
\tikzstyle{db}=[circle,draw,ultra thick,fill=red!20]
\tikzstyle{dbA}=[circle,draw,ultra thick,fill=blue!40]
\tikzstyle{dbB}=[circle,draw,ultra thick,fill=blue!10]
\tikzstyle{explaination}=[]
\tikzstyle{point}=[coordinate]
\begin{tikzpicture}[node distance=20mm,
auto,>=latex',
thin,
start chain=going below,
every join/.style={norm},
invisible/.style={opacity=0},
visible on/.style={alt={#1{}{invisible}}},
alt/.code args={<#1>#2#3}{%
\alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}} % \pgfkeysalso doesn't change the path
},]
\node[serviceA] (serviceA) at (0,0) {serviceA};
\node[explaination,visible on=<1-1>] (s0a) at (-1,0) {$s_0$};
\node[explaination,visible on=<2-4>] (s1a) at (-1,0) {$s_1$};
\node[explaination,visible on=<5-5>] (s2a) at (-1,0) {$s_2$};
\node[explaination,visible on=<6->] (s3a) at (-1,0) {$s_3$};
\node[serviceB] (serviceB) at (4.5,0) {serviceB};
\node[explaination,visible on=<1-1>] (s0b) at (5.5,0) {$s_0$};
\node[explaination,visible on=<2-4>] (s1b) at (5.5,0) {$s_1$};
\node[explaination,visible on=<5-5>] (s2b) at (5.5,0) {$s_2$};
\node[explaination,visible on=<6->] (s3b) at (5.5,0) {$s_3$};
\node[db] (db1) at (0,-4.5) {db1};
\node[dbA,visible on=<3->] (db1a) at (0,-4.5) {db1};
\node[explaination,visible on=<1-2>] (s01) at (-1,-4.5) {$s_0$};
\node[explaination,visible on=<3-3>] (s11) at (-1,-4.5) {$s_1$};
\node[explaination,visible on=<4->] (s21) at (-1,-4.5) {$s_2$};
\node[db] (db2) at (4.5,-4.5) {db2};
\node[dbB,visible on=<3->] (db2b) at (4.5,-4.5) {db2};
\node[explaination,visible on=<1-2>] (s02) at (5.5,-4.5) {$s_0$};
\node[explaination,visible on=<3-3>] (s12) at (5.5,-4.5) {$s_3$};
\node[explaination,visible on=<4->] (s22) at (5.5,-4.5) {$s_4$};
\node[explaination,visible on=<6->] (error0) at (0.7,-4.5) {$\times$};
\node[explaination,visible on=<6->] (error1) at (3.8,-4.5) {$\times$};
\node[point] (errorp0) at (0.7,-4.5) {};
\node[point] (errorp1) at (3.8,-4.5) {};

\draw[<-,visible on=<2->] (db1.north) to[out=120,in=240] node {1 getA} (serviceA.south);
\draw[<-,visible on=<4->] (serviceA.south) to node {2 returnA} (db1.north);
\draw[->,dashed,draw=red,visible on=<6->] (serviceA.south) to[out=0,in=180] node {3 getA} (errorp1);
\draw[<-,visible on=<2->] (db2.north) to node {1 getB} (serviceB.south);
\draw[<-,visible on=<4->] (serviceB.south) to[in=60,out=300] node {returnB} (db2.north);
\draw[->,dashed,draw=red,visible on=<6->] (serviceB.south) to[out=180,in=0] node {3 getB} (errorp0);

\end{tikzpicture}
\end{figure}
\end{minipage}
\pause
\begin{minipage}[t]{0.3\linewidth}
\footnotesize
\begin{equation*}
\begin{split}
serviceB:&s_3\xLongrightarrow{successB} s_4\\
serviceA:&s_3\xLongrightarrow{successA} s_4\\
db1:&s_2\xLongrightarrow{clearA} s_0\\
db2:&s_4\xLongrightarrow{clearB} s_0
\end{split}
\end{equation*}
\end{minipage}
\end{figure}

修改批注

TrackChanges

一个便捷的方法是使用 changes 宏包来实现7。changes 宏包加上[final]选项时,编译出来是修订后的文档。

The trackchanges.sty style file adds five new LaTeX comands commands8: (In all cases [editor] can be ommitted. )

常用命令:

1
2
3
4
5
6
7
8
9
10
11
12
% To specify an editor name, the editor must first be declared in the preamble:  
\addeditor{editor one}
\addeditor{editor two}

\note[editor]{The note}
\annote[editor]{Text to annotate}{The note}
\add[editor]{Text to add}
\remove[editor]{Text to remove}
\change[editor]{Text to remove}{Text to add}

% list of changes
\listofchanges

使用举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
\documentclass{article}
%\usepackage[final]{changes}
\usepackage{changes}
%\definechangesauthor[name={Per cusse}, color=orange]{per}

\begin{document}
This is \added[id=per,remark={we need this}]{new} text.
This is \added[remark={has to be in it}]{new} text.
This is \deleted[id=per,remark=obsolete]{unnecessary}text.
This is \replaced{nice}{bad} text.

\listofchanges

\end{document}

要想设置默认颜色,需要使用\definechangesauthor命令进行修改9

1
2
3
4
5
6
7
8
9
10
11
12
13
14
\documentclass{book}
\usepackage{changes}
\usepackage{lipsum}

\definechangesauthor[Gonzalo Medina]{GM}{orange}
\definechangesauthor[John Doe]{JD}{blue}

\colorlet{Changes@Color}{green}

\begin{document}

Some \added[GM]{new text} added in the example by GM. Some \added[JD]{new text} added in the example by JD. Some \added{new text} added in the example.

\end{document}

另外,change tracking commands have issues with citations,要么 putting the citation outside of the \replaced{bad}{good} command (like this: \replaced{This sentence is lame}{This is a better sentence} \added{\citep{somearticle2016}}) (修改内容过多的话很繁琐),要么按照如下设置:

  1. 必须结合cite使用\mbox命令: \deleted{test \mbox{\parencite{foo,bar}}10,避免出现无法生成pdf,但存在参考文献引用不换行情况。
  2. 然后使用\bibliographystyle{elsarticle-num}等数字类的引文格式,避免出现参考文献引用不换行情况。

如果使用texstudio当作编辑器的的话,可以利用它的宏选项来给这三个命令设置快捷键(默认Shift+F1, F2 ...)

  • replace

    1
    2
    3
    4
    %SCRIPT
    txt = cursor.selectedText()
    editor.write("\\replaced{x}{"+txt+"}")
    cursor.clearSelection()

  • add

    1
    2
    3
    4
    %SCRIPT
    txt = cursor.selectedText()
    editor.write("\\added{"+txt+"}")
    cursor.clearSelection()

  • del

    1
    2
    3
    4
    %SCRIPT
    txt = cursor.selectedText()
    editor.write("\\deleted{"+txt+"}")
    cursor.clearSelection()

  • mbox

    1
    2
    3
    4
    %SCRIPT
    txt = cursor.selectedText()
    editor.write("\\mbox{"+txt+"}")
    cursor.clearSelection()

latexdiff

未测试成功。

首先不得不说Word中的批注和删改功能做得非常不错,而latexdiff插件的出现让LaTex也具有批注和删除功能,并且使用简单「参考说明文档即可」,效果显示也不错。

Package texlive-latexdiff

Latexdiff is a Perl script for visual mark up and revision of significant differences between two LaTeX files. Various options are available for visual markup using standard LaTeX packages such as color. Changes not directly affecting visible text, for example in formatting commands, are still marked in the LaTeX source. A rudimentary revision facilility is provided by another Perl script, latexrevise, which accepts or rejects all changes. Manual editing of the difference file can be used to override this default behaviour and accept or reject selected changes only.

latexdiff功能使用教程如何对LaTeX文档中的所作的修改进行高亮显示

  1. 首先,当然要安装Ctex等其他TEX套件。
  2. 其次,确认是否安装了Latexdiff,​运行命令行cmd,输入Latexdiff。
  3. 如果没有出现上图所示的提示,就要重新安装Latexdiff咯,安装Perl咯,还要添加环境变量的路径。

制作Poster

设置posterbox位置

默认的模板为三列,如果想实现横跨行的效果,在每个posterbox的地方需要指明span=?

1
2
3
\begin{posterbox}[name=a,column=0,span=2]{Section 1}
\begin{posterbox}[name=b,column=0,below=a]{Section 2}
\begin{posterbox}[name=c,column=1,row=1,below=a]{Section 3}

Poster公式

均使用align环境。

1
2
3
4
5
6
7
8
\begin{align}
X = \left[ {\begin{array}{*{20}{c}}
{{x_1}}&{{x_2}}& \cdots &{{x_{n - 1 - (m - 1)\tau }}}\\
{{x_{1 + \tau }}}&{{x_{2 + \tau }}}& \cdots &{{x_{n - 1 - (m - 2)\tau }}}\\
\cdots & \cdots & \cdots & \cdots \\
{{x_{1 + (m - 1)\tau }}}&{{x_{2 + (m - 1)\tau }}}& \cdots &{{x_{n - 1}}}
\end{array}} \right]
\end{align}

Poster图片

均使用center环境。

1
2
3
\begin{center}
\includegraphics[width=0.9\linewidth]{svr}
\end{center}

posterbox中分栏

展示了左右摆放两张图片,使用multicol命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
\usepackage{multicol}

\begin{multicols}{2}%多栏,2为栏数

\begin{center}
\includegraphics[scale =.08]{fig-1} %在scale这里设置图片的缩放,原图的0.08倍
\captionof{figure}{图片的名称}%图片的名称在这里输入
\label{fig:figlabel}%这里就是默认的fig排序
\end{center}

\columnbreak %第一栏结束

\begin{center}
\includegraphics[scale =.08]{fig-2} %在scale这里设置图片的缩放,原图的0.08倍
\captionof{figure}{图片的名称}%图片的名称在这里输入
\label{fig:figlabel}%这里就是默认的fig排序
\end{center}

\end{multicols}

如果不想5-5分栏,实现左边一个大图,右边上下排列两个小图,可以使用minipage命令。

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
\usepackage{minipage}

\begin{minipage}{0.6\linewidth}
\begin{itemize}
。。。。。
\end{itemize}
%minipage中包含5-5分的minipage,实现左边一个大图,右边上下排列两个小图
\begin{minipage}{0.5\linewidth}
\begin{center}
\includegraphics[scale =.17]{4-1}
\captionof{figure}{图片名称}%图片的名称在这里输入
\label{fig:figlabel}%这里就是默认的fig排序
\end{center}
\end{minipage}
\begin{minipage}{0.5\linewidth}
\begin{center}
\includegraphics[scale =.14]{4-2}
\captionof{figure}{图片名称}%图片的名称在这里输入
\label{fig:figlabel} %这里就是默认的fig排序
\\%用换行符实现两张图片上下排列
\includegraphics[scale =.14]{4-3} %在scale这里设置图片的缩放,原图的0.3倍
\captionof{figure}{图片名称}%图片的名称在这里输入
\label{fig:figlabel}%这里就是默认的fig排序
\end{center}
\end{minipage}
\end{minipage}

\begin{minipage}{0.35\linewidth}% 另一个小的minipage
\begin{minipage}{1\linewidth}%想要实现上下排列一些item和一个表,设置了一个{1\linewidth}的minipage的嵌套
\begin{itemize}
.....
\end{itemize}
\\ %用换行实现上下排列
\begin{center}
\tiny %设置表的大小为tiny
\begin{tabular}{l l l}% 设置表中的字左对齐,三列;若居中用 ccc
\toprule%画一根线
。。。\\
\midrule%画一根线
aaa \\
&bbb\\
\midrule%画一根线
ccc & \\
& ddd & \\
& eee & \\
& ff & \\
& gg & \\
\midrule%画一根线
hhh \\
& & iii\\
& & jjj\\
\bottomrule%画一根线
\end{tabular}
\captionof{table}{表名称}
\label{tab:tablabel}
\end{center}
\end{minipage}
\end{minipage}

有什么好的办法实现分栏后对称及左右占相等的高度?但实际使用中失效,待测试。

  1. 手动调整:\vspace*{5cm}
  2. 使用 multicol 宏包的 multicols 环境代替 twocolumn 模式:\usepackage{multicol}
  3. 使用 flushend 宏包:\usepackage{flushend}
  4. 使用 balance 宏包:\usepackage{balance}

Poster参考文献

由于Poster位置有限,需要将 reference 和reference 上下的空格去掉,这里用的模板是unsrt

1
2
3
4
5
6
7
8
文章中用\cite{a2007}

结尾用
\renewcommand{\refname}{\vskip-1cm}% 去掉reference的上下空格以及不显示reference
\tiny
\bibliographystyle{unsrt}
\nocite{*}
\bibliography{mybib}

或者,在begin document之前插入

1
2
3
4
5
6
7
8
9
10
11
\usepackage{etoolbox}
\patchcmd\thebibliography
{\labelsep}
{\labelsep\itemsep=-4pt\relax}% 参考文献之间的默认距离是4pt,-4pt之后就能够去掉参考文献之间的空格了
{}
{\typeout{Couldn't patch the command}}

%%
% Document Start
%%
\begin{document}

参考文献

作者姓名的引用方式

目前国际上最常用的参考文献格式是AMA,APA,EmbellishedVancouver,Harvard,Numbered,和Vancouver等等。在准备原稿阶段就按要求统一格式,这样既可以在排版期间省去很多波折,也可以减少排版错误,省去自己检查校样的时间,一举两得。下面把最常见的几种参考文献的格式简单地抄录如下,如果想知道全面的文献格式,请读者浏览各大出版社的作者须知网页,那里的介绍应该更全面细致。

  • AMA style:
    1. Paivio A, Jansen B, Becker LJ. Comparisons through the mind’seye. Cognition. 1975;37(2):635–647.
    2. Glaser R, Bond L, eds. Testing: concepts and research. AmPsychol. 1981;36 [special issue].
    3. Strunk Jr W, White EB. The Elements of Style. 3rd ed.New York: MacMillan; 1979 [chapter 4].
  • APA style:
    Paivio, A., Jansen, B., & Becker, L. J. (1975).Comparisons through the mind’s eye. Cognition, 37(2), 635–647.
    Yuen, A. W. C. (1994). Lamotrigine: a review ofantiepileptic efficacy. Epilepsia, 35(Suppl. 5), S33–S36.
    Strunk, W., Jr., & White, E. B. (1979). Theelements of style (3rd ed.). New York: MacMillan.
  • Embellished Vancouver style:
    1. Paivio A, Jansen B, BeckerLJ. Comparisons through the mind’s eye. Cognition 1975;37(2):635–47.
    2. Yuen AWC. Lamotrigine: a review of antiepilepticefficacy. Epilepsia 1994;35(Suppl. 5):S33–6.
    3. Wilson JG, Fraser FC, editors. Handbook ofteratology, vols. 1–4. New York: Plenum Press; 1977–78.
  • Harvard (Name-date) style:
    Paivio, A., Jansen, B., Becker, L.J., 1975. Comparisonsthrough the mind’s eye. Cognition 37 (2), 635–647.
    Yuen, A.W.C., 1994. Lamotrigine: a review ofantiepileptic efficacy. Epilepsia 35 (Suppl. 5), S33–S36.
    Strunk Jr., W., White, E.B., 1979. The Elements ofStyle, third ed. MacMillan, New York (Chapter 4).
  • Numbered style:
    [1] A. Paivio, B. Jansen, L.J. Becker, Comparisonsthrough the mind’s eye, Cognition 37 (2) (1975) 635–647.
    [2] A.W.C. Yuen, Lamotrigine: areview of antiepileptic efficacy, Epilepsia 35 (Suppl. 5) (1994) S33–S36.
    [3] J.G. Wilson, F.C. Fraser (Eds.), Handbook ofTeratology, vols. 1–4, Plenum Press, New York, 1977–1978.
  • Vancouver style:
    [1] Paivio A, Jansen B, Becker LJ. Comparisons throughthe mind’s eye. Cognition 1975;37(2):635–47.
    [2] Yuen AWC. Lamotrigine: a review of antiepilepticefficacy. Epilepsia 1994;35(Suppl.5):S33–6.
    [3] Letheridge S, Cannon CR, editors. Bilingualeducation: teaching English as a second language. New York: Praeger; 1980.

参考文献的建立推荐使用bibfile格式。参考文献编译原理分为下面四步:

  1. 用LaTeX编译你的 .tex 文件 , 这是生成一个 .aux 的文件, 这告诉 BibTeX 将使用那些应用;
  2. 用BibTeX 编译 .bib 文件;
  3. 再次用LaTeX 编译你的 .tex 文件,这个时候在文档中已经包含了参考文献,但此时引用的编号可能不正确;
  4. 最后用 LaTeX 编译你的 .tex 文件,如果一切顺利的话, 这是所有东西都已正常了。

中文参考文献

1
2
3
4
% 如果文档类是article之类的,
\renewcommand\refname{参考文献}
% 如果文档类是book之类的,
\renewcommand\bibname{参考文献}

引用方式

1
2
3
4
5
6
7
% (author, year)
\citep
% author (year)
\cite 或 \citet

在图表的标题中引用文献
\caption{这是~\protect\citeA{konishi:1999ab}中的一幅插图}
  • 使连续引用的参考文献能够中间用破折号连起来。
1
2
3
4
\usepackage[numbers,sort&compress]{natbib}
% 在elsevier模板中,natbib包已经默认引用了,无需重新引用,改一下natbib的选项即可 \biboptions{numbers,sort&compress}

\cite{bibtex1,bibtex2,bibtex3}
  • 实现参考文献引用标号在右上角11
1
2
3
4
5
\usepackage{cite}

\newcommand{\upcite}[1]{\textsuperscript{\textsuperscript{\cite{#1}}}}
% 引用的时候使用
\upcite{}

引文部分设置

bibfile格式

获取bibtex文件后后,可以利用JabRef软件打开bib文件,根据CROSSREF自动更新引文内容,并带有DOI获取。缩写标准查看 List of Title Word Abbreviations

  • 为了使参考文献标题中某些部分保持不变,可以在bib文件中标题部分添加括号 {...}即可。
  • bib文件中将某个参考文献全部去掉,可以去掉前面的@。如果将某个参考文献中的某一个项目去掉,可以在这一行前加 //

Bibtex 已自带有 8 种样式,分别如下(下面内容摘自 LaTeX 编辑部): 1. plain,按字母的顺序排列,比较次序为作者、年度和标题
2. unsrt,基本上跟 plain 类型一样,除了参考文献的条目的编号是按照引用的顺序,而不是按照作者的字母顺序.
3. alpha,用作者名首字母+年份后两位作标号,以字母顺序排序
4. abbrv,类似plain,将月份全拼改为缩写,更显紧凑:
5. ieeetr,国际电气电子工程师协会期刊样式:
6. acm,美国计算机学会期刊样式:
7. siam,美国工业和应用数学学会期刊样式: 8. apalike,美国心理学学会期刊样式:

参考文献的引用通常有两种样式:作者-年份和数字。LATEX 本身只支持数字样式,而 natbib 宏包则同时支持这两种样式。

natbib 提供了三种列表样式:plainnat、abbrvnat、unsrtnat。前两种都是作者-年份样式,文献列表按作者-年份排序,后者会使用一些缩写(比如作者的 first name);unsrtnat 是数字样式,文献列表按引用顺序排序。 \setcitestyle 命令可以用来改变引用样式的设置, 引用模式 authoryear、numbers、super 括号 round、square、open=char,close=char 引用条目分隔符 分号、逗号、citesep=char 作者年份分隔符 aysep=char 共同作者年份分隔符 yysep=char

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
\usepackage{natbib}

\section*{References}

%\bibliographystyle{plain}

%% Numbered
%\bibliographystyle{model1-num-names}

%% Numbered without titles
%\bibliographystyle{model1a-num-names}

%% Harvard
%\bibliographystyle{model2-names.bst}\biboptions{authoryear}

%% Vancouver numbered
%\usepackage{numcompress}
%\bibliographystyle{model3-num-names}

%% Vancouver name/year
%\usepackage{numcompress}
%\bibliographystyle{model4-names}\biboptions{authoryear}

%% APA style
\bibliographystyle{model5-names}\biboptions{authoryear}

%% AMA style
%\usepackage{numcompress}\bibliographystyle{model6-num-names}

%% `Elsevier LaTeX' style
%\bibliographystyle{elsarticle-num}

%% natbib style
%\bibliographystyle{plainnat}
%\setcitestyle{square,aysep={},yysep={;}}

\bibliography{mybibfile}

将CCDC的latex模板的参考文献部分修改为bibfile格式引用,参考cccconf.cls

1
2
3
4
5
6
7
8
9
% 编辑ccdconf.cls文件

% 删除以下命令行
% \renewcommand\newblock{\par}
% 添加以下命令行,修改行间距和字体大小
\AtBeginDocument{
\ifcsname bibsep\endcsname\setlength{\bibsep}{\z@}\fi
\ifcsname bibfont\endcsname\ifChinese\def\bibfont{\zihao{-5}}\else\def\bibfont{\small}\fi\fi
}

bibitem格式

需要手动列出引文格式,不方便自动更新,费时。不过可以结合 参考文献在线生成器 使用,缩写标准查看 List of Title Word Abbreviations。但还是推荐使用bibfile格式

1
2
3
4
5
6
%参考文献格式:
\begin{thebibliography}{编号样本}
\bibitem[记号]{引用标志}文献条目1
\bibitem[记号]{引用标志}文献条目2
...
\end{thebibliography}

网址的引用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
\usepackage{url}
% 先在bib文件里编辑url引用,再\cite,
% 网址放在@misc的howpublished域,或者@techreport,@article,@book的note域

% 对于带下划线_的url引用,在下划线_之前加上转义符号\
@misc{bworld,
author = {Ingo Lutkebohle},
title = {{BWorld Robot Control Software}},
howpublished = "\url{http://aiweb.techfak.uni-bielefeld.de/content/bworld-robot-control-software/}",
year = {2008},
note = "[Online; accessed 19-July-2008]"
}

% 或者
@misc{bworld,
author = {Ingo Lütkebohle},
title = {{BWorld Robot Control Software}},
howpublished = {http://aiweb.techfak.uni-bielefeld.de/content/bworld-robot-control-software/},
year = {2008},
note = "[Online; accessed 19-July-2008]"
}

博士论文模板

修改表格字体大小

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
\documentclass{article}
\usepackage{xeCJK}
\usepackage{xltxtra}
\usepackage{tabu}
\usepackage{lipsum}

\begin{document}
请用 \XeLaTeX{} 编译。

\lipsum[1]

\begin{table}[ht]
\centering
\caption{标题}
\label{tab:Title}
\scriptsize
\begin{tabu}to \textwidth{*4{X[l]}}
\tabucline[1pt]{-}
这是测试文字 & 这是测试文字 & 这是测试文字 & 这是测试文字\\
\hline
这是测试文字 & 这是测试文字 & 这是测试文字 & 这是测试文字\\
这是测试文字 & 这是测试文字 & 这是测试文字 & 这是测试文字\\
这是测试文字 & 这是测试文字 & 这是测试文字 & 这是测试文字\\
\tabucline[1pt]{-}
\end{tabu}
\end{table}

\lipsum[2]
\end{document}
谢谢鼓励,欢迎留言反馈
0%
Title - Artist
0:00