Tuesday, June 16, 2009

[Latex]Latex Cheating Sheet

常用环境
*一个空文档模板:

\documentclass[10pt,a4paper]{article}
\usepackage{graphicx}
\title{Empty Article}
\author{apc999}
\date{\today}
\begin{document}
\maketitle
Put your text here
\end{document}


*改变文档边距
在tex文档头部引用geometry宏包并加入边距参数:
\usepackage[top=1.0cm,right=0.5cm,bottom=1.0cm,left=0.5cm]{geometry}


*插入数学公式
\begin{eqnarray}
E=MC^2
\label{eq:relativity}
\end{eqnarray}


*插入图片
首先需要在tex文档头部引用graphicx这个宏包
\usepackage{graphicx}
在需要插入图片的地方:
\begin{figure}[h]
\centering
\includegraphics[width=0.8\textwidth]{foo.eps}
\caption{caption of figure foo}
\label{fig:foo}
\end{figure}


*插入子图
首先需要在tex文档头部引用subfigure这个宏包
\usepackage{subfigure}
然后在你需要插入图片的地方:
\begin{figure}
\centering
\subfigure[caption of foo]{
\label{fig:subfigure:foo}
\includegraphics[width=0.48\textwidth]{foo.eps}}\hfill
\subfigure[caption of bar]{
\label{fig:subfigure:bar}
\includegraphics[width=0.48\textwidth]{bar.eps}}
\caption{caption of subfigures foo and bar}
\label{fig:subfigure}
\end{figure}
** subfig包用法与subfigure基本一样,就是把\subfigure换成\subfloat
 **小的"花招":子图之间可以用\vline加一条竖线隔开,或者用\hfill,\hspace等命令控制间隔

*插入表格
\centering
\begin{table}[h]
\begin{tabular}{ll}
x & x \\
x & x
\end{tabular}
\caption{caption of table foo}
\label{tab:foo}
\end{table}
更多table的用法

*数学环境中大括号
\begin{eqnarray*}
y = \left\{ \begin{array}{ll}
a & \textrm{if $d>c$}\\
b+x & \textrm{in the morning}\\
l & \textrm{all day long}
\end{array} \right.
\end{eqnarray*}
实际上还有一个更简单的做法--用cases环境. 不过需要amsmath这个package
\usepackage{amsmath}

\begin{eqnarray*}
y = \begin{cases}
a & \textrm{if $d>c$}\\
b+x & \textrm{in the morning}\\
l & \textrm{all day long}
\end{cases}
\end{eqnarray*}


*贴源代码

\usepackage[]{listings}
\lstset{language=Python,tabsize=4}
\begin{lstlisting}
import sys
sys.stdout.write("Hello World")
\end{lstlisting}

*引用一段话
\begin{quote}
the quoted text
\end{quote}

*使用bibtex database file
\bibliographystyle{xxx} % 使用style文件xxx.bst
\bibliography{yyy}  %使用reference 数据库文件yyy.bib"
xxx可以为 IEEE, acm, plain, abbrv等等
yyy为用户自己定制的bib文件
参考 BibTeX and bibliography styles


常用命令
\appendix: 这个命令本身不产生任何文本, 但是会改变其之后的section的标号
\hrule 产生一条水平线 http://www.personal.ceu.hu/tex/spacebox.htm
\gg,\ll 远远大于,远远小于

Thursday, June 11, 2009

[Linux]字体配置

X下有两套字体系统:古老的X11 core font system 以及新的Xft and fontconfig.一般说来我们应该尽可能的使用后者.
  1. Xft是"X FreeType"的缩写。当Xft被使用的时候,字体是由使用这些字体的应用程序来渲染,而不是像在X11 core font system中那样由X server负责渲染.

    在xft中用fontconfig库来决定字体该如何渲染.它包括系统定义的配置/etc/fonts/fonts.conf 以及用户自定义配置~/.fonts.conf.

    如果要自己添加字体,可以把字体文件或目录添加到/usr/local/share/fonts/.网上教程之类的通常是这样做.不过你也可以直接添加到~/fonts/这个路径下,该路径被/etc/fonts/fonts.conf默认的访问.所以你只需要把新添加的字体拷到~/.fonts就好了.比如我就把windows下的C:\WINDOWS\Fontssimsun.ttc以及simshei.ttf文件考到了上述目录下.这样我就可以在linux中使用windows下的宋体,新宋和黑体.

    字体描述:采用如下格式[2]:
    <family>-<size>:<name>=<value>...
    比如
    times-12:bold:slant=italic,oblique

    常用命令:
    • fc-list pattern 显示符合指定条件的可用字体.比如
      "fc-list ":lang=zh-CN" family style weight file"就显示所有系统中可用的简体中文字体的名称,式样,权重以及包含该字体的文件的完全路径.
    • fc-cache option 为fontconfig系统建立字体cache
      "fc-cache -fv"强制(f,force)建立cache(哪怕之前的还up-to-date),v是verbose
  2. X core font system

    字体描述: X logical font description (XLFD)[3][4].
    比如75-dpi, 12-point, Charter font的字体用XLFD格式描述出来便是:
    -bitstream-charter-medium-r-normal--12-120-75-75-p-68-iso8859-1

    常用命令:

    • xfontsel 选定并显示X字体的字符
    • xfd 显示指定X字体的字符
    • xlsfonts 输出匹配给定条件的X字体名称
    • mkfontdir 创建指定(默认当前)目录下X字体索引
    • mkfontscale 创建指定(默认当前)目录下矢量字体索引
参考
[1] Installing and Configuring Fonts
[2] An Xft Tutorial
[3] X Logical Font Description Conventions
[4] X logical font description -- wikipedia

Tuesday, June 09, 2009

[Latex]支持中文方案2:Xetex

比较了一下CJK和xetex,这两种最主要的Latex中文解决方案,还是xetex更完美.它可以使用系统中fontconfig支持的中文字体,你可以用
fc-list :lang=zh
来查看你当前系统中的中文字体.相比之下,texlive中自带的CJK只能支持区区几种.

CJK就好比是在Tex基础上为了支持unicode中文而打的补丁,而Xetex则是从根本上就支持unicode.所以应该是更有前途.我觉得可以视xetex为unicode版的tex,而xelatex就是对应着unicode版的latex.使用起来latex的基本语法几乎不用作改动, 你只需要加上若干针对xetex的命令在.tex源文件的前面

\documentclass{article}
%需要fontspec这个宏包设置字体
\usepackage{fontspec}
%指定文档的字体, 上面fc-list命令列出的中文字体都可以用在底下
\setmainfont[BoldFont=WenQuanYi Zen Hei]{SimSun}
%默认字体为SimSun,默认的bold(比如用在section title之类的地方)为文泉译增黑.
%还可以用\setsansfont, \setmonofont来设置文档的sans 和mono字体.

%针对中文设置下换行
\XeTeXlinebreaklocale "zh" %使用中文换行
\XeTeXlinebreakskip = 0pt plus 1pt %
% OK了,后面就和latex没有两样了

\title{Notes}
\author{apc999}
\date{\today}
\begin{document}
\maketitle
\section{中文}
你好,世界
\section{数学}
$$\sum_i x_i$$
\end{document}

把上面文件存为helloworld.tex.编译的时候就使用
xelatex helloworld.tex

结果如下:

Xetex在Mac上运行良好.不过在ubuntu 9.04上,我发现Xetex有一个bug.数学环境中的数学符号,比如\sum \alpha无法显示在编译出的pdf文档中.这里是我从网上找到的bug fix:http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg631117.html按照这里说的更改以后就好啦!

Thursday, June 04, 2009

[Latex]Paper中的作图+Latex相关

很凌乱的一些东西.在这里做个笔记.
====================第一部分 作图. ====================
作图工具很多,最最基本的包括excel, matlab.就不在这里复述.反正我都不爱用.excel的图太幼齿,matlab太笨拙.这里要提matplotlib以及gnuplot
(1) matplotlib
这是python的一个用于科技绘图的库.这个库比较神奇的一点是封装了一系列语法极其类似matlab的绘图函数在pylab这个文件中. 这样只要你安装了matplotlib,在一个python源程序当中import了pylab之后,就可以用诸如plot(X,Y)这样的matlab语法来绘制函数图像.实在是非常方便.
如果有python 和matlab的基本知识,上手时间几乎为0

由于图片在Latex文档中编译出来后通常会显得小, 先需要把默认字体增大:
import pylab
params = {'backend': 'ps',
'axes.labelsize': 14,
'text.fontsize': 10,
'lines.linewidth':2,
'legend.fontsize': 16,
'xtick.labelsize': 14,
'ytick.labelsize': 14}
pylab.rcParams.update(params)


(2) gnuplot
Unix世界中非常老资格的一个绘图工具.gnuplot的语法简单明了,学习曲线比较平缓.

gnuplot中有terminal这样一个概念.terminal其实是指输出设备.gnuplot支持接近80种不同的设备(或格式).我们常用的包括x11,png,postscript等等.选择x11的话就可以在X window中显示出我们要绘制的图像;而选择png, postscript的话则是告诉gnuplot你选择png 或者postscript格式的文件作为输出设备. gnuplot允许我们针对不同的输出设备做出统一或者不同的设定. 而且我们可以把设定写在~/.gnuplot当中让每次gnuplot启动的时候自动加载.比如我的设定包括
set terminal postscript eps enhanced color linewidth 2 font "Helvetica, 20"
set terminal x11 enhanced font "Helvetica, 15"
对于输出为eps的文件,我希望它字体大一些,线宽粗一些.通常paper里需要这样设定才能看得清楚.

绘图的基本用法包括
画一段sin(x)曲线
plot sin(x)
这里x取值范围默认是[-10,10],如果要改变x取值范围
set xrange [1:10]
如果要从文件里读入数据,比如用'data.txt'文件中第1列作x第3列作y作图,线段类型为"lines",这个curve取名为data1
plot 'data.txt' using 1:3 with lines title 'data1', 'data.txt' using 1:3 with lines title 'data2'
设置xlabel 以及字体(可选)
set xlabel "time t" font "Arial, 15"
设置输出文件名, 默认是STDOUT
set output "data.eps"
更新/重画
replot

(3) ploticus
一个商用绘图工具,不过好在免费.绘制出来的figure非常精美.但学习曲线非常陡.

================第二部分 Latex里插图================
(1)最基本的用法 无非就是先
\usepackage{graphicx}

然后在正文中需要插图的地方,
\begin{figure}[t]
\begin{center}
\showthe\columnwidth % Use this to determine the width of the figure.
\includegraphics[width=\columnwidth]{fig1.eps}
\caption{\label{fig:sin_cos} Plot of the sine and cosine functions.}
\end{center}
\end{figure}
如果是pdflatex, 可以支持png等非矢量格式图片

(2)使用psfrag这个包, 可以在latex文档中对插入的eps图片进行文字替换, 或者字体缩小/放大:
\begin{figure}[t]
\begin{center}
\psfrag{sin(x)}{$\sin(x)$}
\psfrag{cos(x)}{$\cos(x)$}
\psfrag{x (radians)}{$x$ (radians)}
\psfrag{y}{$y$}
{\footnotesize                  % Replace tick-lables with smaller font.
\psfrag{1.0}{1.0}
\psfrag{0.5}{0.5}
\psfrag{0.0}{0.0}
\psfrag{-0.5}{-0.5}
\psfrag{-1.0}{-1.0}
\psfrag{-8}{-8}
\psfrag{-6}{-6}
\psfrag{-4}{-4}
\psfrag{-2}{-2}
\psfrag{0}{0}
\psfrag{2}{2}
\psfrag{4}{4}
\psfrag{6}{6}
\psfrag{8}{8}
\showthe\columnwidth % Use this to determine the width of the figure.
\includegraphics[width=\columnwidth]{fig2.eps}
} % Note that the psfrag commands only work in the top-most environment.
\caption{\label{fig:sin_cos} Plot of the sine and cosine functions.}
\end{center}
\end{figure}