Showing posts with label LaTex. Show all posts
Showing posts with label LaTex. Show all posts

Tuesday, February 15, 2011

Short notes about LaTeX2e fonts

对LaTeX上的字体概念一直很混淆,所以这里大概总结一下一点概念与机制。
主要涉及到字体的使用与选择,但不包括使用任意自定义字体/系统字体,以及中文字体。
关于中文字体+LaTeX,可以使用CJK[utf8]宏包,可以参考以前一篇旧文
关于使用任意字体,太复杂,此处不表。参考[1]的section 4,文档 [8], 以及tex-font-cheatsheet [5] (also available using texdoc).
以上两个问题比较简单的处理方法是使用XeTeX/LuaTeX,它们都能直接使用系统的字体。因此顺带也把中文的问题给解决了。

所谓的NFSS, New Font Selection Scheme。
参考 fntguide [1], psnfss2e [2](可用texdoc docname打开),
以及Font selection in LATEX: The most frequently asked questions (schmidt.pdf) [3]。
以上三个都是只有十来页的文档,非常值得一读。
另外,有一个非常好的网站 [4] 列出了LaTeX上主要能用的字体(depends on distribution)。
想用某种字体前可以先去参考。

以下为summary:
  • 每种font有五个attributes:
    • encoding, 如OT1, T1 等。
    • family, 如cmr (=Computer Modern Roman), ptm (=Adobe Times)等. 值得注意的是,family 又分为三种:
      • roman (serif),即衬线字体
      • sans serif,即无衬线字体
      • typewriter (monospace),即等款字体
    • series, 如m for medium, b for bold
    • shape, 如n for normal, it for italic, sl for slanted, sc for caps and small caps.
    • size, 如1.5in, 3mm
  • 所以,OT1 cmr m n 10 就是指 Computer Modern Roman 10 point, TeX 里面的font name就是cmr10
  • 所以,平时见的\textxx command就是用来设置这写attr的。如\textrm{..} 用来更改 family, \textbf{..} 更改 series, \footnotesize 更改size 为 8pt
  • 用于底层的font selection command为\font... 系列。如\fontfamily 用来选择family
  • 使用author commands来直接选择字体。上面所说的如\textrm会选择一种现在选定的roman字体(\rmdefault)。因此要更改这个设置,则可以更新\rmdefault:
    • \renewcommand{\rmdefault}{ptm}
  • 数学字体与文本字体不同,并且更复杂。比如上面的命令只改变了文本字体,而没有改变数学字体。所以一般是用package来封装、完成上面所说的这些命令。
    • 比如要把文本和数学字体都改为Times, 则执行 \usepackage{mathptmx}
  • LaTeX包含有可用的minimum font sets ``PSNFSS collection'',除了默认的Knuth大爷的Computer Modern,还有Times, Helvetica, Palatino, Chater等,强烈建议参考 [2].
    • 注:在 PSNFSS 里有一个pifont,包含了一些有趣的符号。如扑克牌……
  • 执行 pdftex testfont 可以测试LaTeX能用的字体。执行后,输入字体名字(如cmr10),然后 \sample, \bye。TeX会生成对应的一个示例。font-change [6] 给出了一份不错的参考。
关于数学字体:
  • 通过\mathbf 等命令来使用某种特别的数学字体。型如 \mathbf 的字体称为 math alphabets。它们只能在数学模式内使用。
  • 数学字体与文本字体一样具有五个attribute。然而,它们并不能被单独设置,而只能通过设置 "math version" 来设置。predefined的math version有normal和bold。它们只能在数学模式外调用。如 \mathversion{bold} 选择使用了 \boldmath 这个math version。
  • 综上所述,要选择特定的数学字体,必须使用如下的步骤:
    • 定义一个新的mathversion:如 \DeclareMathVersion{normal}
    • 定义相应的mathalphabet,如\SetMathAlphabet{\baz}{normal}{OT1}{cmss}{m}{n}, 它设置 \baz 为 normal 这个 math mode 的一个math alphabet,其中的OT1, cmss m, n参数意义如文本字体
    • 定义数学符号字体以及数学符号。以上只是设置了math alphabet的字体,还必须为符号再定义一套字体。参考 [1]。
    • 定义数学字体大小。有四种大小:\textstyle, \displaystyle, \scriptstyle 与 \scriptscriptstyle,使用\DeclareMathSizes设置。
    • 最后,使用 \mathversion 来选用这个 math version.
最后,The UK TeX FAQ [7] 也是一份非常不错的文档,它的section K 包含了字体相关的FAQ。 可以使用 texdoc FAQ-en 来察看一份pdf copy。

Reference:
[1] fntguide
[2] psnfss2e
[3] schmidt.pdf
[4] The LaTeX Font Catalogue, http://www.tug.dk/FontCatalogue/
[5] tex-font-cheatsheet
[6] font-change
[8] 为LaTeX 添加英文 TrueType 字体, http://giantchen.googlepages.com/TrueTypeFonts_en.pdf

Wednesday, October 10, 2007

[zz]用 Latex 为论文排版

http://learn.tsinghua.edu.cn:8080/981852/study/latex.html

目录

语法规范
文档结构
中文格式相关问题
段落缩进
中文字体
章节和段落组织
图片
表格
杂项格式
参考文献
脚注
页眉和页脚
常用命令

语法规范

latex 中,用“%”做为注释行的开始,用“\”作为命令或者变量的开始。用一对大括号“{}”作为一个区块的起始和结束,在这一个区块中,命令和变量具有局部意义。用一对方括号“[]”作为某个命令参数的起始和结束,参数之间用“,”隔开。

文档结构

文档的开始必须使用类似如下命令:

\documentclass[a4paper, 12pt, onecolumn]{article}

这条命令指定文档的类型是 article,可以根据需要换为 slides,book 等;字体为 12pt;纸张类型是 A4;单栏。

然后使用 \usepackge 命令指定需要使用的宏包,如:

\usepackage{CJK}                % CJK 中文支持
\usepackage{graphicx} % EPS 图形支持
\usepackage{indentfirst} % 中文段落首行缩进
\usepackage{fancyhdr} % 梦幻页眉

正文部分开始时,需要使用如下命令:

\begin{document}
\begin{CJK}{GBK}{song}\CJKcaption{GB} % 如果需要使用中文,必须加上这一句

相应的,正文结束后,需要使用:

\end{CJK}
\end{document}

中文格式相关问题

段落缩进

要使中文段落每段起始时空两个汉字的位置,除了需要使用宏包“indentfirst”外,还需要使用如下命令:

\setlength{\parindent}{24pt}

此命令加在导言区(导言区即在第一条命令和正文开始之间的部分)即可,参数应该根据正文字体的大小来设定,因为这里正文字体是 12pt,两个字的位置就是 24pt。

中文字体

设定中文字体很简单,只需要用类似如下的命令:

\CJKfamily{hei}这是黑体

我们也可以针对某个段落设定字体大小和行间距:

\fontsize{22pt}{26pt}后面的这一段文字,字体大小是 22pt,段落的行间距是 26pt

当需要将行间距恢复到默认值时,只要用

\linespread{}\selectfont

即可,因为行间距只有当字体大小发生变化时才会重新计算,所以在 \linespread 后面必须跟上字体尺寸变换的命令,如 \small 之类,或者直接写上 \selectfont。

章节和段落组织

可以用

\section{第一层章节}
\subsection{第二层章节}
\subsubsection{第三层章节}

这样的命令来分层次定义文章的章节,可以用

\begin{itemize}
\item 第一条
\item 第二条
\item 第三条
\end{itemize}

这样的命令来定义多个条目,可以用

\paragraph{第一段}
\paragraph{第二段}
\paragraph{第三段}

这样的命令来定义段落。

图片

用如下命令来插入图片(只支持 eps 图片):

\begin{figure}
\begin{center}
\includegraphics[]{kingofcats}\\
\small{图1 猫王的图片}
\end{center}
\end{figure}

其中 \begin{center} 和 \end{center} 的含义是将其中的内容居页面中间排放,“\\”符号用来换行。

表格

用如下命令来定义表格:

\begin{tabular}{c|c}
\hline
第一列标题 & 第二列标题 \\
\hline
第一行第一列 & 第一行第二列 \\
\hline
第二行第一列 & 第二行第二列 \\
\hline
\end{tabular}

杂项格式

参考文献

用如下命令定义参考文献:

\begin{thebibliography}{99}
\bibitem{stid.Internetwork.smth}
stid.
论灌水与写论文的关系.
北京:新水木出版社,2005
\bibitem{kingofcats.newsmth}
kingofcats.
我是猫王我怕谁.
北京:灌水出版社,1999
\end{thebibliography}

脚注

用如下命令来定义脚注:

猫王\footnote{即 King of Cats,猫中之王,也称 stid}

页眉和页脚

用如下命令来定义页眉和页脚:

\pagestyle{fancy}               % 使用梦幻页眉
\lhead{}
\chead{}
\rhead{\small{北京理工大学工程硕士学位论文(设计)开题报告}}
\lfoot{}
\cfoot{}
\rfoot{\thepage}
\renewcommand{\headrulewidth}{0.4pt}

常用命令

  • \date{} 去掉标题中的默认日期
  • \newcommand{\supercite}[1]{\textsuperscript{\cite{#1}}} 带一个参数的自定义命令
  • \thispagestyle{empty} 此页不使用页眉和页脚
  • \vspace{20mm} 在垂直方向空出 20mm 的距离
  • \hspace{12pt} 在水平方向空出 12pt 的距离
  • \underline{} 加下划线
  • \setcounter{page}{1} 从 1 开始计算页码
  • \newpage 强制换页
  • \clearpage 给最后一页也加上页眉和页脚
  • \makebox[72pt][s]{被打散的文字} 定义宽度为 72pt 的文本盒,并将其中的文字均匀分布
  • \makebox[30mm][c]{居中的文字} 定义宽度为 30mm 的文本盒,并将其中的文字居中排列

Fedora上配置Tex UTF-8 中文系统

文章来源:
http://reciteword.cosoft.org.cn/yaoguang/showarticle.php?category=myarticle&&doc
page=0&&newsid=25
作者:胡正
2007.9.18

为了制作中文PDF书籍文件,并解决PDF中文不能拷贝的问题,用最新的方法再次配置了一下
Tex系统,参考的文章是:
http://mailboxpublic.googlepages.com/texlive2007cjkchinesehowto

步骤如下:

1. 安装Tex Live 2007.
下载:
ftp://ftp.ctex.org/CTAN/systems/texlive/Images/texlive2007-live-20070212.iso.zip
unzip后mount上,运行install-tl.sh,按i就行了。
装完后编辑~/.bash_profile
PATH=/usr/local/texlive/2007/bin/i386-linux:$PATH

2. 生成字体文件。
mkdir ~/font
cd ~/font
cp /media/c/WINDOWS/Fonts/simsun.ttc .
yum install fontforge
cp /usr/local/texlive/2007/texmf-dist/source/latex/CJK/utils/subfonts/* ~/font/
cp /usr/local/texlive/2007/texmf/fonts/sfd/*.sfd ~/font/
time fontforge -script subfonts.pe simsun.ttc song Unicode.sfd
大概要个把小时。
编辑一个makemap文件,内容如下:
for i in *.tfm
do
cat >> song.map << EOF
${i%.tfm} ${i%.tfm} < ${i%.tfm}.pfb
EOF
done
然后chmod +x makemap
./makemap
编辑一个c70song.fd文件:
% This is c70song.fd for CJK package.
% created by Edward G.J. Lee
% modify by Yue Wang
\ProvidesFile{c70song.fd}
\DeclareFontFamily{C70}{song}{\hyphenchar \font\m@ne}
\DeclareFontShape{C70}{song}{m}{n}{<-> CJK * song}{}
\DeclareFontShape{C70}{song}{bx}{n}{<-> CJKb * song}{\CJKbold}
\endinput
最后拷贝文件:
cd ~/.texlive2007
cd texmf-var
mkdir -p fonts/map/dvips/CJK
mkdir -p fonts/tfm/CJK/song
mkdir -p fonts/type1/CJK/song
mkdir -p tex/latex/CJK/UTF8
cp ~/font/song.map fonts/map/dvips/CJK/
cp ~/font/*.tfm fonts/tfm/CJK/song
cp ~/font/*.pfb fonts/type1/CJK/song
cp ~/font/c70song.fd tex/latex/CJK/UTF8
更新系统:
texhash
updmap --enable Map song.map

3. 测试。
编辑一个test.tex文件:
\documentclass{article}
\usepackage{CJKutf8}
\begin{document}
\begin{CJK}{UTF8}{song}
你好!
\end{CJK}
\end{document}
然后
pdflatex test.tex
evince test.pdf,应该中文正常了,而且中文可以拷贝。搞定! :)