forked from a358003542/xelatex-guide-book
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxelatex指南.tex
3473 lines (2530 loc) · 180 KB
/
xelatex指南.tex
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
% !Mode:: "TeX:UTF-8"%確保文檔utf-8編碼
%新加入的命令如下:addchtoc addsectoc reduline showendnotes devideentby
%新加入的环境如下:common-format fig
\documentclass[11pt,oneside]{book}
\usepackage{book}
\begin{document}
\frontmatter
\title{\XeLaTeX 指南}
\author{万泽}
\maketitle
\addchtoc{前言}
\chapter*{前言}
我试图收集整理各方面来的xelatex相关的信息,包括自己的实践经验总结,作为后学者的指南手册。
一切在尊重版权的基础上出于爱好兴趣和相信自由分享的价值原则上进行。
在乎内容和在乎外表总是一个永恒的两难问题啊。读者在使用tex排版系统的时候应该早早的就给自己一个定位,你是更在乎内容呢还是更在乎华丽的表现形式。
如果你在乎的是更流畅的书写内容,那么本书的org模式详解部分可能是你很感兴趣的。采用这种模式就不可避免的在生成资料的外表上有点损失,不管是html的css深度定制还是tex相关sty深度定制都是如此。当然这种模式并不是说不可以进行生成资料的深度定制,只是因为html和tex源代码已经是二级生成文档了,所以进一步的修改或者对org文本的进一步定制都不能太多。对于这部分读者推荐使用emacs编辑器,将org模式作为你的作业环境。
如果你在乎的是更华丽的表现形式或者说出版级别的版面设计,那么本书的org模式详解部分【在附录部分】你可以不阅读,同时本书讨论的一些高级课题都可能会对你有帮助,同时由于tex排版系统真要深入进去有极深的内容,这些我也无能为力了。那么对于你的高要求目的(出版级别的版面设计)可能本书都稍显肤浅和入门性质了。对于这部分读者推荐就直接使用tex文件作为工作环境,编辑器推荐较为高级的编辑器,比如texmaker等等。
全书主要分为四大块:
\begin{description}
\item[1. xelatex基础] \hfill \\
这部分内容会就xelatex或者latex的基础知识内容做全面的整理归类排版,争取做到言简意赅并面面俱到和实用性很强的手册性质。
\item[2. xelatex进阶] \hfill \\
更深入地讨论xelatex的排版问题。
\item[4. xelatex高级篇] \hfill \\
这部分讨论了xelatex在不同领域(比如化学,tikz制图,幻灯片,试卷等等)的应用,这部分作业模式只可能是基于tex文档的作业模式了,那么也就是在完全追求华丽的表现效果的目的之上了,同时这些领域可能会有其他工具提供更好的用户体验或者更华丽的表现效果,这是值得我们注意的。
\item[5. 附录] \hfill \\
里面有些内容你可能会很感兴趣。
\end{description}
本文的github地址是:\\
\href{https://github.com/a358003542/xelatex-guide-book}{https://github.com/a358003542/xelatex-guide-book}
\addchtoc{目录}
\setcounter{tocdepth}{2}
\tableofcontents
\mainmatter
\part{xelatex基础}
\chapter{背景知识}
\section{TeX}
以下完全按照wikibook中的latex翻译的。\href{http://en.wikibooks.org/wiki/LaTeX/Introduction}{wikibook-latex}
Tex是一个底层的标记式的编程语言,Donald Knuth发明的排版系统,可以用来排版出很漂亮的文章。当初Knuth看到自己的文章和书籍被排版的丑陋不堪,于是在1977年开发了这个排版引擎,这个引擎深深地改变了出版业,大力扩展了数字打印设备的潜能。1989年Tex支持了8位字符,然后Tex的开发就被冻结了,只限bug的修复。Tex作为一种编程语言,是支持if-else结构的:你能够在里面执行数学运算(他们在编译文件的时候被执行),等等。。不过你会发现要做其他的还是很困难的除了排版文字。Tex对于文章的结构和格式提供了良好的解决方案,使得它成为一个强大的神器。Tex是出了名的稳定,可以运行在各种计算机上,几乎没有bug。Tex的版本是按照$\pi$的序列扩展的,目前到了3.1415926。
\section{关于Knuth教授}
Knuth教授是\TeX 排版系统的发明人,出于内容精简的目的,关于Knuth教授的生平信息删去了,有兴趣的请参看\href{http://zh.wikipedia.org/wiki/%E9%AB%98%E5%BE%B7%E7%BA%B3}{wiki-高德纳}。
\section{LaTeX}
LaTeX是一个宏包,其目的是使作者能够利用一个预先定义好的专业页面设置,从而得以高质量地排版和打印他们的作品。LaTeX 最早是由Leslie Lamport编写的,并使用\TeX 作为其排版系统引擎\cite{lshort}。
\section{XeLaTeX}
关于XeLaTeX第一是文档是UTF-8编码的,第二是它对各种字体多语言输出文章的解决方案是最完美的,第三是LaTeX里面能够用的命令它一般都能用,第四是编译生成pdf文件使用的命令是xelatex什么什么tex文件,第五是需要知道它内置引擎现在一般是xdvipdfmx。
\chapter{beginning}
在\LaTeX 的代码中最重要的是理解各种各样的命令的功能,正是这些各种各样的命令让你输入的文字显得与众不同。比如说我现在在打很长的一段文字,\LaTeX 会自动换行的,而我在这里按下Enter键
,实际上并没有换行的效果。理解这一点很重要,\LaTeX 不同于微软的word软件或者其他openoffice之类,不是采用的所见即所得模式,我在这里打的是奇奇怪怪的东西,但是最后显示出来的却可能是很美观的东西。\LaTeX 的一个设计理念就是所想即所得,它甚至有点偏执地要求你组织好你自己的文章的结构,而这正是\LaTeX 的爱好者所推崇的。
同样在代码中你空 一个格或者空 很多个格都是没有区别的,都是一个空格\footnote{现在中文之间的空格不会显示了,不清楚是xelatex还是xecjk宏包处理,这样挺好的。}。
在\LaTeX 中空一行和空很多行的效果是一样的,都是空一行,表示另起一段。
\LaTeX 的命令用到了一些特殊的符号,所以你就不能按照常规用到它们了,这些符号如下:\\
\#~~\$~~\%~~\^~~\_~~\&~~\{~~\}~~\~~~\textbackslash \\
更详细的说明请参见后面的特殊符号\ref{sec:symbols}
\LaTeX 的命令是case~sensitive的。也就是命令是区分大小写的。
现在我把最基本的代码说明一下,\LaTeX 的代码的通用格式是这样的,\textbackslash{}开头,然后跟上命令符号,然后跟上[],方括号中放的是该命令的可选参数,然后跟上\{\},花括号里面跟的是该命令的必填参数。具体如下:\\
\textbackslash command [optional parameters]\{parameters\}
前面第一行代码是:\\
\textbackslash documentclass [11pt,oneside]\{book\},意思是描述文章模板的类型为book\\,也就是一本书,除此之外还有article,report,slide类型等,更详细的讨论参见documentclass说明\ref{sec:documentclass}
然后我们看到第二行代码:
\textbackslash usepackage\{什么宏包\}
这个usepackage命令后面跟上你想加载的库文件,等你使用\LaTeX 久了,就会接触到更多的宏包的。
后面的代码:
\textbackslash begin\{document\}
文章内容
\textbackslash end\{document\}
描述文档开始,文档结束。在文档结束命令之后,你写的任何东西都会被\LaTeX 忽略掉。文档环境里面就写着你的文章的内容。
\section{查看宏包帮助文档}
这个我先讲了,实际上沉下心来阅读文档是最好的学习\LaTeX 的方法了。
比如我要查看xeCJK文档,就在终端中输入:\\
texdoc xeCJK
在texmaker的帮助菜单下面有个功能类似的小插件。
\section{从documentclass说起}
\label{sec:documentclass}
文档刚开始是preamble区域,放着文档的一些配置,从begin\{document\}开始进入正文区,出了end\{document\}这句话之后后面写的什么程序都不管了。document是一个环境,后面我们会接触很多的环境的。
documentclass命令的必选参量有article,report,book, slides,beamer等,一般了解这几个就够用了。他们之间有很多细微的差别,这个后面慢慢了解。
分节命令带星号表示该分节不进入目录,也不编号。
文档的章节分级结构如下:\\
\textbackslash part \{partname\}\\
\textbackslash chapter \{chaptername\}\\
\textbackslash section \{sectionname\}\\
\textbackslash subsection \{subsectionname\}\\
\textbackslash subsubsection \{subsubsectionname\}\\
\textbackslash paragraph \{paragraphname\}\\
\textbackslash subparagraph \{subparagraphname\}
一般paragraph和subparagraph分节不怎么使用,就在文档中一行一行空出来即可。还有subsubsection这个分节也不常使用,因为section之下有subsection已经很好地满足了思想的分级结构。paragraph命令可以构建出类似description环境的效果,不同的是后面不缩进,装载内容容量更大。
所以结合前面book,article分类我在这里为了简单起见约定如下:文档中一个小段落就是subparagraph不需要用命令再标识一次,几个段落构成一个paragraph,这从原则上就是某一个问题的阐述,也就是一个section级别,当我们对某一个课题反复思考之后,积累的资料越来越多,然后我们发现某几个section可以合并起来,这样出现了section和subsection两个级别。目录只需要显示section,如果是大型文档有part的时候可以考虑加入少量的subsection,这样目录才不至于过于庞大反而失去了实用性。这所有的section潜在的一个大的分类是chapter,但是这里不需要写出来,因为这个时候整个文档的级别是article。也就是通常所见的小容量的书小册子,某一个专门课题的讨论就按照article来处理。如果上升到某一个学科不同课题的讨论,那么上面article隐藏的chapter写出来,然后将他们合并为book类,这个时候这个book潜藏的最高级别为part。如果是不同学科的合并书籍那么级别就上升到part了。目录在book类的时候有part写上part,然后chapter和section都显示出来,结构也不会太复杂的。
当然以上讨论只是泛泛而论,你需要根据自己的实际情况来,但总的原则是自己心里应该有一个划分标准,毕竟一本书最有价值的部分就是目录了,如果一本书的目录结构是乱七八糟的那么这本书不值一看。
\subsection{一般的可选项}
10pt,11pt,12pt 设置文档所使用字体的大小,默认是10pt\cite{wikibook-latex}\linebreak 。
a4paper ,letterpaper... 定义纸张的大小,此外还有\\a5paper,b5paper,executivepaper,legalpaper等。
fleqn 设置该选项将使数学公式左对齐,而不是中间对齐。
leqno 设置该选项将使数学公式的编号放置于左侧而不是右侧。
titlepage, notitlepage 指定是否在文档标题后开始新一页,article文档类不开始新页,report和book开始。
onecolumn, twocolumn 指定LaTeX以单栏或双栏方式排版文档。
twoside, oneside 指定LaTeX排版文档为双面或单面格式,article和report默认为单面,book默认为双面。
openright, openany 定义chapter开始时仅在奇数页或者随意,book类默认openright,report默认openany,article没有chapter。
\section{书籍的通用结构}
通常一本书是由好几部份构成的,包括封面、扉页、书名页、目次、序、内文、补充或参考资料、版权页。
出版的书籍的封面和扉页这里我们不考虑。电子书籍就从书名页开始说起。也就是我们的maketitle命令。这个时候也可以认为书名页作为了通常意义上的封面。maketitle可以生成多页,你可以考虑把版权页也算在里面,因为出版的书籍那个版权页刚好在背面,而电子书籍我觉得版权页还是放到最后面合适一些,当然多页封面你还可以自己加点名言警句页,这个看自己喜好了。
然后接下来是序言部分,自序或者他序都可以。自己编的电子书籍就是自序了,自序内容不宜过长,相当于论文的摘要部分,用最简短的话让别人对这本书有一个大概的印象。
接下来如果有listoftables和listoffigures的就放到这里,这个看个人喜好,似乎现在一般都喜欢放在书后面吧。
然后是tableofcontents,目录。
然后是正文部分,包括引言,前言等。
然后是appendix,附录部分是用来提示一些与内容有关而不便载于正文里的资料。
然后是索引:是针对这本书中重要资料如人名、地名、概念等的查检。将本文的重要概念列出,并注明出现在文中的页次。它是依一定的方法排列,通常中文是按字体的笔划多寡决先后顺序,西文则按字母的顺序排列,以便检查。 通常附录是直接资料,索引则是提供查询资料的线索。(索引主要是方便纸质书检索,我觉得如果一本书如果电子化了还是很容易搜索了,可以不加索引了。)
\section{页码控制}
\label{sec:页码}
frontmatter命令跟在begin document后面,接下来页码为罗马数字。\\
mainmatter命令放在正文开始的前面,表示页码的阿拉伯数字开始计数。\\
appendix命令表示附录开始,后面各章节改为字母标记。页码没有变化\\
backmatter命令放在参考文献或者索引的前面。章节编号关掉,页码没有变化。\footnote{backmatter不能在appendix前面,请参考\href{http://tex.stackexchange.com/questions/20538/what-is-the-right-order-when-using-frontmatter-tableofcontents-mainmatter}{这个网站}。}
\chapter{页面布局}
页面布局最好用\emph{geometry}宏包调节。
\section{geometry宏包详细讨论}
页面布局尺寸由geometry宏包指定,页面布局包含很多参量也就是geometry的可选项,请看下图\ref{fig:geometry选项1}:
\begin{linefig}{geometry选项1} %简单的插入图片环境,后面的必填项既是图片标签的名字,也是图片caption。
\caption{geometry选项1}
\label{fig:geometry选项1}
\end{linefig}
geometry提供的纸张类型很多,从a0paper一直到a6paper都有,还有b1paper到b6paper系列等等。纸张类型指定了后面的paperwidth和paperheight就都确定了。
我们先来看横向参量,paperwidth是纸张的宽度,textwidth是正文宽度,marginparsep指旁注和正文之间的间距,marginparwidth指旁注宽度,left指左边空白宽度,right指右边空白宽度。如果book类型是twoside的,那么left最好命名为inner,也就是类似出版书籍靠里面的那段空白宽度,类似的right最好命名为outer,靠外面的那段空白宽度。其中默认情况下width=textwidth,如果加入选项\\includemp=true,那么:\\width=textwidth+marginparsep+marginparwidth。然后还有:\\paperwidth=left+width+right。
\endnote{主要是针对有旁注的情况,在设置为true之后,那么旁注宽度你定义是多少就是多少,左边距右边距是多少就是多少,然后剩下的正文宽度是一个从量(即自动确定的量)了。}
再来看竖向参量,paperheight为纸张高度,textheight是正文高度,top为上面的空白高度,bottom为下面的高度,默认top包含页眉高度headheight和页眉于正文间的一段小空白headsep,bottom包含页脚高度\endnote{这里的概念理清一下,headheight是页眉高度,保证页眉内容能够装的下即可,而headsep是页眉(一般页眉靠下)和正文间的空白距离,也就是你看到的页眉上面的那段空白有top减去headsep再减去headheight剩下的距离,然后这段空白从视觉上来说还有你的页眉文本上面没有填充的部分。而footnote命令插入的文本和页码之间的空白间距是由footskip控制的,然后bottom减去footskip还会得到一个值,这个值是页码下面的空白距离。}footskip和下面的一段空白。所以你的top至少要大于headheight高度。然后中间的区域高度为height。默认情况下height=textheight,请看下图\ref{fig:geometry选项2}
\begin{linefig}{geometry选项2}
\caption{geometry选项2}
\label{fig:geometry选项2}
\end{linefig}
如果加上includehead=true选项,那么就和上图右边描述的类似,页眉部分计入height,类似的有includefoot=true,那么页脚部分也计入height。
geometry的机制是以上讨论的横向或者竖向参量指定足够的数量之后,剩下的可以自动计算得到。没有明确指定的参量虽然可以通过计算得到,但是在后面似乎是不能够作为变量使用的?
\section{多栏环境}
多栏环境推荐使用\emph{multicol}宏包。\endnote{在beamer类下有一种看上去不错的多栏环境,就是使用的columns环境,不过只适用于beamer类的frame框架下。}
这个宏包很厉害,支持两栏到十栏的环境。就作为通用的一般形式如下:
在这里每一栏的宽度表示为linewidth,这个可以用来控制放进去的图片宽度。
这里用columnbreak命令手动调整栏的跳转。你也可以不用columnbreak命令,而让\TeX 自动计算栏的高度和分布等。不过似乎用columnbreak只能近似控制,并不是那种完全严格的跳转命令。
这是最基本的应用,请参看多张图片并列显示这一小节。\ref{sec:多张图片并列显示}
\begin{multicols}{2}
\setlength{\columnseprule}{0.4pt}
如果你希望整个文档都分为两栏,那么在前面documentclass命令可选项里面加上twocolumn即可。这里的分栏环境是分两栏,然后加入的分栏线。就是在分栏环境中用setlength调整长度量columnseprule为0.4pt\footnote{参考了\href{http://texblog.org/tag/columnseprule/}{这个网站}}。觉得这个命令应该重新修改下,直接\textbackslash columnseprule就是加分栏线,然后后面跟个可选参数表示线的宽度。
还有一个长度量columnsep表示栏之间的间距宽度,一样用setlength调节。一般没啥好调整的。分栏环境就这样简单说下吧。
\end{multicols}
\subsection{分栏环境备用}
在实际应用过程中,常常遇到分两栏的情况,但是这两栏宽度是可以自由调整的。我找了一下似乎并没有类似beamer类columns环境那样方便的存在,只好通过minipage命令简单地实现了类似的效果。实际应用我是通过texmaker自定义快捷输入代码模块功能快速输入进文档的。
\begin{Verbatim}
\noindent
\begin{minipage}{\textwidth}
\begin{minipage}{0.38\textwidth}
\end{minipage}\hfill
\begin{minipage}{0.6\textwidth}
\end{minipage}
\end{minipage}
\end{Verbatim}
\noindent
\begin{minipage}{\textwidth}
\begin{minipage}{0.3\textwidth}
\begin{table}[H]
\centering
\medskip
\scalebox{0.82}{
\begin{tabular}{@{}ll@{}}
\toprule
$t$(分) & $s$(英尺) \\ \midrule
0 & 0 \\
1 & 1200 \\
2 & 4000 \\
3 & 9000 \\
4 & 9500 \\
5 & 9600 \\
6 & 13000 \\
7 & 18000 \\
8 & 23500 \\
9 & 24000
\\ \bottomrule
\end{tabular}
}
\caption*{表 2-1}
\end{table}
\end{minipage}\hfill
\begin{minipage}{0.7\textwidth}
\begin{linefig}[0.9]{汽车的距离-时间曲线}
\caption{汽车的距离-时间曲线}
\label{fig:汽车的距离-时间曲线}
\end{linefig}
\end{minipage}
\end{minipage}
解决方案不是很完美,但勉强够用了。
\chapter{字体}
我们知道xelatex的机制可以调用系统内的任意字体,当然系统没有的字体就要自己安装了(请参看附录ubuntu入门的安装系统字体部分)。
\section{字体的五种属性}
\LaTeX 的字体有五种属性,这五种属性是:字型编码,字族,字型系列,字形,字号,即:encoding,family,series,shape and size。
\subsection{字型编码}
字型编码即各个个别的字在一个字型里头的排列顺序以及安排方式。原始的\TeX 字型编码我们就称为OT1(Old TEX text encoding),这是预设的,如果都不指定字型编码,那所使用的就是OT1编码。在目前新一代的字型编码里头,字的安排方式及内容和OT1不一样,例如T1等。
\subsection{字族}
字族分为三大类,roman or serif(rm),sans serif(sf)和\\monospace(tt)。\endnote{下面参考了\href{http://wiki.ubuntu-tw.org/index.php?title=HowtoCustomFontswithFontconfig}{这个网站}}
\begin{description}
\item[serif] Serif中文译为「有衬线字体」,衬线即是印刷字体在每个笔划起始与终止处,加上短线或三角突起等,以便于快速辨认字符,利于阅读,为印刷专用字体。旧版Windows与较旧的Linux发行版以此为预设显示字体,而英文新版则改为Sans-Serif,中文新版则是:当字体大于某一程度时,则将 Serif的明体或宋体,以Sans的黑体取代。
Serif字体著名的有:Times New Roman、DejaVu Serif、宋体、明体等。
\item[sans-serif] Sans-Serif中文译为「无衬线字体」,专用于荧幕、简报、艺术字体、展示等,较美观,但不适于长时间阅读。多数英文语系的作业系统多以此为预设字体,而采用此种字体为预设的中文作业系统,以Mac系统最为著名。
Sans-Serif 字体著名的有:DejaVu Sans、Helvetica、Verda-\\na、圆体、黑体等。
\item[monospace] Mono意思是「单一的」,space 意思是「空间」,中文翻为「等宽字体」。等宽字是打字机时代下的遗产,每个英文字母皆设计为同一宽度,以便于排版;现代为节省不必要空间的浪费,依字母形状分配其宽度,如m与i其宽度便不相同,不相信可以拿尺来量看看。Monospace 现多用于终端机显示、程序码表示等。
Monospace字体著名的有:Andale Mono、DejaVu Sans \\ Mono 、 Courier、AR PL New Sung Mono。
\end{description}
\subsection{字型系列}
正常用的是medium,\textbf{m}。粗体是bold,\textbf{b}。然后还有Bold extended,\textbf{bx}。还有Semi-bold,\textbf{sb}。。和Condensed,\textbf{c}
\subsection{字形}
字形有正常的normal,\textbf{n}。还有意大利斜体Italic,\textbf{it}。斜体Slanted,\textbf{sl}。和Small Caps,\textbf{sc}。
\subsection{字号}
比如说本文设置的就是11pt。
\section{调整五种属性}
\subsection{调整字型编码}
\XeLaTeX 只处理UTF-8编码,那个调整字体编码的inputenc和fontenc宏包都不要用了。
\subsection{调整字族}
有两种方法设置,一种是命令式的,一种是环境式的。roman font family是默认的字族,一般不需要明确设置。
\begin{table}[H]
\centering
\label{tab:调整字族}
\begin{tabular}{|c|c|c|}
\hline
命令式 & 环境式 & 描述 \\
\hline
\verb+ \textrm{text}+ & \verb+ {\rmfamily text}+ & roman字族 \\
\verb+ \textsf{text}+ & \verb+ {\sffamily text}+ & sans-serif字族 \\
\verb+ \texttt{text}+ & \verb+ {\ttfamily text}+ & monospace字族 \\
\hline
\end{tabular}
\caption{调整字族}
\end{table}
\subsection{调整字型系列}
默认的medium,一般不需要设置,然后还有一个bold,即字体加粗。
\begin{table}[H]
\centering
\label{tab:调整字型系列}
\begin{tabular}{|c|c|c|}
\hline
命令式 & 环境式 & 描述 \\
\hline
\verb+ \textmd{text...}+ & \verb+ {\mdseries text...}+ & 正常字体粗细 \\
\verb+ \textbf{text...}+ & \verb+ {\bfseries text...}+ & bold 粗体 \\
\hline
\end{tabular}
\caption{调整字型系列}
\end{table}
\subsection{调整字形}
默认是upright shape,常用的字形如下:
\begin{table}[H]
\centering
\label{tab:调整字形}
\begin{tabular}{|c|c|c|}
\hline
命令式 & 环境式 & 描述 \\
\hline
\verb+ \textup{text...}+ & \verb+ {\upshape text...}+ & 正常字形 \\
\verb+ \textit{text...}+ & \verb+ {\itshape text...}+ & 意大利斜体 \\
\verb+ \textsl{text...}+ & \verb+ {\slshape text...}+ & 斜体 \\
\verb+ \textsc{text...}+ & \verb+ {\scshape text...}+ & small caps \\
\hline
\end{tabular}
\caption{调整字形}
\end{table}
\subsection{调整字号}
\subsubsection{相对字号调整}
\LaTeX 里面自带的调整相对字号命令如下:
\begin{table}[H]
\centering
\label{tab:调整字体大小命令}
\begin{tabular}{|l|l|}
\hline
命令 & 输出\\
\hline
\verb+{\tiny test line}+ & {\tiny test line}\\
\verb+{\scriptsize test line}+ & {\scriptsize test line}\\
\verb+{\footnotesize test line}+ & {\footnotesize test line}\\
\verb+{\small test line}+ & {\small test line}\\
\verb+{\normalsize test line}+ & {\normalsize test line}\\
\verb+{\large test line}+ & {\large test line}\\
\verb+{\Large test line}+ & {\Large test line}\\
\verb+{\LARGE test line}+ & {\LARGE test line}\\
\verb+{\huge test line}+ & {\huge test line}\\
\verb+{\Huge test line}+ & {\Huge test line}\\
\hline
\end{tabular}
\caption{调整字体大小命令}
\end{table}
然后我们看下图,不同字号下这些命令确切的大小\endnote{不知道你注意到没有,本文用的是12pt,上面表格上的huge和Huge字号还是有差异,这里因为我加载了moresize宏包的缘故。}:
\begin{table}[H]
\centering
\begin{tabular}{@{}llll@{}}
\toprule
size & 10pt (default) & 11pt option & 12pt option \\ \midrule
\textbackslash tiny & 5pt & 6pt & 6pt \\
\textbackslash scriptsize & 7pt & 8pt & 8pt \\
\textbackslash footnotesize & 8pt & 9pt & 10pt \\
\textbackslash small & 9pt & 10pt & 11pt \\
\textbackslash normalsize & 10pt & 11pt & 12pt \\
\textbackslash large & 12pt & 12pt & 14pt \\
\textbackslash Large & 14pt & 14pt & 17pt \\
\textbackslash LARGE & 17pt & 17pt & 20pt \\
\textbackslash huge & 20pt & 20pt & 25pt \\
\textbackslash Huge & 25pt & 25pt & 25pt \\ \bottomrule
\end{tabular}
\label{tab:字体具体大小}
\caption{字体具体大小}
\end{table}
\subsubsection{绝对字号调整}
上面的命令基本上够用了,并不鼓励使用绝对字号。不过有的时候还是有用的,比如旁注环境需要同时调整字体大小和行距,使用这个命令注意不要对文本中某一小段文字使用,否则会造成行距的不一致。
比如这个旁注使用的命令是:
\begin{Verbatim}
\newcommand{\sidenote}[1]{\marginpar{
\fontsize{10pt}{20pt}\selectfont #1}}
\end{Verbatim}
其中fontsize就是调整字号的命令,第一个参量是字体的大小,第二个参量是行距。然后后面\textbackslash selectfont 必须写上,就理解为表示对后面的字体进行操作吧。类似的还有fontencoding,fontfamily,fontseries,fontshape命令,这些本文略过。
\chapter{字体配置}
xelatex字体配置有名的三件套就是:xltxtra,fontspec和xunicode这三个宏包。其中xltxtra宏包是专门处理\XeLaTeX 的一些问题的,它会自动加载后面的fontspec和xunicode宏包。xunicode是处理某些特殊字符的。注意xltxtra宏包在加载时我放到所以字体配置宏包的后面,否则会出现错误。下面就字体配置相关宏包详细说明之。
\section{fontspec宏包详解}
当然来自fontspec宏包的帮助文档。后面关于宏包的相关信息来源于自身帮助文档我就不说明了。fontspec宏包主要用于英文字体的设置,中文字体的设置建议用xeCJK宏包来管理。\emph{\XeLaTeX 只能使用opentype和truetype字体。}
\subsection{基本的命令}
fontspec宏包最基本的应用就是用setmainfont来设置文档的默认roman字族字体的,setmainfont原来的名字叫setromanfont。\footnote{\href{http://tex.stackexchange.com/questions/70413/problem-with-xetex-latex-and-system-fonts}{参考了这个网站}}setsansfonts是设置文档默认sans-serif字族字体的,setmonofont是设置monospace字族字体的。然后我们看到前面都有一个可选项Mapping=tex-text,这个说是什么让\XeTeX 文字分布更好的,可能和正确断行有关系,不大确切。
fontspec宏包有一个和这个宏包名字一样的命令,这个命令非常的基本,大约相当于引擎的入门口,我估计前面三个命令实际上是建构在fontspec命令之上的。fontspec命令的作用不光临时改变字体。还可以加上很多可选项,比如字体尺寸,颜色等等。总之fontspec命令的优先级要高于前面的三大默认字体设置命令。请看下面的例子:
\begin{Verbatim}
{\fontspec[Scale=4,Color=magenta]{Ubuntu} this is a test.}
\end{Verbatim}
{\fontspec[Scale=4,Color=magenta]{Ubuntu} this is a test.}
另外还有一个有用的命令就是newfontfamily,这个命令相当于把fontsp\- ec命令包起来再新建一个命令。新建的那些字体命令就像\verb+\sffamily+之类的命令一样使用。,在后面讲到引入特殊符号的时候我们还会接触到这个命令。\\
\verb+\newfontfamily{\ubuntu}[Scale=3]{Ubuntu}+
以上基本命令总结如下:
\begin{Verbatim}
\fontspec [ font features ] { font name }
\setmainfont [ font features ] { font name }
\setsansfont [ font features ] { font name }
\setmonofont [ font features ] { font name }
\newfontfamily{ cmd }[ font features ] { font name }
\end{Verbatim}
上面的font name在安装字体的时候说明清楚了,比如说用fc-list命令调出来的\textit{宋体,SimSun:style=Regular}中字体名字就是宋体或者SimSun。而在font-manager里面比如第一行显示\textit{Comic Sans MS Regular},字体名就是Comic Sans Ms。接下来主要讨论font features的内容,所讨论的内容以上几个基本命令都适用。由于xeCJK的fontfeatures可选项是继承自fontspec,所以下面的讨论也适用于xeCJK宏包。
\subsection{font features的讨论}
一个字体的字族之下还分为不同的字形,默认的字形设置可能并不能满足你的要求。有一些字体甚至没有粗体或者意大利体这样的字形。一般的玩家就选用默认字形设置足有了,最多在mainfont哪里设置下boldfont和italicfont。比如类似下面这样配置:
\begin{Verbatim}
\setCJKmainfont[BoldFont=Adobe 黑体 Std,
ItalicFont=Adobe 楷体 Std]
{Adobe 宋体 Std}%影響rmfamily字體
\end{Verbatim}
具体字形有:\\
BoldFont = font name\\
ItalicFont = font name\\
BoldItalicFont = font name\\
SlantedFont = font name\\
BoldSlantedFont = font name\\
SmallCapsFont = font name
\subsection{Color}
前面的例子我们看到了Color属性的定制,在这里推荐适用xcolor宏包。\XeLaTeX 默认使用的是xdvipdfm,不支持透明颜色。然后xcolor宏包对于颜色的讨论请参看颜色一节\ref{sec:颜色}
\subsection{字体大小}
在前面的那个例子也用到了Scale选项,选个数字来整体调整这个字体的尺寸大小。还有两个常量值,一个是MatchLowercase,一个是MatchUppercase。就是变成小写字母一样的或者大写字母一样的大小。
\subsection{词间距——WordSpace}
觉得默认的设置更有弹性吧,一般的玩家没必要动它。
\subsection{标点后间距——PunctuationSpace}
从零开始可以加点距离。
\subsection{断字符号——HyphenChar}
就是要换行了选择从哪里断字的符号,比如设置HyphenChar={+},那么标明+,就从哪里断字。默认的是\textbackslash{}- 。
\subsection{字母之间的距离——LetterSpace}
从零开始加点距离,而且只适用于小写字母,感觉很累赘。而且这个feature\emph{只适用于\XeTeX} 。
\subsection{最后两个命令}
最后还有两个命令defaultfontfeatures和addfontfeatures。有什么优先级:\\ addfontfeatures>fontspec>defaultfontfeatures。觉得太花哨了暂时应该用不到。
\section{设置数学字体}
觉得默认的数学字体也很好看的,就不折腾了。
这里简单提一下,数学没有太多额外需要加载的宏包,其中amssy-\\mb和amsmath这两个宏包必备,基本上大家都加载了的。然后数学上或者物理上等对于国际单位和文本中小的数字(但是需要输入上标下标等的)推荐用siuintx宏包处理。
然后通过\verb+\everymath{\displaystyle}+这个语句可以让文本内的数学形式,比如分数显得更大更好看一点。其他问题这里都略过了。
\begin{Verbatim}
\RequirePackage{amssymb,amsmath}
\RequirePackage{fontspec}
%si unit
\RequirePackage{siunitx}
\sisetup{
math-micro = \text{μ},
text-micro = μ
}
\everymath{\displaystyle}
\end{Verbatim}
\section{xeCJK宏包详解}
xeCJK宏包只处理CJK字符在这里指中文字,也就是英文字还是用前面的fontspec宏包来处理。
\subsection{只能在加载宏包时填入的选项}
CJKnumber = <true | false> \\
默认是false,如果设置为true,那么可以适用CJKnumber命令。比如这个命令\verb+\CJKnumber{1}+的输出结果是:\CJKnumber{1}。还有一个命令比如:\\
\verb+\CJKdigits{1545}+的输出结果是:\CJKdigits{1545}。
indentfirst = <true | false>\\
章节下面第一段首行缩进不缩进,默认是true,缩进。这个没啥好修改的,一般都统一缩进吧,如果有某个段落你不想缩进加上noindent命令就是了。
\subsection{可以在xeCJKsetup命令中设置的选项}
CJKmath = <true | false>\\
默认是false,如果设置为true,那么可以在数学模式下输入CJK字符。
PunctStyle = {⟨quanjiao|…………|plain⟩}\\
其他选项请参看文档, 这个是设置标点处理格式的。在本文字体配置第3行那里你可以看到我设置为plain,也就是是什么就是什么,不做处理。默认是quanjiao。
\subsection{xeCJK宏包的一些命令}
现在对照fontspec宏包对xeCJK新建的只针对CJK字符处理的命令说明如下,其中各个命令的用法和fontfeatures都是类似的。
\begin{description}
\item[setCJKmainfont] 类似于setmainfont。
\item[setCJKsansfont] 类似于setsansfont。
\item[setCJKmonofont] 类似于setmonofont。
\item[CJKfontspec] 类似于fontspec。
\item[newCJKfontfamily] 类似于newfontfamily。
\item[defaultCJKfontfeatures] 类似于defaultfontfeatures。
\item[addCJKfontfeatures] 类似于addfontfeatures。
\item[setCJKmathfont] 估计应该类似于setmathrm。
\end{description}
\subsection{设置CJK字符大小}
可以通过如下命令:
\begin{Verbatim}
\defaultCJKfontfeatures{Scale=1.2}
\end{Verbatim}
来调整所有CJK字体的属性,比如上面代码的意思就是所有CJK字体都放大1.2倍。比如你在documentclass里面设置10pt,那么实际CJK字符是12pt。\endnote{以前我喜欢放大CJK字体,但是后来发现这样放大之后让数学环境下的字体显得太小很不好看,而且这样整了之后似乎数学环境下的字体也不能通过DeclareMathSizes命令调节了。}
\section{UTF-8编码}
texmaker软件并没有这个问题,不管怎么样,加上这样一行代码没什么害处喽。确保文档以utf-8编码打开和保存。
在文档开头加上如下代码:\\
\% !Mode:: "TeX:UTF-8" \\
本文只关注于UTF-8编码。
\chapter{特殊的符号}
\label{sec:symbols}
\section{去掉符号命令后面的空格}
值得一提的是命令如果后面跟上一个花括号,后面的字符紧跟花括号,那么命令显示的符号和后面的字符就没有空格了。比如这里\& a之间就有一个空格,加上花括号\verb+\&{}a+,\&{}a就没有了。
\section{基本的特殊符号}
\subsection{\textbackslash}
\textbackslash ,我们知道命令的开头表示就用它,所以在文档中是不能直接使用的,如果需要显示\textbackslash ,需要输入\textbackslash textbackslash来显示。
\subsection{\{和\}}
\{和\},同上,作为命令的格式。如要显示前面加上\textbackslash 符号。
\subsection{\%}
\% ,我们知道这个符号在文档是用来标记注释信息的开始的,所以在文档也不能直接使用。在前面加个\textbackslash 即可。
\subsection{\~{}}
\~ ,这个符号在文档中产生一格空白,如要显示在前面加上\textbackslash 符号。这样显示的波浪号有点小。还可以进入数学模式下输入\textbackslash sim,在texmaker左边的关系符号一栏中也可以找到。所以为了美观的话就用数学模式吧。然后在Rime输入法里面我们看到还有一种符号是全角下的波浪号~。我比较了下这个和前面两个都不相同,简单起见用这个全角的波浪号也是可以的。
\subsection{\$}
\$ ,美元符号之所以不可以用是因为它标记了数学模式的开始和结束。比如说我要输入字母$\pi$,就是在两个美元符号中间输入\textbackslash pi即可。如果直接从输入法输入希腊字母的符号π,这个也是可以正常显示的,只是没有前面数学模式下的美观。我查了一下,数学模式下的那个$\pi$也是unicode区域里面的那个希腊字母,我想只是字体问题了。\footnote{\href{http://www.johndcook.com/unicode_latex.html}{这个网站}用来查找unicode和\LaTeX 命令的对应关系}
\subsection{\#}
\# ,这个符号没怎么接触,latex123说是定义巨集的,前面加上\textbackslash 即可。
\subsection{\^{}和\_{}}
\^和\_{},这两个符号表示进入数学模式之后进入上标和进入下标。这两个符号在文本中后面还要跟一对花括号,否则显示会出问题。
\subsection{\&}
\& ,这个符号表示表格中的分隔符。要显示前面加上\textbackslash 即可。
\subsection{单引号和双引号}
你可以用\textbackslash textquotedblleft来表示左双引号, 用:\\
\textbackslash textquotedblright 来表示右双引号。用\textbackslash textquoteleft来表示左单引号,用\textbackslash textquoteright来表示右单引号。
然后还有敲键盘的方法,要左边和右边区别对待,比如说左单引号就是点击ESC下面那个键,右单引号是点击分号右边那个键;而左双引号是点两次ESC下面那个键,右双引号是按住shift,然后点击分号右边那个键。
一边单引号和双引号都用全角模式,中文的输入法调试好会很方便输入的,这不存在什么问题。至于英文左单引号和右单引号好像一般不怎么区分。
\subsection{破折号和连字号}
连字号就是一个这个[-] ,可以直接在键盘上输入。\\
短破折号就是两个-连续输入成为→ [--]\\
长破折号就是三个-连续输入成为→ [---]\\
负号如果在数学模式下是→ $ -1 $ 如果有时嫌麻烦就直接-1应该可以接受把。
此外中文全角短的连字号有[-],unicode码是U+FF0D;长破折号是[——],有两个unicode码U+2014的符号组成。值得注意的是长破折号的一个,[—],和前面的全角短连字号也是有所不同的,似乎稍微长一点,一般不怎么用吧,但我发现有些书排版有时用到这个符号。
\subsubsection{两个连字号的显示}
比如要显示终端选项的时候有两个短连字号,如果你直接输入两个--就变成短破折号了。如果你要有这样的显示效果,-{}-,那么你需要中间加一个花括号\footnote{\href{http://tex.stackexchange.com/questions/9813/how-can-i-stop-latex-from-converting-two-hyphens-to-a-single-hyphen-when-loading}{参考网站}}。下面是三个连字号的例子:\\
\verb+-{}-{}-+\\
-{}-{}-
\subsection{温度的度}
在texmaker左边的关系负号哪里我们可以看到一个小圆圈,输入命令是\textbackslash circ,当然需要在数学模式下。现在就需要让这个小圆圈位于上标即可。前面的符号介绍我们提及\^{},就是进入上标显示,上标的内容在\^{}后面的那个花括号内,于是我们就知道三十度怎么画了。$ 30^{\circ} $ ,注意texmaker左边有快捷键。点起来很方便的。具体代码是:\$ 30\^{}\{\textbackslash circ\} \$。当然你可以直接用rime输入法打出这个温度的度:°,℃。在输出\%候选项哪里。
\subsubsection{更加专业的做法:}
输入温度的度的更加专业的做法利用siunitx宏包的degreeCelsius命令输出:\\
\verb+30\si{\degreeCelsius} and 45\si{\degree}+\\
30\si{\degreeCelsius} and 45\si{\degree}
\subsection{省略号}
this... that\ldots \\
三个点... ldots命令\ldots \\
老实说没看出什么区别,所以省略号就跟着点三个点也是可以的,别用中文句号就行了。
\section{更多特殊符号}
{\fontsize{40pt}{20pt}\selectfont \color[HTML]{DE4815} }
上面是Ubuntu的图标符号,可不是一张图片哦,是一个字符。这个图标符号只在Ubuntu字体里面才有。现在让我们将思路先理清一下。首先是Unicode码,这个只是一个理论上的编码规则,具体的实现是字体。但是每一个字体都只专注于某一个领域,并没有把Unicode所有的码都画出字形来,那么系统是如何显示字体的呢?系统是安装了很多字体,如果一个字体并不包含它要显示的Unicode,它就搜索打开下一个字体文件,找相关的Unicode的字形。只有从字体文件中具体找了这个Unicode的字形,才有办法将其显示出来。
\endnote{主要参考了\href{http://tex.stackexchange.com/questions/41130/getting-xelatex-to-display-accents-and-characters-not-included-with-the-font}{这个网站}}
我的加入新符号的配置代码如下:
\begin{Verbatim}
\newfontfamily{\libertine}[Scale=1.5]{Linux Libertine O}
\newfontfamily{\ubuntu}[Scale=3]{Ubuntu}
\usepackage{newunicodechar}
\newunicodechar{Ⓐ}{{\libertine{Ⓐ}}}
\newunicodechar{Ⓑ}{{\libertine{Ⓑ}}}
\newunicodechar{Ⓒ}{{\libertine{Ⓒ}}}
\newunicodechar{Ⓓ}{{\libertine{Ⓓ}}}
\newunicodechar{}{{\ubuntu{}}}
\end{Verbatim}
值得提醒的是目前系统的文档里面那个Ubuntu图标都不能正确显示出来,而我们在pdf中却能显示出来。我们来看看代码。\endnote{如果你输入了某个Unicode的字形你目前的pdf字体并不包括,那么将会产生这样的一个错误信息:WARNING invalid CMap mapping entry.然后你编译pdf之后发现某个字符没有正常显示出来只是一个方框那么可能是目前字体不包括这个字形。}
首先第1,2行前面以及谈及了,主要是看这个新引入的宏包newunicodechar。好吧,这个宏包就只有一个命令,这个命令就是这个宏包的名字。其实我们能够猜到,这个命令的作用就是将这个字符变成类似\TeX 命令的东西,然后替换为后面的那一串,而后面的那一串单独提出来也是能够正常显示的。如{\ubuntu{}}。
\begin{flushright}
\begin{notecard}[olive!30]{20em}
所以过程还是很简单的,但是整个过程让人紧张,如果一篇文章有很多这样的特殊符号,那不要写上长长的这样一串?我想到的第一个解决方案就是最好有这么一个字体包含所有的Unicode的字形,然后我试着用fontforge将一些字形复制粘贴调大小混到一起,然后发现这个方案既满足不了美观的要求也满足不了效率的要求。后来认识到也许我多虑了,如果一个符号经常出现,那么那个字体设计者肯定会优先考虑把它加进去的。
\end{notecard}
\end{flushright}
这里有一段代码生成该字体所有已有的字形\ref{sec:字体已有字形}。当然你可以直接在字符映射表里面选择只显示已有字形查看,不过有时并不方便。生成那个pdf查看之后可以复制粘贴,到那个字符映射表里面搜索,还是很方便的。
\chapter{初步中文化}
主要是些原\LaTeX 常量是英文单词,然后改成中文字即可。看看代码就清楚了。
\begin{Verbatim}
\renewcommand\contentsname{目~录}
\newcommand\econtentsname{Contents}
\renewcommand\listfigurename{插图目录}
\renewcommand\listtablename{表格目录}
\renewcommand\bibname{参~考~文~献}
\renewcommand\indexname{索~引}
\renewcommand\figurename{图}
\renewcommand\tablename{表}
\renewcommand\partname{部分}
\renewcommand\appendixname{附录}
\renewcommand{\abstractname}{摘~要}
\renewcommand\today{\number\year 年\number\month 月\number\day 日}
\end{Verbatim}
值得一提的是不同的文档类包含不同的命令,比如有的文档类可能没有定义today这个命令,比如article类不包含参考文献命令等。
\chapter{颜色}
\label{sec:颜色}
\section{颜色的心理学}
颜色心理学是一门学问,这里不会深究,只是在文档里面字体或者背景使用什么颜色是一门大学问。这里主要参照\href{http://www.jb51.net/article/8216.htm}{这个网站}简单说下。本文定义的几个颜色也是参考的这个网站。
\begin{description}
\item[红色] 一种激奋的色彩。刺激效果,能使人产生冲动,愤怒,热情,活力的感觉。
\item[绿色] 介于冷暖两中色彩的中间,显得和睦,宁静,健康,安全的感觉。 它和金黄,淡白搭配,可以产生优雅,舒适的气氛。
\item[橙色] 也是一种激奋的色彩,具有轻快,欢欣,热烈,温馨,时尚的效果。
\item[黄色] 具有快乐,希望,智慧和轻快的个性,它的明度最高。
\item[蓝色] 是最具凉爽,清新,专业的色彩。它和白色混合,能体现柔顺,淡雅,浪漫的气氛(像天空的色彩:)
\item[白色] 具有洁白,明快,纯真,清洁的感受。
\item[黑色] 具有深沉,神秘,寂静,悲哀,压抑的感受。
\item[灰色] 具有中庸,平凡,温和,谦让,中立和高雅的感觉。
\end{description}
关于具体选择什么颜色,我也纠结了很久,但最后无果而终,可选择的颜色太多了,我说不上什么意见。
\section{颜色配置}
首先推荐使用xcolor宏包。在\href{http://tex.stackexchange.com/questions/89763/when-to-use-the-xcolor-package-instead-of-the-color-package}{这个网页}里,谈到原color宏包的所有特性基本上xcolor都支持,同时又加了很多新特性,相当于扩充集吧。
这里放着我之前的一些颜色配置的代码。
\begin{Verbatim}
\usepackage{xcolor}
%=====在网上找的配黑色文字比较好的背景色======%
\definecolor{bgcolor-co}{RGB}{255,255,255}
\definecolor{bgcolor-dd}{RGB}{255,255,200}
\definecolor{bgcolor-tp}{RGB}{215,255,240}
\definecolor{bgcolor-bf}{RGB}{240,218,210}
\definecolor{defaultbgcolor-0}{RGB}{199,237,204} %for eye
%\pagecolor{defaultbgcolor-0}
\end{Verbatim}
\subsection{定义新的颜色}
上面颜色配置代码里有很多definecolor命令就是定义新的颜色的,然后在后面要用到颜色的地方使用你这里定义的新的颜色名字就可以了。第一个花括号就填着你定义的新颜色的名字。第二个花括号填着你要定义的颜色的模式,比如RGB,rgb,HTML,cmyk等。最后就是填着对应的模式的对应的数值。其中HTML模式不要\#号。
\subsection{用软件查看颜色}
你可以用手机照相,或者某个在某个网页某个文档上截图。然后用Gcolor2软件来捕捉某个点的颜色。
\subsection{改变文章的背景颜色}
上面代码最后的pagecolor命令就是设置整个文档背景颜色的。我试着在minipage模式下使用也会改变整个文章的背景颜色。
\subsection{改变字体的颜色}
有两个命令,textcolor和color命令。\\
\verb+\textcolor{colorname}{some text}+\\
\verb+{\color{colorname} some text...}+\\
我更喜欢color命令。
\section{xcolor宏包简介}
xcolor宏包虽然是color宏包的扩展集,但对于我这个颜色知识盲来说多少有点不知所云,可能专业弄颜色的对那些颜色模式的增加还有颜色混合的表达扩展觉得很感动吧。如果你对颜色有更高级的需求,请详细阅读xcolor宏包文档,这里不赘述了。
就一般用户还是用definecolor命令吧,支持的模式有gray,rgb,RGB,HTML,cmyk。其中只要加载xcolor宏包就能使用的颜色名字如下:
\begin{table}[H]
\centering
\begin{tabular}{@{}lp{50pt}lp{50pt}@{}}
\toprule
颜色 & 效果 & 颜色 & 效果\\ \midrule
black & \cellcolor{black} & olive & \cellcolor{olive} \\
blue & \cellcolor{blue} & orange & \cellcolor{orange}\\
brown & \cellcolor{brown} & pink & \cellcolor{pink}\\
cyan & \cellcolor{cyan} & purple & \cellcolor{purple}\\
darkgray & \cellcolor{darkgray} &red & \cellcolor{red} \\
gray & \cellcolor{gray} & teal & \cellcolor{teal}\\
green & \cellcolor{green} & violet & \cellcolor{violet}\\
lightgray & \cellcolor{lightgray} &white & \cellcolor{white} \\
lime & \cellcolor{lime} & magenta & \cellcolor{magenta} \\
yellow & \cellcolor{yellow}\\ \bottomrule
\end{tabular}
\label{tab:直接可以使用的颜色名字}
\caption{直接可以使用的颜色名字}
\end{table}
这个表格里面的小格子涂上颜色是使用的xcolor宏包里面的cellcolor命令,就是在表格相应的格子位置使用这个命令就可以了。上面表格类似的一行我写出来吧:\\
\verb+yellow & \cellcolor{yellow}\\ \bottomrule+
如果你加载xcolor宏包时填上其他选项,比如svgnames等,就会有更多其他颜色的名字可以直接使用了。具体请参看\href{http://mirrors.ctan.org/macros/latex/contrib/xcolor/xcolor.pdf}{xcolor官方文档}。
\subsection{单个颜色调百分比}
虽然颜色混合我弄不大明白,不过单个颜色调百分比\footnote{不清楚和谁调?白色?}还是很有用的。比如gray灰色后面跟个!20,就表示20\%的灰。请看下面不同百分比的红色。
\begin{table}[H]
\centering
\begin{tabular}{@{}lp{50pt}lp{50pt}@{}}
\toprule
颜色 & 效果 & 颜色 & 效果\\ \midrule
red & \cellcolor{red} & red!90 & \cellcolor{red!90} \\
red!80 & \cellcolor{red!80} & red!70 & \cellcolor{red!70}\\
red!60 & \cellcolor{red!60} & red!50 & \cellcolor{red!50}\\
red!40 & \cellcolor{red!40} & red!30 & \cellcolor{red!30}\\
red!20 & \cellcolor{red!20} &red!10 & \cellcolor{red!10} \\
red!0 & \cellcolor{red!0}\\ \bottomrule
\end{tabular}
\label{tab:不同百分比的灰色}
\caption{不同百分比的灰色}
\end{table}
值得一提的是xcolor宏包还支持一种表格颜色交替模式,看上去不错。请看带颜色的表格这一小节\ref{sec:带颜色的表格}。
\chapter{段落}
\section{换行和分段}
一个意思写一个段落,意思没说完就不要分段,在文章中一个段落的书写就是直接写就是了,\LaTeX 会自动处理好一切的。简单的分段的做法就是空一行。这样分段首行缩进仍然存在,表示不同的段落。
如果你只是想换行而不分段,那么用命令:\\
\textbackslash \textbackslash \\
可以满足你的要求。
\textbackslash \textbackslash 命令还有一个用法,比如后面跟上[10pt],表示在原有行距的基础上再加上额外的空白距离,参数也可以是负数。
换行不空一行在tex文档中的效果只是加上一个空格,你可以前面那行后面加上\%{}来取消这个空格。
\section{断字}
如果你编译的时候出现了overfull hbox什么的错误,一般是断字出现问题了,有字越过文档边界了。命令\textbackslash \textbackslash 是强制换行。还有一个换行命令\textbackslash linebreak,这个命令后面还可以跟个可选项,但意义我不大明确。一般就是观察生成的文档,然后选择合适的位置插入linebreak命令。这个断行命令断行之后,前面那行的文字将会扩展充满整行,在越界小距离的情况下还是可行的,但是距离大了这一行扩展导致字间距过大也不是十分美观。
一般断字问题主要是英文单词的断字,你可以在你想要断字的位置加上\verb+\- +,这样系统会自动判断,如果这里适合断字它就会在这里断字,这种断字方法不会加上符号\verb+-+。其实还有一种直接的断字方法,那就是在你想要断字的文字加上\verb+-\\+,这样会显示符号\verb+-+。第三种断字方法就是在你觉得可能要断字的地方加上符号\verb+-+,这样系统会自动判断在那里断字,然后也会显示符号\verb+-+。
\section[段落中的行距]{段落中的行距\endnote{参考了\href{http://www.complang.tuwien.ac.at/anton/latex/baselineskip.html}{这个网站}}}
\verb+\setlength{\baselineskip}{22pt}+\\
上面的代码就是设置行间距的。一行一行之间的间距也是一个glue,我们知道glue有基本的space和伸缩量。行距的基本space由命令baselineskip控制,伸缩量有baselinestretch命令。\footnote{实际上这个多少有点揣测的意思。}
一般行间距的调整用宏包setspace,似乎这个宏包对文档其他内容比如脚注旁注等都有所调整,但是如果你自己定义的脚注格式就不太依赖这个宏包了。不过用法也简单,如下所示:\\
\verb+\RequirePackage[doublespacing]{setspace}+
此外还有选项onehalfspacing,如果你试了onehalfspacing和doublespacing(当然还有默认的不拉伸间距的情况),你都感觉不太满意。这个时候推荐你使用linespread命令,在刚开始的配置内容里写上即可,不需要额外的宏包加载。其中\verb+\linespread{1.3}+的效果相当于前面的onehalfspacing,如果是1.6则相当于doublespacing,然后当然,1.4,1.5等等都随你设置了。
\label{sec:段落中的行距}
值得注意的是linespread命令还会对表格有拉伸效果,而setspa-\\ce宏包没有这个效果。所以如果用setspace宏包而不是linespread调整行间距,那么才需要对arraystretch量进行一些修改,提供额外的表格行间距。
\subsection{baselineskip}
段落中行之间上下间距\footnote{一行一行就是横向的盒子,行间距就是横向的盒子之间的上下间距。}由三个命令控制:baselineskip,linesk-\\ip和lineskiplimit。简单的说明就是首先间距是baselineskip,但是如果上面的盒子伸的太下或者下面的盒子伸的太高,那么他们就可能会碰到一起。lineskiplimit控制的就是盒子之间最小间距,比如0pt。当baselineskip减去上面的盒子的深度depth再减去下面盒子的高度height然后得到的值比lineskiplimit小,那么跳转方案就会选择lineskip模式。也就是上面盒子最低的点和下面盒子最高的点之间的距离是lineskip那么多。\endnote{参看了a beginner's book of \TeX 的spacing between boxes一节。在google book哪里可以看到这一段,不过似乎这本书网上并不能自由下载。}
我感觉自己设置一个baselineskip已经很满足要求了,尤其个别字用Huge命令的时候效果也还行。
\subsection{baselinestretch}\footnote{参看的\href{http://tex.stackexchange.com/questions/49596/no-effect-of-baselinestretch}{这个网站}}
baselinestretch量相当于行间距glue的伸缩量,也就是对前面的baselineskip做一定的伸缩。这个命令要使用的话格式如下:\\
\verb+\renewcommand{\baselinestretch}{伸缩量}+\\
这个命令等价于:\\
\verb+\linespread{伸缩量}+\\
不过这不是故事的全部。如果要在文档中改变行间距必须采用如下的形式:\\
\verb+{\linespread{伸缩量}\selectfont sometext \par}+
{\linespread{3} \selectfont 其中伸缩量和前面说的一样是:设为1.3就是1.5倍行距,1.6就是双倍行距,其他自由发挥。除了要封闭环境否则对其他文本有影响外,还需要加上selectfont命令,此外最后还必须加上\textbackslash par命令,否则会没有效果。\par}
\section{段落间距}
\verb+\setlength{\parskip}{1.6ex plus 0.2ex minus 0.2ex}+\\
段落间距也就是一段和一段之间的空白距离。上面就是本文段落间距的设置代码。parskip是一个length量。其中距离设置设置一个固定量和一个加量还有一个减量,wikibook中说很有用,不太清楚。
\section{段首缩进}
\subsection{段首缩进量调整}
\begin{Verbatim}
\setlength{\parindent}{\textpt * \real{2}}
\end{Verbatim}
上面代码就是设置段首缩进量的,其中parindent是一个length量。具体就是两个字符的意思。这里预先需要加载calc宏包\footnote{注意乘法乘以小数的时候需要用real命令处理。},为了让设置的距离更加相对化,我新建的一个长度量textpt:\\
\verb+\newlength{\textpt}+\\
\verb+\setlength{\textpt}{12pt}+\\
本文的默认字体大小值是12pt,然后传递到了textpt这里。
\subsection{缩进还是不缩进}
在xeCJK宏包加载的时候默认章节下面第一段缩进打开了,然后后面基本上都段段有缩进,也没怎么管了。如果你希望某一段不缩进就用noindent命令吧,类似的有indent命令。如果你希望都不缩进,我觉得简单点的办法就是把缩进量设置为0吧。
\section{段落对齐}
flushleft环境为左对齐环境,flashright环境为右对齐环境,center为居中环境。类似的命令样式有raggedleft,raggedright和centering。这些命令还可以控制表格图片(也许是一切盒子?)的位置。简单示例如下:
\begin{Verbatim}
\begin{flushright}
\fbox{右边才是王道。}
\end{flushright}
\end{Verbatim}
\begin{flushright}
\fbox{右边才是王道。}
\end{flushright}
\section{flushright环境空白间距问题}
flushright环境有一个大型的空白间距,如果你不喜欢这么大的空白间距正如前面谈及的,可以使用raggedright等命令来调整,不过raggedright等命令似乎更适合对图片表格等盒子调整位置(raggedright命令不太好用,有时不知怎么不起作用,推荐就用hfill命令让其他内容居右,唯一要提醒的是hfill命令是针对当前行把内容往右推。)
那么在段落内如何实现类似word那种一行之类居右对齐?
\begin{Verbatim}
this is a test line
{\vspace{-\parskip}\hfill some text}
\end{Verbatim}
这里推荐先空一行分段,然后用hfill命令将文本推到右边去,然后用vspace调整下距离。这里选择-\textbackslash parskip这样得到的行距和其他行距是一致的。
{\vspace{-\parskip}\hfill 然后我注意到开辟新的竖向模式}\\,比如换行之后,不空一行用smallskip,medskip等,然后不用vspace命令调整也是可以的。因为smallskip也是一种vspace命令的调整模式,但是行距和其他的不太一致,所以在这里推荐就空一段,然后负的parskip。当然如果可以接受不用vspace调整也是可以的。
\chapter{页眉页脚设计}
页眉页脚设计推荐用\emph{fancyhdr}宏包。
\section{观察}
我什么都没设置,生成的文档有章名的那一页中间有页码,其他页右上角有页码。有章名的那一节可能样式是plain,其他页可能是默认的myheadings样式。
\section{全部信息归零}
\subsection{plain样式重置}
fancyhdr宏包提供了一个命令fancypagestyle来重新或者定义一个新的页眉页脚样式。现在我将plain样式所有信息全部清除,宁愿没有也不愿出现其他别样的信息。
\begin{Verbatim}
\fancypagestyle{plain}{
\fancyhf{}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}}
\end{Verbatim}
该代码第一行是提出要重新定义plain样式,然后里面包含新的定义。第二行是所有的页眉页脚信息换为空值,第三行是将页眉那条线宽度设为0pt,也就是不显示了,第四行类似是页脚那根线不显示了。
\subsection{选择默认样式为empty}
使用命令:\\
\verb+\pagestyle{empty}+\\
也就是明确指定页眉页脚样式为已经有的样式empty,即什么都没有。现在文章所有的页眉页脚信息都被清除了。现在摆在我们面前有两条路,一条是继续DIY plain样式,然后全部页面设置为plain样式。一条是plain继续归零,然后自己DIY一个新的样式并使用这个样式。我在这里选择第一条道路了。
\section{继续定制plain样式}
我不太喜欢那一条横线,有需要的请自己将前面的什么rulewidht命令横线宽度设为0.4pt左右。
我是一个喜欢简单的人,fancyhdr宏包里面还有很多命令:
\vspace{-20pt}
\begin{Verbatim}
\lhead[<even output>]{<odd output>}
\chead[<even output>]{<odd output>}
\rhead[<even output>]{<odd output>}
\lfoot[<even output>]{<odd output>}
\cfoot[<even output>]{<odd output>}
\rfoot[<even output>]{<odd output>}
\fancyhead[selectors]{output you want}
\fancyfoot[selectors]{output you want}
\end{Verbatim}
这些命令都可以用fancyhf命令来达到,所以我不做介绍了,有需要的请参考fancyhdr宏包文档。
\subsection{fancyhf命令的可选项}
fancyhf命令的一些可选项如下表所示,比如偶数页的页眉左边位置的表示就是EHL,奇数页页脚中间位置就是OFC。本文没有区分偶数页和奇数页,而且也不想有过多的信息,比如就想页眉左边和页脚右边有点内容,那么可选项为HL和FR。
\begin{table}[H]
\centering
\begin{tabular}{@{}ll@{}}
\toprule
字母 & 意义 \\ \midrule
H & 页眉(head) \\
F & 页脚(foot) \\
L & 左边(left) \\
C & 中间(center) \\
R & 右边(right) \\
E & 偶数页(even) \\
O & 奇数页(odd) \\ \bottomrule
\end{tabular}
\label{tab:fancyhf可选项字母意义}
\caption{fancyhf可选项字母意义}
\end{table}
\subsection{本文页眉页脚配置代码}
\begin{Verbatim}
%=======页眉页脚格式=========%
\RequirePackage{fancyhdr} %頁眉頁腳
\pagestyle{fancy}
\renewcommand{\sectionmark}[1]
{\markright{第\CJKnumber{\arabic{section}}节~~#1}{}}
\fancypagestyle{plain}{%
\fancyhf{}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
% \renewcommand{\chaptermark}[1]
%{\markboth{第\CJKnumber{\arabic{chapter}}章~~#1}{}}
% \fancyhf[HL]{\ttfamily \footnotesize \leftmark }
\fancyhf[HR]{\ttfamily \footnotesize \rightmark }
\fancyhf[FR]{\thepage}
\fancyhfoffset[R]{\marginparwidth+\marginparsep}}
\pagestyle{plain}
\end{Verbatim}
首先是加载fancyhdr宏包\footnote{exam类有自己的页眉页脚定制方法,和fancyhdr宏包有冲突。}。接下来是页面风格fancy,不先这样做后面的sectionmark的重定义无效,具体原因不明。