📄 ctex-faq.tex.bak
字号:
则进入~\env{CJK*}~模式,用
\begin{latexcmd}
\cmd{CJKspace}
\end{latexcmd}
则进入~\env{CJK}~模式。
\Question[Q-chinese-linebreak]{中英文混排时为何无法正确分行?}{0.3}{0.3}
首先,英文标点符号后要留空格,这是英文的习惯,否则~\TeX{}~无法断句。
其次,要用空格隔开中英文字符,~\TeX{}~才能正确分行。
但是如果是用正常的空格,由于空格间隙太大,容易造成比较难看的排版效果。
因此,~\pkg{CJK}~宏包重新定义了符号~\verb|~|~的意义。
~\verb|~|~的原始定义是不可断行的空格,~CJK~将其重定义成一个比较合适的弹性距离,
大约相当于四分之一个汉字宽度,用于分隔中英文字符。我们通过使用命令
\begin{latexcmd}
\cmd{CJKtilde}
\end{latexcmd}
来实现~\verb|~|~的重定义。如果要恢复原始定义,可以用命令
\begin{latexcmd}
\cmd{standardtilde}
\end{latexcmd}
注意:在~\env{CJK*}~模式下中文字符后面的空格会被忽略,
因此中文字符后面必须加上保护的空格~\verb|\ |~或者~\verb|~|~符号来隔开英文字符。
\Question[Q-chinese-fonttype]{什么是点阵字库和矢量字库?}{0.2}{0.2}
我们都只知道,各种字符在电脑屏幕上都是以一些点来表示的,因此也叫点阵。
最早的字库就是直接把这些点存储起来,就是点阵字库。常见的汉字点阵字库有
~16x16~,~24x24~等。点阵字库也有很多种,主要区别在于其中存储编码的方式不同。
点阵字库的最大缺点就是它是固定分辨率的,也就是每种字库都有固定的大小尺寸,
在原始尺寸下使用,效果很好,但如果将其放大或缩小使用,效果就很糟糕了,
就会出现我们通常说的锯齿现象。因为需要的字体大小组合有无数种,
我们也不可能为每种大小都定义一个点阵字库。于是就出现了矢量字库。
矢量字库是把每个字符的笔划分解成各种直线和曲线,然后记下这些直线和曲线的参数,
在显示的时候,再根据具体的尺寸大小,画出这些线条,就还原了原来的字符。
它的好处就是可以随意放大缩小而不失真。而且所需存储量和字符大小无关。
矢量字库有很多种,区别在于他们采用的不同数学模型来描述组成字符的线条。
常见的矢量字库有~\faqindex{Type1}~字库和~\faqindex{TrueType}~字库。
\Question[Q-chinese-cjkfonts]{在~\pkg{CJK}~中都可以使用哪些矢量字库?}{0.2}{0.2}
在~\pkg{CJK}~中可以使用~\faqindex{Type1}~字库和~\faqindex{TrueType}~字库,
都能产生很好效果的输出,但有许多细微的差别,输出结果取决于所用的工具。
下面根据转换工具和输出文件类型来比较它们的差异。
\begin{enumerate}
\item~使用~dvips~生成~\PS~文件
\begin{itemize}
\item~dvips~可以直接使用~Type1~字库,生成的~\PS~文件中包含了字符的矢量描述,
具有很好的缩放效果。
\item~dvips~不能直接使用~TrueType~字库,因此必须通过~ttf2pk~生成中间的pk字库,
这是一种点阵字库,所以生成的~\PS~文件在效果较差。
\end{itemize}
\item~使用~dvipdfm~生成~PDF~文件和~dvips~类似,可以直接使用~Type1~字库或者
通过~ttf2pk~间接使用~TrueType~字库。
\item~使用~pdf\LaTeX{}~生成~PDF~文件可以直接使用两种字库,因此都可以产生效果很好的输出。
\item~使用~dvipdfmx~生成~PDF~文件可以直接使用两种字库,因此都可以产生效果很好的输出。
而且直接使用~TrueType~字库时生成的~PDF~文件是唯一能支持对中文内容进行正常拷贝粘贴的。
\end{enumerate}
\Question[Q-chinese-fontconflict]{两种类型矢量字库会不会发生冲突?}{0.2}{0.2}
不会,每个工具都有自己的~config~和~map~文件按一定的顺序查询有哪些字库可以使用,
来决定使用哪种字库。
\Question[Q-chinese-pdfcopy]{如何生成支持中文拷贝粘贴的~\faqindex{PDF}~文件?}{0.2}{0.2}
生成可以拷贝粘贴中文的~PDF~文件目前只有~\faqindex{dvipdfmx}~(原名~dvipdfm-cjk~)可以做到,
它必须配置成直接使用中文~TrueType~字库。
\section{文档排版}
\Question[Q-typeset-indentfirst]{如何使首段段首也缩进?}{0.1}{0.1}
使用~indentfirst~宏包:
\begin{latexcmd}
\cs{usepackage}\marg{\pkg{indentfirst}}
\end{latexcmd}
\Question[Q-typeset-doublespace]{如何设置双倍或者更大的行间距?}{0.2}{0.3}
使用命令
\begin{latexcmd}
\cmd{renewcommand}\marg{\cmd{baselinestretch}}\marg*{倍数}
\end{latexcmd}
\Question[Q-typeset-comments]{如何注释掉一大段内容,不做编译?}{0.1}{0.2}
用命令
\begin{latexcmd}
\cmd{iffalse}
\end{latexcmd}
和
\begin{latexcmd}
\cmd{fi}
\end{latexcmd}
把需要注释的内容包含起来,这样~\LaTeX{}~编译的时候就会忽略这些内容,
不做编译。
也可以使用~\pkg{verbatim}~宏包提供的~\env{comment}~环境:
\begin{code}
...
\usepackage{verbatim}
...
\begin{comment}
This is comment.
\end{comment}
...
\end{code}
\Question[Q-multicol]{如何生成分栏的文档?}{0.1}{0.3}
如果全文都是双列分栏格式,可以在~\cmd{documentclass}~命令中加入参数~twocolumn。例如:
\begin{code}
\documentclass[twocolumn]{article}
\end{code}
如果要生成单双列混合的分栏格式,或者超过两列的分栏格式,则要用到~\pkg{multicol}~宏包的
~\env{multicols}~环境。
\begin{latexcmd}
\cs{usepackage}\marg{\pkg{multicol}}
\end{latexcmd}
然后将需要多列的地方使用:
\begin{latexcmd}
\cs{begin}\marg{\env{multicols}}\oarg*{列数}
\end{latexcmd}
和
\begin{latexcmd}
\cs{end}\marg{\env{multicols}}
\end{latexcmd}
包含起来。
\Question[Q-multicol-balance]{如何使得双栏文档保持底部对齐?}{0.3}{0.3}
在~\LaTeX{}~标准文档类中使用~twocolumn~选项产生双栏格式文档的时候,
如果一页的内容不足以排满页面时,~\LaTeX{}~的结果是先排满左栏,
然后再排版右栏。这样就造成了两栏的长度不相等,底部不齐。
很多时候我们不希望这种排版结果。
这个问题只有在用标准文档类的~twocolumn~模式的时候才会遇到,
使用~\pkg{multicol}~宏包就可以避免这个问题(参见~\Qref{Q-multicol}~)。
但是~\pkg{multicol}~宏包也有一些缺点,例如不允许单栏的浮动对象
(参见~\Qref{Q-float-multicol}~)。
要使标准文档类的~twocolumn~模式下也能做到双栏底部对齐,可以通过手工
调整分栏的位置。在~twocolumn~模式下~\cmd{newpage}~命令使~\LaTeX{}~
开始在新的一栏上排版,如果单前栏是左栏,就换到右栏上开始排版。
在合适的地方使用~\cmd{newpage}~命令可以使得双栏底部对齐(注意,
不能用~\cmd{clearpage}~命令,这个命令会开始在新的一页上排版,
而不管当前在哪一栏上)。几乎没有人愿意使用这种方法,不仅因为它需要
你手工计算需要插入命令的位置,每次改动文档都有可能需要变动
~\cmd{newpage}~命令的位置,而且对于一些自动生成的文档内容(例如参考
文献和索引),要插入~\cmd{newpage}~命令十分困难。
\pkg{flushend}~宏包通过修改~\LaTeX{}~核心定义来解决这个问题。
使用它提供的~\cmd{flushend}~命令可以使得双栏底部对齐,而~\cmd{raggedend}~
命令则取消底部对齐。~\cmd{flushend}~命令会在宏包装入的时候自动运行。
\emph{\pkg{flushend}~宏包只对文档最后一页有效,也就是说所有中间的强制换页,
或者章节的自动换页导致的双栏底部不齐现象都无法解决。}
\pkg{balance}~宏包是另外一个更好的方法。它比~\pkg{balance}~更加完善,
而且对整个文档的任何位置都有效。\pkg{balance}~宏包提供了~\cmd{balance}~
命令来打开双栏底部对齐机制,~\cmd{nobalance}~命令来关闭这个机制。
和~\pkg{flushend}~宏包不同,它在装入的时候缺省不打开对齐机制,
因此需要在文档中加入~\cmd{balance}~命令来启用底部对齐。
在使用这些宏包的时候需要注意,单栏的浮动对象有可能破坏这些宏包的对齐机制。
这种时候需要手工调整浮动对象的位置来改善排版效果。这也是~\pkg{multicol}~
宏包不支持单栏浮动对象的原因之一。
\Question[Q-multicol-abstract]{如何在双栏文档中使用通栏的摘要?}{0.3}{0.3}
在排版双栏文章的时候最经常遇到的一个问题就是如何产生通栏(不分栏)的摘要。
解决这个问题的方法是:
\begin{code}
\documentclass[twocolumn]{article}
...
\begin{document}
...
\title{...}
\author{...}
\twocolumn[
\begin{@twocolumnfalse}
\maketitle
\begin{abstract}
...
\end{abstract}
\end{@twocolumnfalse}
]
...
\end{document}
\end{code}
\emph{注意,~\cmd{maketitle}~命令必须放在示例中的位置,否则标题结束后会另起一页。}
但是标题和作者的定义可以放在前面的位置。
上面这个方法会带来一个副作用,那就是~\cmd{thanks}~命令在~\cmd{title}~和~\cmd{author}~
中失去了作用,无法产生脚注。这个问题可以通过附加一小段代码来解决:
\begin{code}
...
\title{...}
\author{...\thanks{}} % 这里用一个空的 \thanks
\twocolumn[
...
]
{
\renewcommand{\thefootnote}{\fnsymbol{footnote}} %如果使用数字做脚注标号,则不需要这一行
\footnotetext[1]{真正的脚注内容}
}
...
\end{code}
\pkg{abstract}~宏包提供了一个~\cmd{saythanks}~命令和~\env{onecolabstract}~环境
来简化这个稍嫌复杂的过程。它们的用法是:
\begin{code}
...
\title{...}
\author{...\thanks{...}}
\twocolumn[
\maketitle
\begin{onecolabstract}
...
\end{onecolabstract}
]
\saythanks
...
\end{code}
\Question[Q-typeset-landscape]{如何产生全部横排的文档?}{0.3}{0.3}
使用文档类的~landscape~参数,例如
\begin{code}
\documentclass[landscape]{article}
\end{code}
为了产生正确的结果,~dvips~必须加上~\texttt{-t landscpae}~参数,
~dvipdfm/dvipdfmx~必须加上~\texttt{-l}~参数。
\Question[Q-typeset-lscape]{如何使文档中的某一页横排?}{0.3}{0.3}
使用~\pkg{lscape}~宏包提供的~\env{landscape}~环境,例如
\begin{code}
...
\usepackage{lscape}
...
\begin{landscape}
This is a landscape page.
\end{landscape}
...
\end{code}
将产生一个横排的页面,但是只有在~\PS~或者~PDF~文件中才能看到正确的效果。
\Question[Q-font-times]{如何使用~New Time Roma~字体?}{0.3}{0.3}
用~\pkg{times}~宏包就可以把文本的缺省字体换成~Times New Roman~字体。
如果你安装有~MathTime~字库,那么还可以使用~\pkg{mathtime}~宏包来
把数学环境中的字体都变成~Times New Roman~字体。例如
\begin{code}
\usepackage{times}
\usepackage[mtbold,mtpluscal,mtplusscr]{mathtime}
\end{code}
\section{数学公式}
\subsection{编号}
\Question[Q-math-thmnum]{如何实现定理、定义、推论等的统一编号?}{0.1}{0.1}
现在很多文章的定理、定义、推论、例子都采用统一编号,不再是
独立编号。如定义~1.1,接下来可能是定理~1.2,然后推论~1.3,等等。
这可以用如下的定义来完成:
\begin{code}
\newtheorem{thm}{Theorem}[section] %如果不采用章节号做前缀,则不用[section]
\newtheorem{defn}[thm]{Definition} %这句定义使得defn环境和thm共享编号
\newtheorem{lem}[thm]{Lemma} %这句定义使得lem环境和thm共享编号
\end{code}
\Question[Q-math-numwithin]{如何让公式编号中使用当前章节编号做前缀?}{0.3}{0.3}
如果你想让~\LaTeX{}~产生的公式编号中包含当前的章节编号,例如第一节的公式编号
是~(1.1) (1.2)~,第二节的公式编号是~(2.1) (2.2)~等等,你可以重新定义
~\cmd{theequation}~:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -