Skip to content

Commit

Permalink
first release.
Browse files Browse the repository at this point in the history
  • Loading branch information
chenshuo committed Feb 3, 2013
1 parent 15ee38a commit a35e6ae
Show file tree
Hide file tree
Showing 10 changed files with 421 additions and 18 deletions.
2 changes: 1 addition & 1 deletion abstract.tex
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,5 @@

\subsubsection{更新记录}
\begindot
\item[] 2012-01-14 初版
\item[] 2012-02-04 初版
\myenddot
58 changes: 58 additions & 0 deletions chapDiagram.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
\chapter{插图}

尽量用矢量图,少用点阵图(屏幕截图只适合用于step-by-step介绍软件操作)。

\section{绘图软件}

\mybooktitle 的排版过程中我使用了多种绘图工具,这里简单列举一下。
这里举的插图例子大多数可以在样章 \footnote{\myurl{http://vdisk.weibo.com/s/mtupb}} 第6章中找到。
以下这些软件都可以生成矢量图(EPS或PDF文件),印刷效果较好。

\subsection{Graphviz}
适合绘制依赖关系图,包括 \fn{\#include} 头文件的关系图(书p.132图~6-1)、
简单的 class 继承关系图等。

优点:自动布局。

缺点:无法输入中文。布局不易调整。
\subsection{gpic}

适合绘制线框图,例如数据结构。本文的图~\ref{fig:sharedptr} 就是用 gpic 绘制的。
gpic 可参考 Brian W. Kernighan 的 《PIC---A Graphics Language for Typesetting, User Manual》
和 Eric S. Raymond 的《Making Pictures with GNU PIC》。

缺点:无法输入中文。

\subsection{METAPOST}
适合绘制函数图像,例如书p.349图~9-5。

\subsection{Visio}
适合绘制较复杂的 class diagram(书p.132图~6-2),sequence diagram(例如书p.170图~6-12)。
需要安装
Visio Stencil and Template for UML 2.2
\footnote{http://www.softwarestencils.com/uml/index.html}。

可以输入中文,可以可视化编辑,可以导出为 PDF 文件,经过剪裁去掉白边
\footnote{用 \fn{pdfcrop} 工具 \S \ref{sec:pdfcrop} 按内容剪裁。}
之后可以方便地嵌入 \LaTeX 文档。

缺点:多幅内容相近的图片不易统一修改,例如《为什么多线程读写 \fn{shared_ptr} 要加锁?》%
\footnote{\myurl{http://chenshuo.googlecode.com/files/CppEngineering.pdf}}
中绘制的多幅 \fn{shared_ptr} 内部指针变化图。

\subsection{Word}
适合复杂的表格,例如书p.161表~6-1。
可以输出为PDF文件,剪裁之后以插图的方式嵌入 \LaTeX 文档。

\subsection{Excel}
适合绘制点数较少的性能数据图($x$-$y$ 坐标系),例如书p.147图~6-3。

\subsection{Gnuplot}
适合绘制点数较多的性能数据图,例如书p.150图~6-6。

%\section{图片工具}
%\subsection{pdfcrop}
%\subsection{ps2eps}
%\subsection{eps2png}

\section{待续……}
3 changes: 2 additions & 1 deletion chapEnvironment.tex
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ \subsection{\TeX 发行版}
因此我建议不要在排版期间升级 \LaTeX 的版本,
这也是我在虚拟机上安装 TeX Live 的原因之一。
这样可以轻松地备份整个系统,
将来重印需要修订书中某几页的时候不必担心“动版”。
将来重印需要修订书中某几页的时候可以使用当年的虚拟机映像,版本一致,不必担心“动版”。

\subsection{PDF阅读器}
推荐SumatraPDF,它不锁PDF文件,可以随时覆盖,并且自动刷新。
Expand Down Expand Up @@ -136,6 +136,7 @@ \subsection{理想的工作流程}
\fn{.pdf} 文件是编译的结果。
作者和编辑都可以修改源程序,并且通过版本管理软件来merge结果。
考虑到作者和编辑不在同一个内网,因此一般要用公共的版本库,例如Github。
GitHub 的私有 repository 可保证数据安全。

\subsection{现实的工作流程}
编辑往往既不会\LaTeX也不会Git,那就之好采用原始方案,
Expand Down
7 changes: 3 additions & 4 deletions chapExperience.tex
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@ \section{阿拉伯数字}

\section{全角与半角}

\section{插图}
注意 Word 和 Live Writer 会替换字符,例如把减号 - 替换为连字号 --,
如果用 Word 写初稿,或者用 Live Writer 发博客,再整理成书,则有可能遇到字符缺失。
可以考虑禁用自动替换功能。

尽量用矢量图,少用点阵图(包括屏幕截图)。
Word、Excel 可以输出为PDF文件,
去掉白边(用 \fn{pdfcrop} 工具 \S \ref{sec:pdfcrop})之后即可插入到 \LaTeX 文档中。
4 changes: 2 additions & 2 deletions chapLayout.tex
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ \section{纸张大小} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
我们通常可以用 \fn{geometry} 宏包来设置纸张和版心尺寸,
例子见 \S \ref{sec:textbody}。
\index{宏包!geometry@\fn{geometry}|(}
\index{开本}
%\index{开本}

\section{版心大小} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{sec:textbody}
Expand Down Expand Up @@ -197,7 +197,7 @@ \subsection{等宽字体}
如果要排版大量Java代码(一行可长达100列),可以考虑用窄的无衬线等宽字体,
如 TheSansMono Condensed,但似乎没有免费版本。
另外,一些英文书籍也用 Lucida Sans Typewriter 来排版代码,可以从Sun JDK中找到。
另外,一些英文书籍也用 {\small \fontspec{Lucida Sans Typewriter}Lucida Sans Typewriter} 来排版代码,可以从Sun JDK中找到。
\subsection{特殊字体}
URL可以用窄字体,以节省空间。
Expand Down
32 changes: 24 additions & 8 deletions chapStyle.tex
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ \section{斜体}

\section{列表}
\LaTeX 默认的列表环境(\fn{itemize} 和 \fn{enumerate})是为多行文字准备的,
因此上下间距较大。我一般使用 \fn{enumitem} 宏包来重新定义列表环境,并且定义几个简单的命令来使用它。
因此上下间距较大。我一般使用 \fn{enumitem} 宏包来重新定义列表环境,
并且定义几个简单的命令来使用它(\mn{begindot} 和 \mn{myenddot},\mn{beginnum} 和 \mn{myendnum})。
\index{宏包!enumitem@\fn{enumitem}}
\begin{Code}
\newcommand\begindot{\begin{itemize}
Expand All @@ -58,26 +59,37 @@ \section{章节标题}

\subsection{编号}
通常单个小节不编号,因此 \S \ref{subsec:noChineseItalic} 和本小节是错的。
因此要改用\mn{subsection*} 命令。
应要改用\mn{subsection*} 命令。

\section{图表编号} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

图的标题位于下方,按章编号。
我不使用浮动环境,因此自己定义了 \mn{figcaption} 和 \mn{tabcaption} 命令来为图表编号。
图的标题位于下方,按章编号(图1-1、图1-2、图2-1 等等)。
例如

\begin{center}

\includegraphics{sp0.eps}\\
\figcaption{\fn{shared_ptr} 的数据结构}\label{fig:sharedptr}
\end{center}


表的标题位于上方,按章编号。
表的标题位于上方,按章编号(表1-1、表1-2、表2-1 等等)
例如

\begin{center}

\tabcaption{水平空格命令的长度}

\vspace{1ex}
\begin{tabular}{ccl}
\hline
\textbf{命令} & \textbf{长度} & \textbf{用途}\\
\hline
\mn{quad} & 10pt & 图表编号与图表标题之间的全角空格\\
\mn{,} & 1.67pt & 千分空,例如 65\,536\\
\hline
\end{tabular}
\end{center}


\section{脚注} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\subsection{编号}
Expand All @@ -94,12 +106,16 @@ \subsection{编号}
让人误以为是面积单位,因此可以改用带圈数字。

\subsection{置底}
\LaTeX默认的脚注位置不是固定置底,而有可能随页面内容而浮动。例如 \myurl{footnote-middle.tex}。

\vspace{1ex}
\centerline{\fbox{\includegraphics[page=1]{footnote-middle.pdf}}%
\quad\fbox{\includegraphics[page=2]{footnote-middle.pdf}}}

使用 \fn{footmisc} 宏包的 \fn{bottom} 选项之后,
脚注置底。\nopagebreak
脚注置底。\myurl{footnote-bottom.tex}。 \nopagebreak

\vspace{1ex}
\centerline{\fbox{\includegraphics[page=1]{footnote-bottom.pdf}}%
\quad\fbox{\includegraphics[page=2]{footnote-bottom.pdf}}}

Expand Down
6 changes: 5 additions & 1 deletion chapTools.tex
Original file line number Diff line number Diff line change
Expand Up @@ -146,10 +146,11 @@ \section{PDF小册子(booklet)}
\section{PDF字体嵌入}
出版社拿到作者提供的终稿PDF之后,如果没有进一步修改,就会准备印刷了。
第一步是让出片公司打印出胶片,即“出片”。
第一步是让出片公司用激光照排机打印出胶片,即“出片”。
这种公司使用的操作系统很可能与作者不同,特别是安装的字体可能不一致。
为了防止出现文字乱码或字体错乱,出片公司一般都会要求提供嵌入全部字体的PDF文件。
一个办法是修改 Ghostscript 的配置文件,让默认字体全部迁入,例如:
\begin{Codex}[label=/usr/share/ghostscript/???/Resource/Init/gs_pdfwr.ps]
/.standardfonts [
% /Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique
Expand All @@ -158,3 +159,6 @@ \section{PDF字体嵌入}
% /Symbol /ZapfDingbats
] readonly def
\end{Codex}
还有一个办法是用 Adobe Acrobat Reader 找出 PDF 中没有嵌入的字体,
再用 iText 将字体文件嵌入,例子见 \myurl{http://itextpdf.com/examples/iia.php?id=288}。
Loading

0 comments on commit a35e6ae

Please sign in to comment.