⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ctex-faq.tex.bak

📁 是一些TEx的模板
💻 BAK
📖 第 1 页 / 共 5 页
字号:
\subsection{表格}

\Question[Q-table-pcol]{表格中使用~p~参数的列如何改变对齐方式?}{0.3}{0.3}

表格的列参数中的~p~参数可以指定列的宽度,但是由于无法和其他控制对齐方式的
参数同时作用在一个列上,因此需要使用额外的方法来控制这些列的对齐方式。
常用的控制对齐方式命令有:~\cmd{centering}~(居中)、~\cmd{flushleft}~
(左对齐)和~\cmd{flushright}~(右对齐)等。

真正的麻烦并不在这里,而在于换行命令。当~p~参数被用在最后一列时,
如果在这一列中使用上面的这些对齐命令,例如
\begin{code}
... & \centering ... \\
\end{code}
就会遇到
\begin{prompt}
... misplaced \noalign ...
\end{prompt}
或者类似的编译错误。问题的原因是换行命令~\cmd{\bs}~在不同的环境下有着
不同的定义。在~\env{tabular}~环境中,这个命令被重新定义以适合于控制表格
的显示,而~\cmd{centering}~、~\cmd{flushleft}~和~\cmd{flushright}~命令
把它修改成了另一个不兼容的定义。因为表格的每一个格子都是通过一个盒子
(~box~)来实现的,格子内的定义在分隔符~\verb|&|~或者~\cmd{\bs}~之后都
不再有效,因此上面的这个问题只会出现在每一行的最后一列上。

\LaTeX{} 2.09~的解决方法是保存并在稍后恢复~\cmd{\bs}~的定义:
\begin{code}
\def\PBS#1{\let\temp=\\%
  #1%
  \let\\=\temp}
\end{code}
用法是
\begin{code}
... & \PBS\centering ... \\
\end{code}
这种技巧在使用~\pkg{array}~宏包提供的格式化列参数方法中也可以使用
\begin{code}
\begin{tabular}{...>{\PBS\centering}p{50mm}}
...
\end{tabular}
\end{code}

而~\LaTeXe{}~则通过公开~\cmd{\bs}~在表格中的内部定义来解决这个问题。
这个定义被保存在命令
\begin{latexcmd}
\cmd{tabularnewline}
\end{latexcmd}
中。于是你可以使用
\begin{code}
... & \centering ... \tabularnewline
\end{code}

\Question[Q-table-fixwidth]{如何生成固定宽度的表格?}{0.3}{0.3}

在~\LaTeX{}~中生成固定宽度的表格有两种方法,一种是通过扩展列之间的空隙,
另一种是扩展某些指定的列。

第一种方法通过~\env{tabular*}~环境来实现。在~\env{tabular*}~环境的第一个
参数中指定表格的总宽度,然后在表格的列格式参数中使用~\cmd{extracolsep}~
命令来增加列之间的空隙。
\begin{example}
\begin{tabular*}{5cm}{@{\extracolsep{\fill}}lllr}
\hline
 1 & 2 & 3 & 4 \\
 21 & 22 & 23 & 24 \\
\hline
\end{tabular*}
\end{example}
这种方法的一个缺点是列之间如果加入分隔符,则列之间的空隙是放在下一列的左边
而不是在两列之间平均分配。我们来看上面的例子加入分隔符后的样子
\begin{example}
\begin{tabular*}{5cm}
  {@{\extracolsep{\fill}}|l|l|l|r|}
\hline
 1 & 2 & 3 & 4 \\
 21 & 22 & 23 & 24 \\
\hline
\end{tabular*}
\end{example}

另一种方法可以通过使用~\env{tabular}~环境的列格式参数之一~p\parg{宽度}~
来指定相应列的固定宽度。这种方法需要用户手工计算分配每个列的具体宽度。
另外,由于~p~参数不能和其他控制对齐方式的参数同时作用在一个列上,
因此需要使用额外的方法来控制这些列的对齐方式(参见~\Qref{Q-table-pcol}~)。

\pkg{tabularx}~宏包提供了一个自动计算分配列宽度的表格环境~\env{tabularx}~。
这个环境的使用方法和~\env{tabular*}~相同。不同之处在于它增加了一个~X~参数。
所有使用~X~参数的列会平均分配多余的空间,然后转换为~p~参数来指定列的宽度。
该宏包也提供了方法让你可以指定如何转换或者转换为其他的列参数。
该宏包需要~\pkg{array}~宏包的支持。

\pkg{ltxtable}~宏包则结合了~\pkg{longtable}~和~\pkg{tabularx}~宏包的特点。
但是它的用法有点复杂,请仔细阅读它的文档。

\subsection{浮动对象}

\Question[Q-float-extraspace]{浮动对象和上下文之间的距离太大了,怎么办?}{0.3}{0.3}

经常有用户抱怨浮动对象~\env{figure}~或者~\env{table}~和上下文之间的距离太大了,
以至他们不得不手工调整这个距离。但是大多数人没有意识到是他们自己使用的代码
引入了这些额外的空间。

问题出在~\env{center}~环境(以及类似的~\env{flushleft}~和~\env{flushright}~
环境)上面,这些环境都是基于~\LaTeX{}~的~\env{list}~定义的。
\env{list}~类型的环境都会在它们自己和上下文之间加入间隔,这个间隔的大小通过
许多参数来决定。因此,如果我们是用下面的代码:
\begin{code}
\begin{figure}
 \begin{center}
  \includegraphics{...}
  \caption{...}
 \end{center}
\end{figure}
\end{code}
或者更糟糕的
\begin{code}
\begin{figure}
 \begin{center}
  \includegraphics{...}
 \end{center}
 \caption{...}
\end{figure}
\end{code}
那么就会多出一些无法预料的空白。

解决的方法是使用一些基本命令,而不是使用它们经过~\env{list}~类型环境包装后的格式。
例如
\begin{code}
\begin{figure}
 \centering
 \includegraphics{...}
 \caption{...}
\end{figure}
\end{code}
这个方法适合于所有的~\LaTeX{}~宏包,除了一些过时的~\LaTeXe{}~之前的宏包,如
~\pkg{psfig}~和~\pkg{epsf}~。

\Question[Q-float-multicol]{分栏文档中如何使用单栏或者通栏浮动对象?}{0.3}{0.3}

如果你使用的是~\LaTeX{}~标准文档类的~twocolumn~模式,那么使用~\env{figure}~
和~\env{table}~环境可以产生单列的浮动图形或者表格,而使用~\env{figure*}~
和~\env{table*}~环境则可以产生通栏的浮动图形或者表格。

如果你使用的是~\pkg{multicol}~宏包提供的~\env{multicols}~环境,那么就有一点小问题了。
~\env{figure}~和~\env{table}~在这种方式下无法正常工作,会导致图形或者表格丢失。
但是,~\env{figure*}~和~\env{table*}~仍然可以正常工作,产生通栏的浮动图形或者表格,
就像在标准文档类的~twocolumn~模式下一样。

要在~\env{multicols}~环境中使用单栏的图形或者表格,可以使用~\pkg{float}~宏包提供的
~[H]~位置选项。例如
\begin{code}
\begin{figure}[H]
...
\caption{...}
\end{figure}
\end{code}
但是要注意的是,这种方式产生的对象是不能“浮动”的,也就是说位置是固定的。
因此,有时候你必须仔细调整它的位置,以免造成分栏的底部参差不齐。

\Question[Q-float-multicol-place]{分栏文档中为何不能设定通栏浮动对象的位置?}{0.3}{0.3}

如果你在在分栏的文档中设定一些通栏的浮动对象(参见~\Qref{Q-float-multicol}~)
的位置选项,你会发现~[htbp]~四个选项中的~h~和~b~选项是不起作用的。也就是说,
通栏的浮动对象只能在页面的顶部(~t~选项)或者单独的页面上(~p~选项)。
以上是对标准文档类的~twocolumn~模式而言。如果使用~\pkg{multicol}~宏包的
~\env{multicols}~环境,~b~选项是有效的,但~h~选项也是不起作用。

对于在标准文档类的~twocolumn~模式中需要把通栏浮动对象放置在页面底部,
也就是让~b~选项有效,可以使用宏包~\pkg{stfloats}~。

而要让~h~选项有效,目前还没有好的办法。~\pkg{midfloat}~宏包提供的~\env{strip}~
环境可以作为一种近似的解决方案,但效果并不是很好。

\section{参考文献}

\Question[Q-bib-overcite]{如何将文献引用作为上标出现?}{0.2}{0.2}

将文献引用作为上标出现可以使用~overcite~宏包
\begin{latexcmd}
\cs{usepackage}\marg{\pkg{overcite}}
\end{latexcmd}
或者使用~natbib~宏包的~super~参数
\begin{latexcmd}
\cs{usepackage}\oarg{super}\marg{\pkg{natbib}}
\end{latexcmd}

但是,这两种方法产生的上标引用都没有括号。要增加括号,
可以修改这两个宏包中的相应定义。更简单的一个方法是使用如下命令
\begin{code}
\makeatletter
\def\@cite#1#2{\textsuperscript{[{#1\if@tempswa , #2\fi}]}}
\makeatother
\end{code}
而不需使用任何宏包。

\Question[Q-bib-cites]{如何排序并压缩连续的引用,产生如~[2,4--8]~形式的引用?}{0.3}{0.3}

如果你在~\LaTeX{}~中使用~\cmd{cite}\marg{a,b,c,d,e,f}~则~\LaTeX{}~
不会对条目进行排序,因此,可能会产生象~[6,2,5,8,4,7]~这样很难看的
排版效果。大多数人都希望对引用的条目进行排序,并且对连续的条目使用
压缩的表示方式,即用~[2,4--8]~表示上面的例子。使用~\pkg{cite}~宏包
可以解决这个问题。另一种方法是使用宏包~\pkg{natbib}~并指定选项
~numbers~和~sort\&compress~,可以得到一样的效果。如果使用~\BibTeX{}~
则必须使用~\pkg{natbib}~所带的数字式参考文献风格(~plainnat.bst~和
~unsrtnat.bst~)。

在使用~\pkg{hyperref}~宏包来生成超链接的时候会有点问题。~\pkg{cite}~
宏包会完全失效,产生没有排序和压缩的引用。而~\pkg{natbib}~则可以得到
排序但没有压缩的引用效果。如果你想得到排序而且压缩的效果,可以在加入
~\pkg{natbib}~宏包后再使用宏包~\pkg{hypernat}~。

\Question[Q-bib-makebst]{如何定制自己的参考文献样式?}{0.3}{0.3}

\index{makebst}
用户可以自己编写参考文献的样式文件(~\texttt{.bst}~文件)。
但并不是所有的用户都能迅速掌握用于编写参考文献样式文件的语言。
在这种情况下,修改现有的样式文件比较适合对该语言不熟悉的普通用户。
如果你需要的样式和现有样式的差别不是太大的话,你可以考虑使用
~custom-bib~工具。这个工具包含一个~\texttt{makebst.tex}~文件。
在命令行上输入命令
\begin{prompt}
latex makebst
\end{prompt}
在回答一系列问题之后,一个按照你的要求定制的参考文件样式文件就诞生了。

\Question[Q-bib-bibtext]{如何才能把参考文献条目放在正文中?}{0.3}{0.3}

一些学术期刊和出版社要求把参考文献条目放在正文中,而另一些可能要求放在
脚注里。可以帮助你把参考文献条目放入正文中的宏包有
\begin{itemize}
 \item 宏包~\pkg{bibentry}~,该宏包对你使用的~\texttt{.bst}~文件产生的
       参考文献条目格式有一些限制,但除此之外没有要求使用特定的样式文件。
 \item 宏包~\pkg{inlinebib}~,该宏包要求必须使用它自带的
       ~\texttt{inlinebib.bst}~样式文件。
 \item 宏包~\pkg{jurabib}~,该宏包也要求使用它自带的四个样式文件之一。
\end{itemize}
而用于把参考文献条目放入脚注中的宏包有
\begin{itemize}
 \item 宏包~\pkg{footbib}
 \item 宏包~\pkg{jurabib}
\end{itemize}

\Question[Q-bib-backref]{能否生成反向引用(从参考文献指向引用的正文)?}{0.3}{0.3}

可以。有两个宏包可以使用,一个是~\pkg{citeref}~,另一个是~\pkg{backref}~宏包。
~\pkg{citeref}~的代码似乎相对简单些(因此可能更稳定些),但是不能配合
~\pkg{hyperref}~生成超链接。而~\pkg{backref}~是~\pkg{hyperref}~宏包附属的。
~\pkg{backref}~有四个选项可以选择,缺省是~pageref~:
\begin{itemize}
 \item ref~选项得到引用所在的节编号
 \item pageref~选项得到引用所在的页码
 \item hyperref~选项是超链接形式的~ref
 \item hyperpageref~选项是超链接形式的~pageref
\end{itemize}
配合~\pkg{hyperref}~宏包使用时可以通过指定~\pkg{hyperref}~的~backref~或者
~pagebackref~选项来自动装入~\pkg{backref}~宏包。

两个宏包都只能产生没有压缩的引用(如~[5,6,7]~不会被输出成~[5--6]~),
同时对于对该参考文献多次引用的页面,也不会重复出现。

\Question[Q-bib-chapterbib]{如何让每章或者每节都有单独的参考文献?}{0.3}{0.3}

使用~\pkg{chapterbib}~宏包可以让你在一个文档里产生多个参考文献。
不过并不像它的名字所表示的那样,这些参考文献并不是和章或者节联系在一起,
而是和~\cmd{include}~命令包含的子文件联系在一起。也就是说,每一个通过
~\cmd{include}~命令包含的子文件可以拥有一个单独的参考文献,

\pkg{bibunits}~宏包则允许用户使用~\cmd{bibliographyunit}~命令选择让每章
还是每节拥有一个单独的参考文献。也可以通过它提供的~\env{bibunit}~环境和
~\cmd{putbib}~命令使得任意的一段文档内容拥有一个单独的参考文献。
\pkg{bibunits}~必须配合~\BibTeX{}~使用。详细的用法请参考宏包使用说明。

\Question[Q-bib-multibib]{如何产生多个参考文献列表?}{0.3}{0.3}

如果你想让文档的某些部分(如章、节)拥有单独的参考文献,请参考
~\Qref{Q-bib-chapterbib}~。这里讨论的是如何将文档的参考文献分割
为多个部分,有三种方法可以选择,都必须配合~\BibTeX{}~使用。

\pkg{multibbl}~宏包通过对标准命令的扩展来支持多个参考文

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -