LaTeX 常见问题 (进阶篇)

话不多说, 直接列出至今为止我所踩过的坑.

使用 listing 书写代码块的注意事项

在 listing 里面写代码块一开始就算上缩进的. 还没听懂的看下下面的对比图.

codeblock.png

说这点主要是针对我们程序员的, 一般我们写代码都会讲究按层次缩进 (图例中代码块应该在 section 下一层), 但是这边还是请将就一下吧.

代码框的排版参数问题

普通的配置是没有颜色和语法高亮支持的, 对页边距也没有做调整. 可以用一下语句在导言区进行下配置.
这里处于通用性, 我没有打开颜色高亮.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
\lstset{
%行号
% numbers=left, % where to put the line-numbers
% numbersep=-1em, % where to put the line-numbers
%背景框
% framexleftmargin=2em,
frame=single,
breaklines=true,
%背景色
%样式
captionpos=b,
title=\lstname,
% keywordstyle=\bf\color{blue},
% identifierstyle=\bf(neocomplete_start_auto_complete),
% numberstyle=\color[RGB]{0,192,192},
% commentstyle=\it\color[RGB]{0,96,96},
% stringstyle=\rmfamily\slshape\color[RGB]{128,0,0},
%显示空格
% showstringspaces=false
%边距
xleftmargin=2em,xrightmargin=2em, aboveskip=1em,
%自定义字体
basicstyle=\ttfamily,
language=c
}

伪代码框的排版参数问题

一般在写计算机科学论文时, 我们不止用代码块. 还会使用伪代码块来说明部分算法. 但是裸写伪代码的排版效果很差. 主要是因为没有设置页边距. 但是 algorithmalgorithmic 包里都没有考虑到这个问题. 只能使用 fullwidth 包来实现这一目标了. 注意这里不会出现上面的缩进问题.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
\usepackage{algorithm}
\usepackage{algorithmic}
\usepackage{fullwidth}
\begin{fullwidth}[leftmargin=1.5em,width=0.93\textwidth]
测试
\begin{algorithm}[H]
\caption{伪代码}
\label{alg1}
\begin{algorithmic}
\IF{$rc=1$}
\STATE$P(w)$
\ENDIF
\end{algorithmic}
\end{algorithm}
\end{fullwidth}

图片位置的锁定

普通的 h 指令和 !h 指令并不能保证我们的图片出现在我们制定的位置. 这时候我们就需要使用 float 宏包的 H 指令:

1
2
3
4
5
6
7
8
9
\usepackage{graphicx}
\usepackage{float}
\begin{figure}[H]
\centering
\includegraphics[width=0.92\textwidth]{placeholder.jpg}
\caption{结果}
\end{figure}

以下为xeLaTeX和中文排版问题

代码块里不支持中文

说了多少遍用 xeLaTeX, 然后再看下最后的现成配置.

xeLaTeX 导入 ctex 宏包后字体指令无法识别问题

使用 xeLaTeX 后, ctex 宏包的字体大小指令有所改变. 形如 Large 文本 变成了 Large {文本}. 注意下就可以了.

xeLaTeX 导入 ctex 宏包后的设置指令无法执行

使用 xeLaTeX 后, 有些如 CTEXsetup 指令无法识别. 这时需要将 ctex 宏包改为 ctexcap 宏包. 便可解决.

1
\usepackage[fontset=adobe]{ctexcap}

xeLaTeX 的正确导入姿势

下边给出导入xeLaTeX, 并使用 xeCJK 底包实现中文全面支持的最基本配置.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
\documentclass[a4paper]{article}
% 中文支持
\usepackage[slantfont,boldfont]{xeCJK}
\usepackage[fontset=adobe]{ctexcap}
% 插图
\usepackage{graphicx}
\usepackage{float}
%代码块
\usepackage{listings}
\usepackage{algorithm}
\usepackage{algorithmic}
\usepackage{fullwidth}
% 数学
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsthm}
% 枚举
\usepackage{enumitem}
%中文
\pagestyle{plain}
\CTEXsetup[number={\chinese{section}},name={,、}]{section}
\CTEXsetup[number={\chinese{subsection}},name={(,)}]{subsection}
\CTEXsetup[number=\arabic{subsubsection},name={,.}]{subsubsection}
\CTEXsetup[format={\Large\bfseries}]{section}
\renewcommand{\contentsname}{\centerline{\heiti{目录}}}
\floatname{algorithm}{算法}
\renewcommand{\algorithmicrequire}{\textbf{输入:}}
\renewcommand{\algorithmicensure}{\textbf{输出:}}

按如上配置, 一般的代码块, 伪代码块的中文都支持好了. 目录居中显示, 章节也使用了中文论文的标准要求. 若还需要改动. 请参考ctex的设置文档.