-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathbiblatex-solution-to-latex-bibliography.tex
6643 lines (5365 loc) · 353 KB
/
biblatex-solution-to-latex-bibliography.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
\documentclass[twoside]{article} %用draft选项找到badbox的位置
\input{articlemodelparta.tex}
%%----------------------------------------------------------------------
%% 参考文献库添加
%%----------------------------------------------------------------------
\addbibresource[location=local]{./exampleandimage/example.bib}
%论文1的参考文献的bib文件
\setCJKmainfont[BoldFont = Adobe Heiti Std,
ItalicFont = Adobe Kaiti Std] {Adobe Song Std}
\setCJKsansfont {Adobe Heiti Std}%注意空格不能用~代替
\setCJKmonofont {Adobe Fangsong Std}
%%----------------------------------------------------------------------
%% 正文
\begin{document}
%%----------------------------------------------------------------------
%----------------------------------------------------------------------
% 第一篇论文-填写基本信息
%----------------------------------------------------------------------
\qikanming{\LaTeX 爱好者} %期刊名,journal name
\nianfen{2016} %年份,year
\juanshu{1} %卷数,volume
\qishu{1} %期数,number
\zongqishu{99} %总期数,
\wenzhangdoi{10.11729/tex-lover} %doi号
\wenzhangbianhao{1672-9897(2016)01-0000-00} %文章编号
\zhongtu{(V211.751)} %中图分类号
\wenxianbiaozhi{A} %文献标志码
\biaoti{\LaTeX 文档中文参考文献的BibLaTeX解决方案} %标题,title
\fubiaoti{} %副标题,subtitle
\authorinput{胡振震} %作者间用英文分号隔开
\schoolinput{~UNIT~~CHINA~~100000~} %单位间用英文分号隔开
\includinput{1} %各作者所属单位用英文分号隔开,
%一位作者的多个所属单位用英文逗号隔开
%摘要,abstract
\zhaiyao{针对中文\LaTeX{} 环境的参考文献生成问题,以入门教程为出发点,介绍了文档源代码、bib数据库、编译方法、文献表生成、格式修改、多语言、筛选和排序等大量细节问题,为国内用户提供了一套基于BibLaTeX宏包的完整参考文献解决方案。
介绍了biblatex-gb7714-2015样式包和一个样式定制示例的设计思路和实现过程,揭示了基于BibLaTeX标准样式定制样式的一般原理和开发方法,为BibLaTeX参考文献样式定制提供了完整示范。
最后针对使用传统方法的用户需求,总结了基于thebibliography环境和基于bibtex程序的参考文献生成方法。}
%old-bak-20190127针对\LaTeX 文档的参考文献相关问题,分析了参考文献生成的一般需求,给出基于biblatex宏包全套解决方案。从文献数据源文件准备,tex源文档的组成,tex/bib文件的编译,分章参考文献和书后文献表,文献表标题和内容格式,参考文献著录和标注样式,多语言文献,脚注题注小页环境中的引用,脚注旁注中的文献表,文献表分类筛选打印,beamer 类中的参考文献等方面详实地介绍了biblatex参考文献生成方法,并提供所有示例代码,为用户提供参考。介绍了biblatex-gb7714-2015样式包的设计思路和实现方法,给出了一个参考文献样式定制项目示例,介绍了bbx和cbx文件开发的方法、步骤和过程,揭示了基于biblatex标准样式定制参考文献的一般原理,为定制参考文献样式提供完整示范。
%old-bak-20171031:针对\LaTeX 文档的中文参考文献问题,对其需求展开分析,提出利用biblatex宏包的解决思路,并针对性地给出了各项需求的解决方案(包括示例代码),为\LaTeX 文档参考文献生成提供便利。
%关键词,keywords
%多个关键词用\kongge隔开
\guanjianci{\LaTeX{} \kongge 参考文献 \kongge BibLaTeX宏包}
%use \kongge as separation
%收稿等时间,第一/通信作者简介,
%% history:
\def\versionnumber{v1.0h} %版本和修改时间信息
\def\versiondate{2020-06-02}
\diyizuozhe{The files have version number \versionnumber, last revised \today.\\ 第一作者简介:}
%introduction of corresponding author
\zuozhejianjie{HU ZHENZHEN,A \LaTeX ~LOVER,Email: [email protected]。}
%----------------------------------------------------------------------
% 第一篇论文-正文内容
\input{articlemodelpartb.tex}
%----------------------------------------------------------------------
\section{引言}
参考文献是科技文档写作中的重要内容,在写作中常碰到这样的问题,比如:怎么生成满足格式要求的参考文献表?正文中的文献引用如何能够产生满足格式要求的标注标签?怎么生成分章文献表和统一的全书文献表?等等。这些问题尽管不会成为困扰,但可能牵扯文档作者不少精力。为使\LaTeX{} 文档作者能更便捷地生成参考文献,有必要对相关问题进行总结梳理,并给出简单解决方案,以便随时参考和应用。 %移植和
对于一般需求而言,利用传统的\LaTeX{} 参考文献生成方法\cite{Oetiker--,刘海洋2013--,胡伟2011--}配合相关的bst 样式文件基本能够满足要求。但如果要实现一些特殊格式或要求,就需要应用一些辅助宏包,
比如 chapterbib(用于分章文献表)\cite{Daly2010--},
multibib(用于单文档内生成多文献表)\cite{Hansen2008--},
natbib(用于标注并提供著录样式)\cite{Arseneau2010--},
mcitesplus(用于标注)\cite{Shell2013--},
inlinebib(用于文献表置于脚注中)\cite{Seindal1994--}等。这些工具从多个方面提供了需求功能,但多个宏包同时使用可能存在不兼容等问题。另外,由于使用bibtex/bibtex8程序本身的原因,非utf-8编码的bib文件无法使用中文的引用关键字,中文文献排序往往也需要附加很多特殊处理,甚至当参考文献量足够大时可能出现内存不足的情况。
而biblatex宏包\cite{Lehman2015}旨在提供了一套完整的方案,既能解决传统方法的一些局限,也能避免大量使用辅助宏包,更能提供很多新功能,比如动态数据修改等。biblatex的强大和完善使它成为\LaTeX{} 参考文献生成的一个绝佳选择。由于使用习惯及存量bst广泛应用,传统方法无法完全取代,但由于biblatex的大量优点,基于biblatex的方法呈逐渐流行态势,目前CTAN 上面已经有包括APA、MLA、science、ieee、nature、iso690、gb7714-2015 等数十种第三方样式可以选用,结合biblatex的强大定制功能,利用biblatex一个宏包完全可以简单而直接满足\LaTeX{}文档参考文献相关所有可能需求。
然而正是由于biblatex的完整性,biblatex宏包相当的庞大,其说明文档(\href{https://github.com/hushidong/biblatex-zh-cn}{中译版})长达300页。对于初学者或者无深度需求的使用者来说,biblatex手册就像一个技术说明书,详实的介绍宏包功能和接口,但却没有提供一个像lshort这样的简单入门教程。
而类似biblatex-gb7714-2015这样的参考文献biblatex样式包\cite{胡振震2016},虽然也介绍了一些biblatex的使用方法但却并不详细。%其重点主要还在样式包的设计、实现和使用上。
总的来说,对于biblatex参考文献生成,目前还没有较为系统的入门手册
\footnote{准确的说是中文入门手册,因为:\par
biblatex 3.12版以后,宏包作者提供了一个简单的
\href{https://github.com/plk/biblatex/blob/dev/doc/latex/biblatex/biblatex-quickstart.tex}{入门教程}\href{run:exampleandimage/biblatex-quickstart.pdf}{(见pdf文档)}\par
另外Paul Stanley也提供了一个
\href{https://github.com/PaulStanley/biblatex-tutorial}{入门教程}
\href{https://github.com/hushidong/biblatex-tutorial-cn}{(见pdf文档)},该教程对基本概念介绍相当清晰,感兴趣的读者可以细看。}。
本文正是出于这样的现状考虑,希望从初级用户的角度,面向应用,以示范的形式,给出一个简易但全面的使用说明书,为用户入门提供帮助。
%事实上随着biblatex宏包及其biber后端程序的完善,利用它可以满足对于参考文献的绝大多数功能需求。如果利用一个宏包就能完成以前多个宏包才能实现的功能,那么问题实际上就简化了,这正是用户所期待的。利用biblatex宏包“简单化、便利化”地满足\LaTeX 文档写作中的各种中文参考文献需求正是本文写作的初衷所在。
需要提示的是: 本文所有的示例和测试都基于texlive发行版,2014/2015/2016/2017/2018及以后版本均可,文档均采用UTF-8编码,编译使用xelatex+biber,texlive的安装和使用可以参考texlive安装手册\cite{Berry2016--}
以及\href{http://bbs.ctex.org/forum.php}{ctex论坛ctex论坛}
或\href{http://www.latexstudio.net/}{latex sudio}上分享的各种方法。
\section{为什么使用biblatex}
\subsection{\LaTeX{}参考文献基本原理}\label{sec:latex:ref}
\LaTeX{} 中参考文献生成主要借助于\verb|\thebibliography|环境。这个环境可以手工在tex 源文档中输入,也可以利用外部程序生成,如 bibtex 程序。
首先我们看一下手工写 \verb|\thebibliography| 环境的方法。典型的 \verb|\thebibliography| 环境如例 \ref{eg:env:biblio} 所示。
在该环境中每一条文献都用一条\verb|\bibitem| 命令组织,其第一个可选参数信息可以用于生成引用标注标签(如例中的\{Baker et~al.(1995)Baker and Jackson\}),其后的必选参数则是该条参考文献的引用关键词(如例中的\{baker\}),最后跟着的是用于生成参考文献表的著录内容。
\begin{codetex}{典型的thebibliography环境}{eg:env:biblio}
\begin{thebibliography}{2}
\bibitem[{Baker et~al.(1995)Baker and Jackson}]{baker}BAKER~S~K, JACKSON~M~E. \newblock The future of resource sharing\allowbreak[M]. \newblock New York: The Haworth Press, 1995.
\bibitem[{Chernik(1982)}]{chernik}CHERNIK~B~E. \newblock Introduction to library services for library technicians\allowbreak[M]. \newblock Littleton, Colo.: Libraries Unlimited, Inc., 1982.
\end{thebibliography}
\end{codetex}
在文档编译过程中,第一遍编译时,基于\verb|\bibitem| 命令的宏替换,\TeX{}编译程序(如pdflatex、xelatex、lualatex等)将在 aux 文件中写入对应每条\verb|\bibitem| 命令的标签生成命令\verb|\bibcite|。第二遍编译时,\TeX{}编译程序会读入 aux 文件并根据\verb|\bibcite| 命令生成对应引用关键词的标签,
编译过程中当遇到\verb|\cite|命令(该命令的参数中给出了当前引用文献的引用关键词),则调用对应引用关键词的标签,以生成引用的标注标签。
基于外部工具 bibtex 的参考文献生成方法,本质上是类似的,也需要\verb|\thebibliography| 环境。只是利用了外部程序 bibtex 生成该环境,而不是在tex源文档中手工写入。
在tex源文档中,利用命令 \verb|\bibliographystyle| 命令指定 bibtex 程序需要使用的bst文件,
利用命令\verb|\bibliography|命令指定 bibtex 程序需要处理的bib文件。在源文档第一步编译中,\TeX{}编译程序将这两个文件信息写入到 aux 文件中。接着运行 bibtex 程序,该程序会读取 aux 文件中的两个指定文件,并处理生成一个 bbl 文件,该文件中包含 \verb|\thebibliography| 环境。源文档第二遍编译时,\TeX{}编译程序读取 bbl 文件,并利用\verb|\bibitem|命令将标签生成命令 \verb|\bibcite| 写入到aux文件中。源文档第三遍编译时,\TeX{}编译程序再次读取aux文件并依据 \verb|\cite| 命令将标签输出。
其中参考文献的著录格式由 \verb|\thebibliography| 环境的 \verb|\bibitem| 命令必选参数后跟着的文献内容决定,比如例 \ref{eg:env:biblio} 中的第一条参考文献的格式是\{baker\}之后的内容决定的,因此可以采用手动输入方式来实现需要的格式,或者由满足要求的bst样式文件来生成。而引用文献的标注标签格式则由 \verb|\bibcite| 命令的定义及其参数决定。该命令的定义在latex中有原始的定义,一些宏包比如natbib,jurabib等会对其重新定义以生成满足某种要求的格式。但如果该命令的输入参数中如果没有足够的信息,那么再多的格式要求也会巧妇难为无米之炊。因此要实现一些特殊的格式就需要为其提供足够的文献信息。而这一信息又来源于 \verb|\bibitem| 命令的写入aux操作,\verb|\bibitem| 命令通常会把其后跟着的[]中的可选参数内容当做 \verb|\bibcite| 命令的参数,因此引用的标注标签生成的关键之一是在 \verb|\bibitem| 后面的[]内写入足够文献信息,同样这也可以手工写入,也可以利用样式文件bst生成。
对于natbib宏包来说,通常需要在 \verb|\bibitem| 命令后的[]中写入三个信息:作者的缩写信息、由()包围的年份信息、以及作者的详细信息,其中()作为定界符来读取这三个信息。因此利用natbib宏包生成标注标签时,通常要在 \verb|\bibitem| 后面的[]内做文章,无论是通过手工写的方法还是通过bst样式文件生成。jurabib宏包也有类似情况,只是其解析方式更为复杂,需要写入更多的信息,以便在标签生成时生成更多的内容,比如文献的题名等。
总结起来,\LaTeX{} 参考文献生成的基本方法是利用 \verb|\thebibliography| 环境写参考文献的著录格式,并利用 \verb|\bibitem| 命令将其可选参数信息输出,作为引用文献标注标签生成的基础在正文中生成参考文献引用标签。如果要采用非手工方式生成该环境,那么就要利用外部程序 bibtex 和参考文献样式bst文件以及参考文献的数据源bib文件。其中bib文件是以 BibTeX 格式统一规范的文本文件,该格式简单且通用,是默认的参考文献数据源标准,bib文件作为文本文件也非常容易编辑,
关于该格式在第 \ref{sec:bib:file} 节还有详细介绍。而bst则是与 bibtex 程序配合使用的样式文件,以一种能被 bibtex 程序识别的语法实现,该语法与 TeX 基本语法迥异,因此一般用户学习起来不太容易,因此要设计某种样式的bst文件也相对困难。而 bibtex 程序则是用于处理bib文件生成bbl文件的程序,通常由 TeX 发行版(如Texlive、MacTex等)附带。
\subsection{BibLaTeX参考文献生成的基本原理}
基于BibLaTeX的参考文献生成方法,从根子上就不再利用\verb|thebibliography|环境,但操作方式有点类似于传统的基于bibtex程序的方法,相似点在于同样利用外部程序处理参考文献数据源,也同样需要利用辅助文件。
BibLaTeX 的设计出发点就是要达成两个主要目的,
一是要避免传统参考文献生成方法过度的读写辅助文件,
二是要利用TeX/LaTeX命令实现对参考文献信息和格式的完全控制。
基于bibtex程序的方法总共有四步编译,第一步\TeX{}编译程序将信息写入aux、文件,第二步bibtex程序读取aux文件和bib文件并将信息写入bbl文件,第三步\TeX{}编译程序读取bbl文件将信息写入aux文件,第四步\TeX{}编译程序再次读取aux文件,来生成文献表和文献引用标注标签。
这在BibLaTeX设计者看来是没有必要的,既然要实现对参考文献信息的完全控制,那么将参考文献信息放在内存中是最好的方式,也没有必要过多的读写文件。如果参考文献信息能够以一种合适的方式读入内存,并能在tex宏中应用,那么就可以解决问题。
因此BibLaTeX设计并实现了这种新的方式,在第一步编译时,\TeX{}编译程序将需要的信息写入到bcf文件中,然后在第二步编译中,利用外部程序Biber读取该文件,并处理bib文件得到一个bbl文件(其内包含BibLaTeX宏包设计的能被tex宏读取并利用的固定格式的信息,这一信息包含了所有的参考文献信息,可以很方便地用于参考文献著录表和参考文献引用标注的输出)。第三步编译时,\TeX{}编译程序读取bbl文件,BibLaTeX宏包识别并利用其中的信息输出引用标签和文献表。这种新的方式仅用两次次源文档编译和一次外部程序Biber编译,就实现了参考文献生成,相比传统的基于BibTeX程序的方法,既减少了一次源文档编译,同时也实现了将全部参考文献信息保存在内存中并进一步利用的目的。
如前所述,参考文献生成包含两个部分,一个是著录文献表,一个是正文中的引用标注。
对于\LaTeX{} 传统方法,前者以手工写或者bibtex程序结合bst文件生成,后者则由标注宏包如natbib等读取手动写入或者bibtex程序结合bst文件给出的标签信息生成。而BibLaTeX由于已经把全部参考文献信息读取到内存中,因此可以由tex宏完全控制。BibLaTeX提供了所有这些参考文献信息的控制接口,著录表格式由一系列宏进行控制,标注格式也由一系列宏进行控制,前者通常放在bbx文件中,后者则放在cbx文件中,一些通用的宏则放在biblatex.sty, biblatex.def, standard.bbx, english.lbx, blx-dm.def等文件中(在格式修改时可在这些文件中查看原始的格式定义)。
简单来说,对于著录文献表,BibLaTeX通过driver控制条目中的域(项)和顺序,通过fieldformat 控制各个项的格式,其中利用一套异步标点控制机制和一套本地化字符串系统辅助。对于标注标签,则通过各类cite命令及其内部接口进行控制,同样使用标点控制和本地化字符串机制。此外,BibLaTeX充分利用tex的局部化机制,提供各种局部化设置方式,比如利用文境refcontext区分不同的数据和排序机制,利用各cite命令和bibliography和biblist环境区分各种分隔符的输出格式,利用各类条目类型的驱动(即driver)环境设置域的不同输出格式。可以说,biblatex 因为解决了参考文献全部信息的控制问题,为利用tex宏控制参考文献和引用标签提供了无限可能,只有想不到,没有做不到。
\subsection{biblatex参考文献生成的优缺点}
如前所述,在源文档编译中BibLaTeX宏包通过写bcf文件(格式实际为xml)为biber提供处理信息,Biber根据这些信息处理bib文件中相关条目,完成筛选、排序、转换等操作,并将处理结果写入bbl文件中,再次进行源文档编译时,BibLaTeX宏包则读取bbl中的完整数据以进一步处理输出。BibLaTeX宏包基于这样一种新的机制实现了更简化的文献编译,实现了参考文献信息完全由tex宏控制,还实现了其它大量功能来替代传统参考文献生成方法所需的其它辅助宏包。这些功能的实现,有赖于BibLaTeX宏包的全面设计以及后端程序Biber的强大支持。总结起来BibLaTeX加上其后端程序Biber具有如下主要特点:
\begin{itemize}
\item BibLaTeX 包含许多用于人文社科类的样式,用于生成人文社科类的文献表和标注标签。而基于bibtex程序的方法引用标注主要包括作者年制和数字顺序编码制,缺乏人文社科类文献常用的作者标题制或者脚注样式,需要利用类似jurabib这样的宏包以及专门的bst文件。
\item BibLaTeX 提供便捷的参考文献格式控制机制,包括友好的宏包选项控制和简单的tex宏格式修改,非常易学。而传统的方法则要么手工改写文献表内容,要么修改bst样式文件,而学习bst文件采用的与tex语法迥异的语法并不是一件轻松的事情。
\item BibLaTeX 提供完全的unicode支持,提供自动的编码转换,提供自动的姓名和姓名列表非模糊处理,支持可定制的数据继承规则,提供非常灵活的数据映射(动态处理)。
\item BibLaTeX 提供强大排序功能,支持排序定制,支持unicode字符的排序,更支持本地语言的排序调整,比如中文的按笔画数排序等,可以实现丰富的效果。而基于bibtex的方法能支持utf-8编码的bib 文件,但不支持非ASCII字符的排序。
\item BibLaTeX 使用的后端biber,具有处理大文献量的能力,不用担心bibtex可能存在的内存问题。biber还支持远程的参考文献数据库。
\item BibLaTeX 兼容 BibTeX 格式外,还支持更多更广泛的条目类型和域。也支持除BibTeX 外的更多格式的文献数据库,也支持其他格式的文献数据的输出和转换。
\item BibLaTeX 提供参考文献分节、分类筛选等功能。在文档中打印多个文献表非常方便,而不再需要使用其它宏包,比如chapterbib等。
\item BibLaTeX 是包含biber程序的一个大型宏包。BibLaTeX 提供了覆盖natbib、jurabib、chapterbib、multibib、mcite、inlinecite 等宏包的完整功能体系。
\end{itemize}
当然也不存在十全十美的事物,BibLaTeX 也存在一些局限,包括:
\begin{itemize}
\item 虽然BibLaTeX已经取得了广泛应用,但一些期刊和出版商长期维护使用专门设计的配合bibtex 程序使用的bst样式文件,因此可能不接收使用BibLaTeX的文档。
\item BibLaTeX 生成处理完的参考文献信息,不是thebibliography环境,而是BibLaTeX预设的格式,因此其代码并不能像thebibliography环境中的内容一般可以直接拷贝进源文档使用。
\item BibLaTeX 还在不断更新和升级,尽管已经基本稳定,但可能存在后向兼容问题。比如随着BibLaTeX的升级,一些基于老版本BibLaTeX的第三方样式可能会无法使用,而基于新版本BibLaTeX的样式可能无法应用于老版本BibLaTeX的环境,这需样式作者持续维护。
\item BibLaTeX 因为功能强大且全面,说明文档很大很全,有点类似技术说明书,但作为初级用户的入门却并不合适,而对于宏包作者这一类的用户,BibLaTeX 宏包的代码实现和解析说明相对较少,也不利于这类人员深入学习和参与维护。
\end{itemize}
从前述的优缺点可以看到,虽然BibLaTeX宏包还并不完美,但基于BibLaTeX生成参考文献的确可以获得很多优势,因此对于一般用户来说,使用BibLaTeX不失为一种好的选择。
\section{参考文献常见需求与解决方案}
\subsection{参考文献生成的常见需求}
\LaTeX 中文写作对于参考文献一般会有哪些需求?最直接地,我们会想到文章投稿时的参考文献格式要求,比如: 参考文献标题的字体字号前后间距段落格式; 参考文献内容的字体字号; 各条目的间距; 条目的内容格式如文献标识符、标点等; 双语参考文献; 上标、带年份、带页码等标注要求等等。在书籍之类的文档排版中有时也会遇到比如: 分章参考文献表; 文后参考文献总表; 参考文献的目录链接; 脚注中引用参考文献; 脚注中直接显示参考文献; 在合适位置按需插入文献表等等。还有一些比如文献的排序; PDF文档中标注和文献条目的正反超链接等。总结起来可能包括如下常见需求:
%,这里根据本文作者的理解,按照重要程度列出:
%(注意这里所列的问题可能并不全面,仅列出了本文作者所知道的一些问题,更多未遇问题只能以后完善,也希望大家帮助一起完善)
\begin{itemize}
\item 参考文献表基本生成方法-数据源文件准备(手动、利用winedt、利用texstudio 、Jabref、随\LaTeX 文档生成)
\item 参考文献表基本生成方法-文档的组成(基本结构、宏包加载、样式包加载、文献引用、文献表打印)
\item 参考文献表基本生成方法-文档的编译(手动、利用winedt、利用texstudio、脚本)
\item 书后参考文献和分章参考文献
\item 分类筛选、缩略信息和索引打印
\item 参考文献标题格式(重定义heading,利用titlesec)
\item 参考文献内容格式(重定义内容命令)
\item 参考文献著录样式(顺序编码制、作者年制、域、位置、标点、排序)
\item 参考文献标注样式(页码、年份、对应natbib/mcite等的标注命令)
\item 多语言文献
\item 脚注题注小页环境中的引用
\item 脚注旁注中的文献表
\item beamer类中的参考文献
\end{itemize}
下面针对前述提出的需求,一一进行解答。解决方案主要应用于一般文档类(book,report,article),beamer类的问题放到最后一小节中专门介绍。
\subsection{参考文献数据文件准备}\label{sec:bib:file}
\LaTeX 文档中生成参考文献除了利用 thebibliography 环境手工输入参考文献条目信息这一简单方式外,bibliography+bibliographystyle+bibtex 方式或者 biblatex方式都需要准备一个参考文献数据源文件即bib文件。(这里需要区分一下的是bibtex程序和BibTeX格式,bibtex程序是前面介绍过的传统参考文献生成方法中用于生成 thebibliography环境信息的外部程序,类似于BibLaTeX宏包提供的biber程序,这个程序并不是唯一的,大家都可以写一个这样的程序来实现类似的功能,比如笔者用python写的\href{https://github.com/hushidong/biblatex-map}{bibmap} 程序,也能够输出thebibliography环境来生成参考文献,只是参考文献格式定义不使用bst而使用py文件罢了。而BibTeX格式则是参考文献数据源bib文件的内部组织格式,是通用的,BibLaTeX宏包和biber程序同样使用这种格式的文件,bibtex程序、biber程序同样也使用。)
bib文件内保存有各条参考文献的信息,每一条参考文献记录都是一个BibTeX item(BibTeX项),一条参考文献记录基本格式如下:
\begin{codetex}{参考文献信息基本格式即BibTeX格式}{fmt:bibtex}
@ARTICLE{entrykey,
author = {Author A and Author B and Author C and others},
title = {A title of a paper},
journal = {A title of a jounal},
year = {2005},
volume = {31},
number = {6},
pages = {75-81},
}
\end{codetex}
其中\verb|@|符号后面紧跟着条目的类型比如article(期刊文章),book(专著)等,编组符号\{后紧跟的是该条参考文献信息的bibtex key即引用关键词,在cite标注(引用)命令中使用该关键词来表示对此文献的引用。逗号后面跟着的是构成参考文献记录的各个域的信息,比如作者域,题名域等等,参考文献信息放在各个域名等号后面的编组内,一些域(比如author域)对于信息录入是有特殊格式要求的(比如英文姓名的两种不同方式),具体可以参考biblatex宏包手册和biblatex-gb7714-2015样式包手册\cite{胡振震2016}中关于域信息录入的说明。
尽管biblatex在传统BibTeX格式基础上增加了很多新的条目类型和域,但它完全兼容传统的BibTeX格式文件,出于兼容性考虑,我们在准备bib文件时,可以完全按照\href{https://en.wikipedia.org/wiki/BibTeX}{传统的BibTeX格式规范}来进行。BibTeX格式中有两个基本概念:一是条目类型(Entry type),即一个参考文献条目的类型,是book(专著),是inbook(专著析出的文献),或其它类型。二是域(Field),即纪录参考文献信息并组成参考文献条目的信息项,比如author(作者),title(题名),或者其它。BibTeX格式中条目类型和域
如表\ref{tab:bibtex:fmt}、\ref{tab:bibtex:field}所示,这些条目和域是bibtex附带的默认样式bst文件能识别的条目类型和域,而第三方的bst文件有可能支持其它条目类型和域,比如一些bst样式为了兼容biblatex增加的条目类型和域而做的处理。biblatex 虽然支持更多的条目类型和域(详见biblatex手册),但通常情况下BibTeX默认的条目类型和域已够用。
\begin{table}[!htb]
\centering
\caption{BibTeX格式的条目类型和域}\label{tab:bibtex:fmt}
\footnotesize
\begin{tabular}{p{2cm}p{3cm}p{3cm}p{6cm}}
\hline
条目类型 & 类型说明 & 条目必选域 & 条目可选域 \\ \hline
article & An article from a journal or magazine.
author, title, journal,
year, volume &
number, pages, month, note, key\\
book & A book with an explicit
publisher. &
author/editor, title,
publisher, year &
volume/number, series, address, edition, month,
note, key, url \\
booklet & A work that is printed
and bound, but without a named publisher or sponsoring institution. &
title &
author, howpublished, address, month, year, note, key \\
inproceedings / conference & An article in a conference proceedings.
& author, title, booktitle, year & volume/number, series, pages, address, month, organization, publisher, note, key\\
inbook &
A part of a book, usually untitled. May be a chapter (or section, etc.) and/or a range of pages. &
author/editor, title, chapter/pages, publisher, year &
volume/number, series, type, address, edition, month, note, key \\
incollection &
A part of a book having its own title. &
author, title, booktitle, publisher, year &
editor, volume/number, series, type, chapter, pages, address, edition, month, note, key \\
proceedings &
The proceedings of a conference. &
title, year &
editor, volume/number, series, address, month, publisher, organization, note, key \\
manual &
Technical documentation. &
title &
author, organization, address, edition, month, year, note, key \\
mastersthesis &
A Master's thesis. &
author, title, school, year &
type, address, month, note, key \\
phdthesis &
A Ph.D. thesis. &
author, title, school, year &
type, address, month, note, key \\
techreport &
A report published by a school or other institution, usually numbered within a series. &
author, title, institution, year &
type, number, address, month, note, key \\
misc &
For use when nothing else fits. &
none &
author, title, howpublished, month, year, note, key \\
unpublished &
A document having an author and title, but not formally published. &
author, title, note &
Optional fields: month, year, key\\ \hline
\end{tabular}
\end{table}%
\begin{table}[!htb]
\centering
\caption{BibTeX格式中的域说明}\label{tab:bibtex:field}
\footnotesize
\begin{tabular}{p{3cm}p{12cm}}
\hline
域名称 & 域说明 \\ \hline
address &
Publisher's address (usually just the city, but can be the full address for lesser-known publishers) \\
annote &
An annotation for annotated bibliography styles (not typical)\\
author &
The name(s) of the author(s) (in the case of more than one author, separated by and) \\
booktitle &
The title of the book, if only part of it is being cited \\
chapter &
The chapter number \\
crossref &
The key of the cross-referenced entry \\
edition &
The edition of a book, long form (such as "First" or "Second") \\
editor &
The name(s) of the editor(s) \\
howpublished &
How it was published, if the publishing method is nonstandard \\
institution &
The institution that was involved in the publishing, but not necessarily the publisher \\
journal &
The journal or magazine the work was published in \\
key &
A hidden field used for specifying or overriding the alphabetical order of entries (when the "author" and "editor" fields are missing). Note that this is very different from the key (mentioned just after this list) that is used to cite or cross-reference the entry.\\
month &
The month of publication (or, if unpublished, the month of creation) \\
note &
Miscellaneous extra information \\
number &
The "(issue) number" of a journal, magazine, or tech-report, if applicable. (Most publications have a "volume", but no "number" field.) \\
organization &
The conference sponsor \\
pages &
Page numbers, separated either by commas or double-hyphens. \\
publisher &
The publisher's name \\
school &
The school where the thesis was written \\
series &
The series of books the book was published in (e.g. "The Hardy Boys" or "Lecture Notes in Computer Science") \\
title &
The title of the work \\
type &
The field overriding the default type of publication (e.g. "Research Note" for techreport, "{PhD} dissertation" for phdthesis, "Section" for inbook/incollection) \\
volume &
The volume of a journal or multi-volume book \\
year &
The year of publication (or, if unpublished, the year of creation) \\ \hline
\end{tabular}
\end{table}%
参考文献源文件本质上只是一个文本文件,只是其内容需要遵守BibTeX格式,所以可以有多种生成方式:
\subsubsection{手动文本文件生成}
利用文本编辑器比如notepad++等,生成或者编辑bib源文件是一种很简单的方式,直接新建bib文件,用notepad++打开,填入需要的参考文献信息,保存就可以得到一个bib源文件,如图\ref{bib:texteditor}所示。notepad++,notepad2等文本编辑器均可在其官网下载到。
\begin{figure}[!htb]
\centering
\includegraphics[width=\figwd\textwidth]{bib-text-editor}
\caption{文本编辑器生成bib文件}\label{bib:texteditor}
\end{figure}
\subsubsection{利用winedt生成}
在windows下常用winedt编辑latex文档,所以用其生成bib文件也是一种不错的方式,特别是它提供了各种条目类型的信息模板(图\ref{bib:winedt})。winedt可以在其官网(\url{http://www.winedt.com/})下载到,非注册版本不影响功能使用。
\begin{figure}[!htb]
\centering
\includegraphics[width=\figwd\textwidth]{bib-winedt}
\caption{winedt生成bib文件}\label{bib:winedt}
\end{figure}
\subsubsection{利用texstudio生成}
texstudio软件可以跨平台使用,linux下因为没有winedt所以比较常用,用其生成bib文件也很方便,它也提供各种条目类型的信息模板(图\ref{bib:texstudio})。texstudio软件下载地址:
\url{https://sourceforge.net/projects/texstudio/?source=navbar}。
\begin{figure}[!htb]
\centering
\includegraphics[width=\figwd\textwidth]{bib-texstudio}
\caption{texstudio生成bib文件}\label{bib:texstudio}
\end{figure}
\subsubsection{利用Jabref软件生成}
利用Jabref软件是最重要的一种方式,因为它也是一个较强的参考文献管理工具。新建一个数据库就是新建一个bib文件(图\ref{bib:jabref-a}),新建一个记录就是加入一条参考文献信息(图\ref{bib:jabref-b}),参考文献的信息的录入也是可视化输入栏形式(图\ref{bib:jabref-c})。jabref软件可在官网(\url{http://www.jabref.org/})下载。
\begin{figure}[!htb]
\centering
\includegraphics[width=\figwd\textwidth]{bib-jabref-a}
\caption{Jabref软件生成bib文件}\label{bib:jabref-a}
\end{figure}
\begin{figure}[!htb]
\centering
\includegraphics[width=\figwd\textwidth]{bib-jabref-b}
\caption{Jabref软件增加参考文献条目}\label{bib:jabref-b}
\end{figure}
\begin{figure}[!htb]
\centering
\includegraphics[width=\figwd\textwidth]{bib-jabref-c}
\caption{Jabref软件录入参考文献信息}\label{bib:jabref-c}
\end{figure}
类似工具还有:Papers\footnote{\url{http://papersapp.com}}、
Mendeley\footnote{\url{http://www.mendeley.com}}、
zotero\footnote{\url{https://www.zotero.org/}}等。
\subsubsection{随\LaTeX 文档生成}
\LaTeX 提供了filecontents环境允许在\LaTeX 文档编译的时候自动将信息写入文件中,自然这也可以用来生成bib文件。比如在导言区加入如下代码,可以生成一个example.bib文件。
\begin{codetex}{利用filecontents环境随latex文档生成bib}{bib:genwithlatex}
\usepackage{filecontents}
\begin{filecontents}{example.bib}
@Article{傅刚2000--,
Title = {大风沙过后的思考},
Author = {傅刚 and 赵承 and 李佳路},
Note = {news},
Number = {14},
Url = {http://www.bjyouth.com.cn/Bqb/20000412/GB/4216%5ED0412B1401.htm},
Urldate = {2005-07-12},
Date = {2000-04-12},
Journaltitle = {北京青年报}
}
\end{filecontents}
\end{codetex}
\subsubsection{获取标准bib文件}
上述给出的方法都是手动编写bib文件的方法,事实上这些手工编写方法还是比较繁琐的。那么是否有其它方法可以直接获取bib文件或其内容避免自己手工编写呢?答案是有的,latexstudio上共分享了这方面的几篇文章\cite{北京交通大学研究生公众号2016--}\cite{olref2016--}\cite{文献助手2016--}。总结起来主要有几个渠道:
\begin{enumerate}
\item Google 学术\footnote{\url{https://scholar.google.com}}: 检索文献 >> Cite(引用) >> BibTeX >> 复制粘贴到 mybibtex.bib 文件
\item CNKI,(以 firefox 为例): (确保安装 Zotero 的 firefox 扩展 >>) CNKI 检索文献 >> 点击一下 url 输入框末尾的文件夹图标 >> 选中要导出的文献 >> 导出为 BibTeX 引用格式 >> 复制粘贴导出的 BibTeX 文献到 mybibtex.bib 文件。
\item 必应学术(必应学术 – 学无止境,术有乾坤)、百度学术(百度学术 – 保持学习的态度)类似于google学术。
\item CiteSeerX搜索引擎\footnote{\url{http://citeseerx.ist.psu.edu}}。
\item 从一些学术期刊官网直接获取bib文件,比如IEEE,Springer,Elsevier等
\item 使用文献助手工具,地址: \url{http://cite.latexstudio.net}
\end{enumerate}
熟练使用这些方法,应该可以进一步提高工作效率。说明一下: latexstudio网站原创、收集、整理了很多latex方面的知识、信息和资源,内容不一,对不同程度的latex爱好者都具有一定的参考价值,各位朋友可以了解学习。
\subsubsection{从pdf或文本文件转换bib文件}
批量生成参考文献数据以构成bib文件,还有一种方式是从参考文献表文本转换。比如从一个包含GB/T 7714-2015格式的参考文献表的pdf文件中,将文献表拷贝到一个文本文件中(比如:textfilename.txt 文件),其中每一条文献信息构成一个行。然后利用biblatex-gb7714-2015样式宏包附带的perl脚本gb7714texttobib.pl将其转换为bib文件(比如:bibfilename.bib)。则对应的脚本使用命令为:
\begin{codetex}{利用gb7714texttobib.pl将参考文献文本转换为bib文件}{code:trans2bib}
perl gb7714texttobib.pl in=textfilename.txt out=bibfilename.bib
\end{codetex}
其中in=后面是输入的参考文献文本文件,out=后面是输出的bib文件。
\subsubsection{利用biber转换输出新的bib文件}
对于使用biblatex的用户来说,当需要从一个大的bib数据库中抽取部分文献数据到一个新的bib文件时,可以利用biber命令选项 \verb|--output-format=bibtex|。事实上,因为平时的积累我们通常会维护一个大的参考文献数据库,但写文章的时候只是引用其中的部分文献,当需要提交文章时,我们提交仅包含引用文献数据的bib文件即可,这可以通过biber轻松完成。例\ref{code:biber:trans}给出了一个biber命令示范,其中jobname是当前引用文献的tex文档名,
运行该命令后会得到一个 \verb|jobname_biber.bib| 的文件,包含有该文档所引用的文献的数据。
\begin{codetex}{利用biber转换出新的bib文件}{code:biber:trans}
biber --output-format=bibtex jobname.bcf
\end{codetex}
\subsubsection{利用bibmap程序修改bib文件}
对于bib文件经常会有批量处理需求,一是从一个大的bib数据库,提取少量的要引用的文献;二是对bib文件中的条目内容进行修改。
对于这两个需求,笔者利用python重写了bib文件解析器,并借鉴biblatex的动态数据修改的模式,实现了一个bib文件快速修改的工具。
因为数据修改的基本逻辑与biblatex的类似,
所以命名为\href{https://github.com/hushidong/biblatex-map}{bibmap}。具体使用方法见其说明文档。
\subsection{\LaTeX 文档的组成}
\LaTeX{}文档的源文件是由具有某种结构和模式的代码所构成的,需要生成参考文献表的\LaTeX{}文档自然也遵守这样的结构和模式。
\subsubsection{文档源文件基本结构}
\LaTeX 文档源文件的代码基本结构由导言区和正文区构成,导言区位于documentclass命令与begin\{document\}命令之间,而正文区位于begin\{document\}命令和end\{document\}命令之间。宏包在导言区加载,具体文档内容在正文区编辑。
\begin{codetex}{文档源文件的代码基本结构}{code:doc:structrue}
\documentclass{article}%文档类
%导言区:
%ctex中文设置
\usepackage{ctex}
%定义版面
\usepackage[paperwidth=210mm,paperheight=290mm,left=20mm,right=20mm,top=25mm, bottom=15mm]{geometry}
%书签功能,选项去掉链接红色方框
\usepackage[colorlinks=true,pdfstartview=FitH,linkcolor=blue,anchorcolor=violet,citecolor=magenta]{hyperref}
\begin{document}%正文区开始
正文内容
\end{document}
\end{codetex}
\subsubsection{biblatex宏包和样式的加载、指定参考文献数据源}
利用 biblatex 宏包生成参考文献可以说非常简单,只要在上述\LaTeX{}基本文档基础上载入biblatex宏包,选择需要的参考文献样式,并指定bib数据源,然后在正文中引用bib文件中的参考文献,然后在文档合适位置(比如文档末尾)打印参考文献表。
例\ref{code:doc:structrue}和图\ref{fig:eg:ref}给出了示例代码及其结果。
\begin{codetex}{biblatex参考文献生成最小工作示例}{code:doc:structrue}
\documentclass{article}%文档类
%导言区开始:
%加载ctex宏包,中文支持
\usepackage{ctex}
%加载geometry宏包,定义版面
\usepackage[left=20mm,right=20mm,top=25mm, bottom=15mm]{geometry}
%加载hyperref宏包,使用超链接
\usepackage[colorlinks=true,pdfstartview=FitH,linkcolor=blue,anchorcolor=violet,citecolor=magenta]{hyperref}
%加载biblatex宏包,使用参考文献
%标注(引用)样式citestyle,著录样式bibstyle都采用gb7714-2015样式
\usepackage[bibstyle=gb7714-2015,%nature,%
citestyle=gb7714-2015%,backref=true%
]{biblatex}
%biblatex宏包的参考文献数据源加载方式
\addbibresource[location=local]{example.bib}
%正文区开始:
\begin{document}
%正文内容,引用参考文献
详见文献\cite{Peebles2001-100-100}\parencite{Miroslav2004--}
参考文献\cite[见][49页]{蔡敏2006--}\parencite[见][49页]{Miroslav2004--}
%打印参考文献表
\printbibliography[heading=bibliography,title=参考文献]
\end{document}
\end{codetex}
\begin{refsection}
\begin{figure}[!htb]
\centering
\fbox{
\parbox{15cm}{%\raggedright
详见文献\cite{Peebles2001-100-100}\parencite{Miroslav2004--}
参考文献\cite[见][49页]{蔡敏2006--}\parencite[见][49页]{Miroslav2004--}
\printbibliography[heading=subbibliography,title=参考文献]
}
}
\caption{最小工作示例的结果}\label{fig:eg:ref}
\end{figure}
\end{refsection}
其中,biblatex宏包和参考文献数据源都在导言区加载(例\ref{code:pkg:load}),宏包加载命令为usepackage,数据源指定命令为addbibresource。
\begin{codetex}{biblatex宏包、数据源和样式的加载}{code:pkg:load}
%biblatex宏包加载
%其中后端backend使用biber
%引用样式citestyle,著录样式bibstyle都采用gb7714-2015样式
\usepackage[backend=biber,bibstyle=gb7714-2015,%nature,%
citestyle=gb7714-2015%,backref=true%
]{biblatex}
%参考文献数据源加载
\addbibresource[location=local]{example.bib}
\end{codetex}
其中,参考文献样式作为biblatex宏包的可选参数加载,即用bibstyle选项加载著录样式,用citestyle选项加载标注样式,当两者使用同名样式时,可以用一个选项style表示,
例\ref{code:pkg:load}中bibstyle和citestyle都选择使用gb7714-2015样式。
有时标注样式和著录样式单独指定会很有用的,比如有人可能想用gb7714-2015的参考文献著录样式,但引用标注又不想要用上标?最简单的方式是著录样式使用gb7714-2015样式,而标注样式使用其他样式比如author-year。当然修改gb7714-2015的标注样式文件中cite等命令也可以实现相同目的。
可用的参考文献样式还有许多,既可以使用biblatex宏包提供的标准样式(详见biblatex手册Standard Styles一节),也可以使用第三方提供的定制样式,比如nature,science等,
具体参见\label{sec:bib:style}节,用户可以根据需要选择使用。
为利用 biblatex 的高级功能,后端 backend 应尽量采用 biber 而不用 bibtex (如果backend为bibtex8,则biblatex宏包利用bibtex8程序和aux文件进行编译,而backend为biber则是利用biber程序和bcf文件进行编译)。
另外,biblatex宏包还提供一系列宏包选项,用于控制文献著录表,标注的标签等内容,详细内容参考biblatex手册宏包选项一节。
值得注意的是: 参考文献数据库源文件即bib文件可以是本地的,也可以是网络上的(具体参考biblatex手册Bibliography Commands一节中关于addbibresource命令的说明)。本地的数据源可以指定绝对路径或者相对路径,注意其中目录层级之间的间隔符用/而不是\textbackslash ,windows下默认复制的间隔符是\textbackslash ,需要将其改为/。数据源还可以指定标签,以便在不同参考文献分节中使用不同的文献源。数据源添加方式,见例\ref{ref:addresource}。
\begin{codetex}{添加参考文献数据源的两种方式}{ref:addresource}
\addbibresource{bibfile1.bib} %本地数据源
\addbibresource{bibfile2.bib}
\addbibresource[location=local]{D:/zlatexreference/paperone.bib}
\addbibresource[location=remote]{http://www.citeulike.org/bibtex/group/9517} %网络数据源
\addbibresource[location=remote,label=lan]{ftp://192.168.1.57/~user/file.bib}
%指定文献源标签
\addbibresource[label=drofnats]{./bibfiles/drofnats.bib}
\addbibresource[label=frobwangler]{./bibfiles/frobwangler.bib}
\addbibresource[label=everyone]{./bibfiles/everyone.bib}
%在不同的文献节中使用不同的标签的文献源
\newrefsection[drofnats,everyone]
section contents
\endrefsection
\begin{refsection}[frobwangler,everyone]
section contents
\end{refsection}
\end{codetex}
\subsubsection{文献的引用(标注)}
文献的引用(标注)可以采用\LaTeX 提供的cite命令(注意biblatex对其进行了重定义),也可以使用biblatex提供的其它命令比如parencite、textcite等,也可以采用参考文献样式包提供的定制命令,比如gb7714-2015样式提供的pagescite,yearpagescite等。在文档中引用文献仅需要在合适的位置插入引用(标注)命令,命令的必选参数是所引用参考文献的bibtex键(即引用关键词)。比如:
\begin{codetex}{参考文献的引用命令}{ref:cite:cmd}
详见文献\cite{Peebles2001-100-100}\parencite{Miroslav2004--}
参考文献\cite[见][49页]{蔡敏2006--}\parencite[见][49页]{Miroslav2004--}
详见文献\pagescite{Peebles2001-100-100}\pagescite[][201-301]{Peebles2001-100-100}
见赵耀东\yearpagescite[][205]{赵耀东1998--}和Simon\yearpagescite[][15]{Simon2001--}的文献。
\end{codetex}
当需要在参考文献表中打印不标注的文献时,可以使用nocite命令引入这些文献。其参数是具体条目的引用关键词(bibtex键)或者星号,星号表示将bib文件中所有的参考文献引入。
使用命令如\ref{ref:nocite:cmd}所示。
\begin{codetex}{不标注的文献的引用命令}{ref:nocite:cmd}
参考文献表中打印不标注的文献引入\nocite{Miroslav2004--,蔡敏2006--}。
参考文献表中打印不标注的文献引入,引入bib文件中中全部文献\nocite{*}。
\end{codetex}
另外,在biblatex中使用动态文献集也能产生类似nocite命令的效果,即打印文献表时也会自动输出定义在动态文献集中的文献。
\subsubsection{文献表的打印(输出)}
基于 biblatex 宏包的参考文献表打印(输出)与\LaTeX 传统方式不同,采用的命令是printbibliography。如果全文仅需一个参考文献,那么只要在合适的地方插入如下命令即可:
\begin{codetex}{参考文献表打印命令}{ref:bibprint:cmd}
\printbibliography[heading=bibliography,title=参考文献]
\end{codetex}
注意:printbibliography有很多可选参数,用于复杂的文献表控制,具体见biblatex宏包手册。
\subsubsection{参考文献正反超链接}
当加载hyperref宏包后,biblatex宏包会自动提供正向超链接,若需要实现的反向超链接,则需要添加backref选项,如例\ref{ref:hyperlink:back}所示。
\begin{codetex}{参考文献反向超链接选项}{ref:hyperlink:back}
\usepackage[backend=biber,bibstyle=gb7714-2015,citestyle=gb7714-2015,%
backref=true%
]{biblatex}
\end{codetex}
需要注意的是,反向超链接主要是对页码进行链接,而对页码进行正确超链接需要一个前提,即当前链接的页码是唯一的。当有两页具有相同的页码时,超链接总是链接到第一个具有该页码的页面上。比如当封面页页码是1,正文第一页页码也是1,那么到正文第一页的反向超链接总会链接到封面页上。解决该问题就是要解决页码的唯一性问题。当页码的表示形式不同时,页码也能得到正确的区分。比如封面页用罗马字母I表示,而正文第一页用阿拉伯数字1表示,那么就能得到正确的反向超链接。
测试文档见:
\href{run:exampleandimage/test-backref.tex}{test-backref.tex}。
\subsection{文档的编译}
文档的编译与\LaTeX{}传统方法一致,只是中间的参考文献编译过程略有变化,biblatex宏包使用biber后端时,编译参考文献数据用的命令为biber filename。 编译命令可以利用软件调用,也可以在命令行手工输入。后面将介绍利用winedt、texstudio、命令行和脚本等不同方式进行编译的具体操作过程。
需要注意,无论采用哪种方式编译,如果参考文献数据中存在一些特殊符号比如\&等,编译时会报错。对于这个问题除了手动修改bib文件中参考文献信息这一种方法外,还有两种自动处理方式,一是利用jabref,jabref有bibtex和biblatex两种模式,在biblatex模式下,对于一些特殊字符的输入,比如\&,jabref会自动将其转换为\textbackslash\&。二是利用biber等工具自动处理,比如使用gb7714-2015样式,在bib数据源不经任何处理的情况下,由gb7714-2015样式的设定,biber工具也能自动处理一些特殊字符。
\subsubsection{编译命令}
一般情况下采用xelatex或lualatex进行编译,命令为:
\begin{codetex}{xelatex编译命令}{cmd:xelatex}
xelatex jobname.tex
biber jobname
xelatex jobname.tex
xelatex jobname.tex
\end{codetex}
当然也可以使用pdflatex进行编译,命令为:
\begin{codetex}{pdflatex编译命令}{cmd:pdflatex}
pdflatex jobname.tex
biber jobname
pdflatex jobname.tex
pdflatex jobname.tex
\end{codetex}
但要注意的是:使用pdflatex进行编译,可能因为某些样式比如authoryear,使用了xstring宏包中的一些命令,进而导致错误,但numeric类样式通常没有问题。这一问题在biblatex更新到3.12版本后取消xstring宏包后得以解决。
中文用户编译还需要注意编码问题。utf-8编码的文档,采用xelatex编译没有任何注意事项,但使用pdflatex编译时,需要给ctex宏包加载UTF8选项,比如\verb|\usepackage[UTF8]{ctex}|,该选项在文档类加载时给出也可,比如\verb|\documentclass[[UTF8]{article}|,同时\emph{引用文献时使用的引用关键词必须是英文},若使用中文将报错。
当文档使用其他编码时,xelatex编译通常需要指定一个文档编码,比如windows环境下的GBK/GB2312编码的文档需要指定 \verb|\XeTeXinputencoding "GBK"|,否则会显示乱码。使用pdflatex进行编译时,如果biblatex不能正确的处理编码问题,那么需要为其明确的指定texencoding和bibencoding选项。比如windows环境下的GBK/GB2312编码的文档,
需要指定 \verb|\usepackge[texencoding=GBK]{biblatex}|。
参考测试文档:
\href{run:exampleandimage/test-gbk-pdflatex.tex}{test-gbk-pdflatex.tex},
\href{run:exampleandimage/test-gbk-pdflatex.tex}{test-gbk-xelatex.tex},
\href{run:exampleandimage/test-gbk-pdflatex.tex}{test-utf8-pdflatex-cls.tex},
\href{run:exampleandimage/test-gbk-pdflatex.tex}{test-utf8-pdflatex-pkg.tex}。
另外也可以利用latexmk宏包实现一步编译,即使用一条命令即可完成整个编译过程,因为latexmk会根据文档的内容自动的设置编译步骤并调用相应的命令进行编译,因此编译命令也可以写为:
\begin{codetex}{latexmk编译命令}{cmd:latexmk}
latexmk -xelatex jobname.tex
\end{codetex}
\subsubsection{利用winedt编译}
当文档准备好之后,第一步点击winedt工具栏的xelatex按钮(\parbox{1.2cm}{\includegraphics[width=1.2cm]{button-compiler-winedt}}图中红框内的按钮)完成第一遍\LaTeX 编译;
第二步,打开命令行(可以用winedt菜单accessories下command prompt项)输入命令biber filename完成参考文献编译;
第三步,再次点击xelatex编译按钮完成编译,如果存在反向超链接,那么需再次用xelatex编译一遍才可得到正确结果。
由于可以使用latexmk进行一步编译,因此如果在winedt操作界面上增加一个功能按钮,该按钮对应的命令为latexmk,那么只要点击一下按钮就可以实现一键编译
\footnote{https://blog.csdn.net/xenonhu/article/details/80010659},具体参见:
\href{https://blog.csdn.net/xenonhu/article/details/80010659}{Winedt 一键编译 LaTeX 文档}。
\subsubsection{利用texstudio}
texstudio可以跨平台使用,在windows和linux下均可。texstudio可以通过利用元命令构建编译命令实现一键编译,进入选项菜单的设置texstudio,首先在常规选项卡下设置语言为zh\_cn将texstudio界面语言转变为中文,然后在构建选项卡设置默认的编译器为xelatex,设置默认文献工具为biber(图\ref{texstudio:defaulttool}),然后点击构建并查看的配置按钮(\parbox{0.5cm}{\includegraphics[width=0.5cm]{texstudio-cmd-set}}),设置工具栏构建并查看按钮(\parbox{0.5cm}{\includegraphics[width=0.5cm]{texstudio-cmd-build}})对应的命令由5个元命令构成(图\ref{texstudio:compilerchain})。如此,在编译时只要点击:构建并查看按钮即可完成一键编译功能。其编译的过程提示信息如例\ref{texstudio:onekeycompile}所示(环境为windows 7 x64+texlive 2016+tex studio 2.10.8)。
\begin{codetex}{texstudio一键编译过程提示}{texstudio:onekeycompile}
开始 : xelatex.exe -synctex=1 -interaction=nonstopmode "test".tex
完成
开始 : biber.exe "test"
INFO - This is Biber 2.5
INFO - Logfile is 'test.blg'
INFO - Reading 'test.bcf'
INFO - Found 0 citekeys in bib section 0
INFO - Found 4 citekeys in bib section 1
INFO - Found 0 citekeys in bib section 0
INFO - Processing section 1
INFO - Looking for bibtex format file 'example.bib' for section 1
INFO - Decoding LaTeX character macros into UTF-8
INFO - Found BibTeX data source 'example.bib'
WARN - Overwriting field 'year' with year value from field 'date' for entry ' 鍒樻捣娲013--'
WARN - Overwriting field 'year' with year value from field 'date' for entry ' 鑳′紵2011--'
WARN - BibTeX subsystem: C:\Users\ADMINI~1\AppData\Local\Temp\pru9Tr4B7_\example.bib_6592.utf8, line 1198, warning: possible runaway string started at line 1197
INFO - Overriding locale 'en-US' defaults 'normalization = NFD' with 'normalization = prenormalized'
INFO - Overriding locale 'en-US' defaults 'variable = shifted' with 'variable = non-ignorable'
INFO - Sorting list 'none/global/' of type 'entry' with scheme 'none' and locale 'en-US'
INFO - No sort tailoring available for locale 'en-US'
INFO - Writing 'test.bbl' with encoding 'UTF-8'
INFO - Output to test.bbl
INFO - WARNINGS: 3
完成
开始 : xelatex.exe -synctex=1 -interaction=nonstopmode "test".tex
完成
开始 : xelatex.exe -synctex=1 -interaction=nonstopmode "test".tex
完成
\end{codetex}
\begin{figure}[!htb]
\centering
\includegraphics[width=\figwd\textwidth]{texstudio-defaulttool}
\caption{texstudio设置默认的编译工具}\label{texstudio:defaulttool}
\end{figure}
\begin{figure}[!htb]
\centering
\includegraphics[width=\figwd\textwidth]{texstudio-compilerchain}
\caption{texstudio配置构建并查看命令}\label{texstudio:compilerchain}
\end{figure}
linux(以deepin linux x64 v15+texlive 2016+texsudio为例)下texstudio的设置是类似的,但要正常编译还有一个关键问题,即设置编译工具的路径,这不是系统环境的路径设置,而是要告诉texstudio 编译工具所在的目录,这同样在菜单选项下的texstudio设置项中设置,仍然进入构建选项卡,左下角点选显示高级选项,然后设置命令(\$PATH)为
/usr/local/texlive/2016/bin/x86\_64-linux,如图\ref{texstudio:path:linux}所示。
\begin{figure}[!htb]
\centering
\includegraphics[width=\figwd\textwidth]{texstudio-path-linux}
\caption{linux下texstudio设置命令路径}\label{texstudio:path:linux}
\end{figure}
\subsubsection{命令行或脚本}
命令行编译本质上是在命令行手动输入命令进行编译。过程仍然是一遍xelatex编译,biber编译,两遍xelatex编译,命令如下:
\begin{codetex}{命令行手动输入的命令}{cmd:prompt}
xelatex.exe -no-pdf -interaction=nonstopmode "test".tex
biber.exe "test"
xelatex.exe -no-pdf -interaction=nonstopmode "test".tex
xelatex.exe -synctex=1 -interaction=nonstopmode "test".tex
\end{codetex}
其中:-no-pdf选项表示不生成pdf文档,-interaction=nonstopmode选项表示出现错误不中断编译,-synctex=1选项表示pdf文档与tex源文档进行跳转关联。
利用脚本编译原理是一样的,只是利用编译脚本文件进行自动编译(注意:linux下的脚本文件需要添加一下路径)。比如:
\begin{codetex}{window下的bat脚本文件}{bat:file:cmd}
@echo off
:: compile the tex file
xelatex.exe --synctex=-1 "test".tex
:: compile bibliography
biber "test"
:: compile again
xelatex.exe --synctex=-1 "test".tex
::to do it again for backref
xelatex.exe --synctex=-1 "test".tex
:: clear aux files
del /q *.aux *.bbl *.blg *.log *.out *.toc *.bcf *.xml *.synctex *.nlo *.nls *.bak *.ind *.idx *.ilg *.lof *.lot *.ent-x *.tmp *.ltx *.los *.lol *.loc *.listing *.gz
\end{codetex}
\begin{codetex}{linux下的sh脚本文件}{sh:file:cmd}
#!/bin/bash
# exec path for tex live 2016
export PATH=${PATH}:/usr/local/texlive/2016/bin/x86_64-linux
#compile the tex file
xelatex --synctex=-1 "test".tex
#compile bibliography
biber "test"
#compile again
xelatex --synctex=-1 "test".tex
#to do it again for backref
xelatex --synctex=-1 "test".tex
#clear aux files
rm -r *.aux *.bbl *.blg *.log *.out *.toc *.bcf *.xml *.synctex *.nlo *.nls *.bak *.ind *.idx *.ilg *.lof *.lot *.ent-x *.tmp *.ltx *.los *.lol *.loc *.listing *.gz
\end{codetex}
\subsubsection{常见的编译出错问题}
编译出现问题从多数读者的实践看主要包括3类:
一是编译命令使用不当。由于一些读者对传统基于bibtex的方法与基于biblatex的方法的差别并不了解,以为编译的命令与传统方法一致,会使用bibtex程序而不是biber程序对文献进行编译,这就导致编译失败。这种情况下把编译命令改正确即可。(附带说明一下,其实基于biblatex的方法使用bibtex程序编译文献也是可以,把后端程序设置改为bibtex就可以,只是会失去很多功能特性,特别是对中文的一些支持会失效,所以并不提倡使用。而且要特别注意:使用bibtex后端,不是转换成传统的基于bibtex的方法,不能使用各种bst文件,换成bibtex后端仍然使用cbx/bbx样式)。
二是编译过程不完整。有时从以前编译过的文档中进行编译,可能由于biblatex升级等缘故,原有的信息会导致出错。或者由于更换样式,而各个样式的输入输出不一样,导致编译失败。或者有时在tex文档中使用filecontents来写bib文件,但更改bib内容后,xelatex编译不修改bib文件,导致没有新的文献条目而出错。这种情况下处理很简单,把所有的辅助文件清理干净,重新编译即可。
三是biber程序缓存被破坏。由于biber在第一次运行时会在缓存文件夹下创建一些二进制运行文件,如果这些文件被破坏,那么biber运行结果会出现莫名其妙的错误。比如:
biber运行一半就结束了,log信息如下所示:
\begin{verbatim}
INFO - This is Biber 2.16
INFO - Logfile is 'thuthesis-example.blg'
INFO - Reading 'thuthesis-example.bcf'
INFO - Found 34 citekeys in bib section 0
INFO - Processing section 0
INFO - Looking for bibtex format file 'ref/refs.bib' for section 0
INFO - LaTeX decoding ...
INFO - Found BibTeX data source 'ref/refs.bib'
\end{verbatim}
这次运行中,只是找到了bib文件,并没有下一步的处理,显然是存在问题的。
因此如果出现这种情况,可以手动删除缓存文件夹,让biber重新创建。这些缓存文件夹名字通常为:
\begin{verbatim}
par-<hex_encoded_username>/cache-*
par-<hex_encoded_username>\cache-*
\end{verbatim}
在不同的系统下面,缓存文件夹的位置是不同的,可能的位置包括:
\begin{verbatim}
/var/folders/*/*/*/ (OSX, local GUI login shell)
/var/tmp/ (OSX (remote ssh login shell), Unix)
/tmp/ (Linux)
C:\Documents and Settings\<username>\Local Settings\Temp (Windows XP/Cyg- win)
C:\Windows\Temp (Windows)
C:\Users\<username>\AppData\Local\Temp (Windows 7/8)
\end{verbatim}
也可以从运行得到的.blg文件或者命令 \verb|biber --cache| 来找到缓存文件夹。
删除缓存文件夹操作,在Linux和Mac下可以使用如下命令操作:
\verb|rm -rf `biber --cache`|。
在windows下,那么其实随便用个清理软件把临时文件夹清理一下就行。直接点就是找到 \verb|par-<hex_encoded_username>/cache-*| 缓存文件夹然后删除它。参考问题见
\href{https://tex.stackexchange.com/questions/140814/biblatex-biber-fails-with-a-strange-error-about-missing-recode-data-xml-file/140815#140815}{biblatex-biber-fails-with-a-strange-error-about-missing-recode-data-xml-file}。
可能还有一些其它的不太常见的问题,比如biblatex更新失败,tex编译环境安装不完整等,这些问题可以采用重装texlive,重新更新biblatex等方法解决。
\subsection{分章参考文献和书后参考文献}
分章参考文献在书籍写作中是一种比较常见的需求。在 LaTeX 传统方法中,利用thebibliography 环境是可实现的,但所有文献内容都需要手动输入,且格式只能在 bibitem 内设置,在文献量较大时显然是不适合的。
而利用 bibliographystyle 和 bibliography 命令生成的参考文献可以与thebibliography 环境同时存在,生成多个不同的文献表,可以插入多个文献表但却是相同的,这是因为编译文档时,所有的信息都是写入一个 aux 文件中的。所以要实现分章参考文献表,需要使用 chapterbib 、multibib 等宏包,使用 chapterbib 时要把需要生成文献表的章放到单独的 tex 子文档中,然后用 include 命令包含进主文档,这样可以生成多个 aux 文件以便生成分章参考文献表。其核心原理是利用多个aux文件区分不同部分的参考文献,bibunits、multibib宏包尽管能在一个源文档(非主文档和子文档的形式)生成分章参考文献,也是通过写多个aux文件实现的。
而 biblatex 宏包的机制则要灵活的多,不再依赖多aux文件划分来实现文献的分章,可以很方便的在一个 \LaTeX 文档中实现多种形式的参考文献划分,包括利用refsection、refsegment环境或者宏包选项等。
\subsubsection{利用 refsection 环境分章}
利用 refsection 环境可以显式的设置需要划分的参考文献的文档结构部分,比如把 chapter 的所有内容放在 refsection 环境内,然后在其中引用参考文献,并使用参考文献打印命令 printbibliography 就会得到该环境内的参考文献表。
例\ref{bib:refsection}给出的代码,
结果如图\ref{bib:refsection:resa},\ref{bib:refsection:resb}所示。
\begin{codetex}{分章参考文献}{bib:refsection}
\documentclass{report}%%file:egrefsection.tex
\usepackage{ctex}
\usepackage[backend=biber,style=gb7714-2015]{biblatex}
\addbibresource[location=local]{example.bib}
\begin{document}
\chapter{序章}
\begin{refsection}
序章内容\cite{GPS1988--}
\printbibliography[heading=subbibliography,title=本章参考文献]
\end{refsection}
\chapter{正文章一}
\begin{refsection}
正文内容一\cite{杨洪升2013-56-75}
\printbibliography[heading=subbibliography,title=本章参考文献]
\end{refsection}
\chapter{正文章二}
\begin{refsection}
正文内容二\cite{马克思2013-302-302}
\printbibliography[heading=subbibliography,title=本章参考文献]
\end{refsection}
\end{document}
\end{codetex}
\begin{figure}[!htb]
\centering
\fbox{\includegraphics[width=\figwd\textwidth,page=1]{egrefsection.pdf}}
\caption{分章参考文献举例-序章}\label{bib:refsection:resa}
\end{figure}
\begin{figure}[!htb]
\centering
\fbox{\includegraphics[width=\figwd\textwidth,page=2]{egrefsection.pdf}}
\caption{分章参考文献举例-章一}\label{bib:refsection:resb}
\end{figure}
\subsubsection{利用宏包选项 refsection 分章}
除了利用 refsection 环境显式方法外,还可以利用宏包选项 refsection=chapter 等来设置需要划分的打印参考文献的文档结构,这里设置 refsection=chapter 表示以章为单位区分打印参考文献,也可以设置成 section,那么就是以节为单位进行区分打印。
例\ref{bib:opt:refsection}给出的代码,结果如图\ref{bib:refsection:resc}所示,可以看到其结果与图\ref{bib:refsection:resa}完全一致。
需要注意的是,biblatex使用refsection选项(而不是显式的refsection环境),实质是对chapter或section等命令进行patch来进行文献分节处理,所以会对这些命令进行重定义,因此会导致与其它需重定义这些命令的宏包的冲突,比如titlesec宏包。当然这种冲突也只是在使用refsection选项的情况下,当不使用该选项时,biblatex也不会做patch,因此也就不会产生冲突。
\begin{codetex}{利用宏包选项实现分章参考文献}{bib:opt:refsection}
\documentclass{report}%%file:egrefsectionb.tex
\usepackage{ctex}
\usepackage[backend=biber,refsection=chapter,style=gb7714-2015]{biblatex}
\addbibresource[location=local]{example.bib}
\begin{document}
\chapter{序章}
序章内容\cite{GPS1988--}
\printbibliography[heading=subbibliography,title=本章参考文献]
\chapter{正文章一}
正文内容一\cite{杨洪升2013-56-75}
\printbibliography[heading=subbibliography,title=本章参考文献]
\chapter{正文章二}
正文内容二\cite{马克思2013-302-302}
\printbibliography[heading=subbibliography,title=本章参考文献]
\end{document}
\end{codetex}
\begin{figure}[!htb]
\centering
\fbox{\includegraphics[width=\figwd\textwidth,page=1]{egrefsectionb.pdf}}
\caption{设置宏包选项实现分章参考文献}\label{bib:refsection:resc}
\end{figure}
\subsubsection{统一的全局参考文献}
biblatex 利用 refsection 很容易生成分章节的参考文献。如果要生成一个全局的参考文献表,那么可以不使用任何的 refsection 或者使用一个 refsection 包含全部的文档内容 (注意: 这两种方法一般情况下都是可行的,但在 beamer 类第二种方法不能使用,见第\ref{sec:bib:inbeamer}节的说明)。
但还有一种需求是,既要生成分章参考文献,又要有一个全局的参考文献。那么最简单的方式是在文末利用 printbibliography 的 section 选项对所有的 refsection 同时打印一遍,
代码如例\ref{bib:global:refsection}所示,但这样的方式更像是文献表堆积,不像一个统一的文献表,且其中的各章的文献引用标注序号不是全局的,只是各refsection 内部的序号。
\begin{codetex}{利用refsection的全局参考文献}{bib:global:refsection}
\printbibliography[section=1,heading=subbibliography,title=第一章参考文献]
\printbibliography[section=2,heading=subbibliography,title=第二章参考文献]
\printbibliography[section=3,heading=subbibliography,title=第三章参考文献]
\end{document}
\end{codetex}
这个问题可以在 refsection 外使用 nocite 后再打印一个全局文献表来解决,也可以用refsegment 代替 refsection 来解决。
refsegment 与 refsection 作用很像,也用于划分,但其内部的文献序号是全文统一的。每一个 segment 都有一个编号(从1开始),而在 refsegment 环境外的参考文献默认都在 segment=0 的segment 内。用 printbibliography 命令打印在某个refsegment 环境内的使用参考文献,只需要给出 segment=编号整数 的一个值,该值表示第几个 refsegment 环境。若 printbibliography 命令中给出 segment=0 则打印不在任一refsegment 环境内的文献,若不给出 segment 参数则遍历所有可以打印的参考文献,包括各个 refsegment 内的文献。
注意: refsection 内部不可以有 refsection ,即 refsection 不可嵌套,但其内部可以使用 refsegment。printbibliography 命令也可以对 refsection 内的所有refsegment 遍历打印,也可以指定 refsection 内的某一个 refsegment 中的文献,只要给出 segment 参数,当 printbibliography 在 refsection 外打印其内 refsegment 中的文献,则还需指定 section 参数。
例\ref{eg:global:complex}给出一个示例代码,