-
Notifications
You must be signed in to change notification settings - Fork 2
/
bibmap.tex
1061 lines (780 loc) · 52 KB
/
bibmap.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"
% 用于
\documentclass{article}
\input{bibmap-preamble} %宏包和一些格式设置
%\usepackage{bibmap}%[citestyle,bibstyle,mapstyle]
\begin{document}
\thispagestyle{empty}
\begin{center}
\heiti{\zihao{3} bibmap宏包和bibmap程序使用手册
\footnote{Address: https://github.com/hushidong/biblatex-map, initially created at: 2019-03-01}}
\vspace{0.3cm}
\kaishu{\zihao{4} 胡振震\footnote{Email: hzzmail@163.com}}
\songti{\zihao{-4} \today}
\end{center}
\section{简介}
\subsection{bibmap是什么}
bibmap是一个用于处理参考文献的latex宏包,
包含一个sty文件,用于设置参考文献处理时的选项;
一个bibmap程序,用于在后端处理参考文献数据。
bibmap宏包提供了完整的参考文献功能,用于latex参考文献标注和文献表的生成。bibmap宏包的工作原理有点类似biblatex,但又是极度简化的,目的是直接利用后端程序结合样式设置获得满足格式要求的著录表和标注标签内容,即避免像biblatex那样需要利用大量的latex内部宏来实现格式设置,
也不再利用natbib等宏包解析bbl信息以设置标注标签。
bibmap后端程序类似bibtex/biber程序用于处理参考文献数据,其输出也是bbl文件,包含著录表信息(即latex直接能用的thebibliography环境)以及不同的引用命令的标注内容信息(即各个引用命令对应的格式化内容,由bibmap宏包读取后直接输出)。bibmap后端与biber的最大区别是,biber输出biblatex能识别和处理的特定协议的文献信息,而bibmap输出的全部是格式化后的可用于latex直接输出的信息。bibmap后端与bibtex的最大差别在于,bibmap格式化文献表所用的样式文件是python数据和代码,更简单易懂,目的是让用户可以更方便的设置参考文献格式,而不用去设计语法复杂的bst文件。
bibmap宏包延续了利用外部工具处理数据并通过文件为latex提供信息的思路来生成或处理参考文献,但期望走得更极致即尽可能的利用外部工具获得满足格式要求的信息,从而简化latex宏包方面的工作。其核心创新点或优势用一个词来描述就是追求极致简单。具体表现为:
1. 利用python写后端用于处理参考文献简单易懂便于维护和扩展
2. 格式由python数据结构的信息来设定避免如bst语言的复杂语法
3. 著录和标注格式尽可能用后端程序生成避免复杂的latex宏设计
目前附带的bibmap程序主要是python源代码,可以直接运行bibmap.py程序,在windows下可以利用打包成的bibmap.exe程序,其它系统用户可自行打包成可执行程序。
\subsection{bibmap的两大核心功能}
\subsubsection{参考文献生成}
参考文献生成的使用类似于传统基于bibtex的方法,其基本用法一致。主要分如下几步:
(1) 写tex文件源代码。
参考文献相关宏包加载仅使用bibmap,不使用natbib或chapterbib等宏包,也不能使用biblatex(因为bibmap是独立的宏包,已提供完整的参考文献功能,所以与这些宏包联用会产生冲突)。加载bibmap宏包时,可以为bibmap宏包设置一些选项(见\ref{sec:bm:opt}节)。文档中正常使用cite等命令来引用文献,在需要生成文献表的地方加入命令\verb|\bibliography{bibfile}|。一个极简的最小工作文档如下例所示:
\begin{example}{最小工作示例}{code:bibmap:mwe}
\begin{texlist}
\documentclass{article}
\usepackage{ctex}
\usepackage[citestyle=numeric,bibstyle=gb7714-2015ay]{bibmap}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{wfz,
author = {王夫之},
title = {宋论},
edition = {刻本},
address = {金陵},
publisher = {湘乡曾国荃},
year = {1865(清同治四年)},
}
\end{filecontents}
\begin{document}
文献\cite[25-30]{wfz}
\bibliography{\jobname}
\end{document}
\end{texlist}
\end{example}
(2) 编译源代码文档
第一遍xelatex编译tex源代码,命令为:
\verb|xelatex test.tex|
第二遍用bibmap程序运行,命令为:
\verb|python bibmap.py test|
或
\verb|bibmap.exe test|
第三和四遍使用xelatex编译tex源代码
\verb|xelatex test.tex|。
则能生成满足格式要求的参考文献表。
从实质上看,bibmap宏包读取从bibmap程序生成的格式化的thebibliography环境以及各个引用命令的标注内容信息并输出。
作为后端程序,bibmap程序可以看做是bibtex程序的替代,但它的参考文献格式设置要比bst文件简单得多,且由于使用现代python语言相比bibtex具有一些新的优势。
作为参考文献宏包,bibmap宏包的实现非常简单,仅通过少量的代码读取bibmap后端的结果并输出,在使用方面则通过一些选项设置接口方便地完成一些格式选择。
\subsubsection{bib文件修改}
bibmap程序的另一大功能是对bib文件的数据进行修改。这可以与tex文档相关,也可以不相关。不相关时可以直接利用bibmap程序对指定bib文件做指定格式的数据处理,相关时则利用指定的格式对bib文件做类似biblatex和biber做的动态数据修改。
bibmap程序对bib文件的数据修改,直接借鉴biblatex的设计,可以说是一套python的重新实现,使用逻辑也基本一致,唯一增加的功能是在域设置时可以设置fieldfunction选项,用于指定函数对域内容做处理。可以对bib文件的条目和域做非常细致的处理和修改。
下面示例的命令就是对test.bib文件做出修改,修改的根据是设置文件bibmapaddpinyinkey.py,其主要功能是为每条文献增加用于按拼音排序的key域。
\begin{example}{bib数据修改示例}{code:usage:addpinyin}
\begin{pycode}
python bibmap.py test.bib -m bibmapaddpinyinkey.py
\end{pycode}
\end{example}
通过设置文件可以实现非常细致的修改,详细方法见第\ref{sec:bib:modify:intro}节。
\section{参考文献生成的详细说明}
参考文献生成的基本逻辑是这样的:
(1) 首先,加载bibmap宏包的tex文件第一次编译后,latex和bibmap宏包将会在aux文件中写入一些设置信息,比如样式文件、bib文件、文献引用等。
(2) 接着,运行bibmap程序,生成用于产生参考文献表的bbl文件。。
\begin{description}[leftmargin=0em,itemindent=3.5em]
\item[a.] bibmap程序首先将读取aux文件,获取bib文件、样式文件、文献引用信息;
\item[b.] bibmap程序接着读取并解析bib文件,将有用信息放入bibentries列表中,列表中的每个bibentry是一个字典,描述每个参考文献条目的所有信息;
\item[c.] bibmap程序接着读取bib修改样式文件,根据样式文件中的选项对bibentries中的各个条目做修改;
\item[d.] bibmap程序接着读取参考文献著录样式文件,根据设置的全局选项对引用文献做排序处理,得到新的bibentries;
\item[e.] bibmap程序接着对排序后的bibentries中的各条bibentry进行格式化。格式化过程中根据选项信息,分条目类型处理。每个条目由各个输出项组成,每个输出项要处理相关的域格式,以及输出项前后的标点和字符串。整个条目的文本还需要处理替换字符串(比如本地化字符串)、替换标点等,以形成最终输出的条目著录格式。所有的格式化后的条目组成一个字典便于输出;
\item[f.] 最后bibmap程序完成输出。首先输出新的bib文件,json格式的文件,这是bib数据修改的结果。接着输出bbl文件,txt文件,html文件,这是参考文献格式化后的结果。bbl文件用于latex文档,txt文件用于文本复制,html用于网页显示。
\end{description}
(3)接着再编译tex文件,这时tex编译器自动读取bbl文件用于生产参考文献表,并在aux文件中写入引用的标注标签信息(此时正文引用的标注标签未完成)。
(4)接着最后一遍编译tex文件,tex编译器读取前一步编译写入到aux文件中的标注标签信息,来生成正文中文献引用的标注。
这四步编译逻辑与基于bibtex的方法是完全一致,差别仅在于第二步的处理,利用bibmap程序代替了bibtex程序,以及内部的处理逻辑的差异。
\subsection{bibmap宏包及选项和命令}\label{sec:bm:opt}
tex文档使用bibmap宏包时,其加载方式与一般宏包一致,需要注意加载bibmap宏包后,不能再使用natbib、chapterbib、biblatex等宏包。
\begin{example}{bibmap宏包加载}{usage:bibmap:load}
\begin{texlist}
\usepackage{bibmap}
\end{texlist}
\end{example}
bibmap宏包可用的选项包括:
\begin{description}
\item[citestyle] 用于指定文献引用的标注样式,主要包括numeric,authoryear。所有的标注样式基于natbib宏包实现,设置numeric等价于为natbib设置super,square,sort\&compress 选项,设置authoryear等价于为natbib设置authoryear选项。
\item[bibstyle] 用于指定文献表的著录样式,主要包括gb7714-2015,gb7714-2015ay,或者其它用户自定义的样式。设置gb7714-2015时调用宏包自带的bibstylenumeric.py样式文件生成文献表,设置gb7714-2015ay时调用宏包自带的bibstyleauthoryear.py样式文件生成文献表。当指定用户自定义的样式时则给出样式文件的文件名,比如bibstyle=bibstyleexample,表示调用bibstyleexample.py样式文件来生成文献表。
\item[bibtable] 用于指定表格文献表所采用的表格宏包。值为tabularray,longtable或false,当给出为tabularray等时用于生成表格形式的文献表,表格的格式由样式文件设定,注意使用bibtable指定的表格时,需使用对应的样式文件。
其实质是bibmap根据样式文件中的表格文献表设置,对thebibliography 环境进行了重定义。
典型的表格文献表的设置为:
\begin{example}{典型的文献表环境的设置}{code:biblio:env}
\begin{pycode}
#文献表的环境,包括表格环境
bibliographyenv={
"default":r'''
\renewcommand\bibitem[2][]{\item}
\setlength{\biblabelsep}{1em}
\setlength{\bibitemindent}{0pt}
\setlength{\biblabelextend}{0pt}
\renewenvironment{thebibliography}[1]
{\bibheading\list%
{\mkbibbracket{\arabic{biblabelnumber}}}
{\usecounter{biblabelnumber}%
\settowidth{\labelnumberwidth}{\mkbibbracket{#1}}%
\addtolength{\labelnumberwidth}{\biblabelextend}%
\setlength{\labelwidth}{\labelnumberwidth}%
\setlength{\labelsep}{\biblabelsep}%
\setlength{\bibhang}{\biblabelsep}%
\addtolength{\bibhang}{\labelnumberwidth}%
\setlength{\leftmargin}{\bibhang}%
\setlength{\itemindent}{\bibitemindent}%
\setlength{\itemsep}{\bibitemsep}%
\setlength{\parsep}{\bibparsep}}%
\renewcommand*{\makelabel}[1]{\hss##1}}
{\endlist}
''',
"longtable":{
"cmd":r"\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}", # 需定义的命令
"env":"longtable",
"colspec":"{|C{1cm}|p{11cm}|}",
"head":"序号 & 文献信息"
},
"tabularray":{
"cmd":"", # 需定义的命令
"env":"longtblr",
"colspec":"[label=none]{colspec={|Q[c,m,1cm]|Q[l,m,11cm]|},cell{1}{2}={c,m}, rowhead = 1,rows={ht=1cm}}",
"head":"序号 & 文献信息"
}
}
\end{pycode}
\end{example}
如果要修改表格中输出的内容形式,比如3栏或者序号变成为姓名等,则需要修改上述bibliographyenv环境设置,同时修改著录格式中需要增加\verb| & |,如文件 bibstyletabthreecols.py 所示。
上述示例中文献表表格中的文献序号是单独的一列,是在bibmap.py中直接写的,若需要更复杂的设置,可以直接修改bibmap.py中的printbibliography函数。
\item[mapstyle] 用于指定参考文献数据修改样式,主要包括default,或者其它用户自定义的样式。设置default时调用宏包自带的bibmapdefault.py对bib文件进行修改。当指定用户自定义的样式时则给出样式文件的文件名,比如mapstyle=userdatamap,表示调用userdatamap.py 样式文件来修改bib文件。
\item[compcites] 标注标签压缩选项。设置为true后,会压缩标注标签。
\item[sortcites] 标注标签排序选项。一处引用多篇文献的标注标签中对各个文献进行排序。设置为true 后,会根据样式文件中的 citesorting 排序设置进行排序。
\item[backref] 反向超链接选项。设置为true后,会在文献表各个条目后按指定的格式输出各个文献引用的所在页。
\end{description}
选项的加载方式为:
\begin{example}{bibmap宏包加载}{usage:bibmap:load}
\begin{texlist}
\usepackage[citesytle=numeric,bibstyle=gb7714-2015,bibtable=true]{bibmap}
\end{texlist}
\end{example}
上述选项设置是全局的,文献引用的标准和文献表的格式也可以局部的调整和设置,包括一些命令和环境:
\begin{description}
\item[refsection] refsection 环境用于指定参考文献节。在该环境中的引用会作为单独的部分独自输出引用标注标签和文献表。使用refsection 环境可以实现分章文献表。
默认的全局的环境被任务refsection=0,所有其他 refsection 环境按顺序从1开始计数。
\item[\textbackslash citestyle]
\verb|\citestyle{}|、\verb|\setcitestyle{}|、\verb|\bibpunct{}| 可以用来局部设置修改文献引用的标注样式,比如在某一章中需要使用numeric样式,
那么可以设置\verb|\citestyle{numeric}|。这三个命令来源于natbib。
\item[\textbackslash bmpbibstyle]
\verb|\bmpbibstyle|可以用来局部设置文献的著录样式,比如在某一章中需要使用authoryear样式,
那么可以设置\verb|\bmpbibstyle{bibstyleauthoryear.py}|。或者其它用户自定义的样式,直接指定py文件即可。主要用于分章文献中。
\item[\textbackslash bmpbibtable]
\verb|\bmpbibtable| 用来局部设置文献表的表格环境,比如在某个文献节中需要单独使用表格文献表,则可以在改文献节中使用该命令指定表格环境所使用的宏包。
\item[\textbackslash bmpmapstyle]
\verb|\bmpmapstyle|可以用来局部设置bib文件修改的样式,比如在某一章中需要使用自定义的userdefinedmap.py 样式,
那么可以设置\verb|\bmpbibstyle{userdefinedmap.py}|。bibmap程序处理时将局部调用userdefinedmap.py进行数据修改。主要用于分章文献中。
\item[\textbackslash defbibentryset]
\verb|\defbibentryset|可以用来设置文献条目集,可以用于多语言对照的文献表。
比如:命令\verb|\defbibentryset{bilangyi2013}{易仕和2013--,Yi2013--}|,就是将两篇文献:易仕和2013--,Yi2013-- 设置为一个文献集bilangyi2013,当引用bilangyi2013的时候就会将集内两条文献的信息合并输出。两个文献之间的间隔符可以用
\verb|\def\entrysetpunct{\newline}| 重新定义。\verb|\defbibentryset|命令既可以在导言区使用也可以在正文使用。
\end{description}
\subsection{参考文献生成示例}
下面给出一个简单的示例:
\begin{example}{最小工作示例}{usage:eg:tex}
\begin{texlist}
\documentclass{article}
\usepackage{ctex}
\usepackage[citestyle=numeric,bibstyle=gb7714-2015]{bibmap}
\begin{filecontents}[force]{\jobname.bib}
@techreport{calkin,
author = {Calkin, D and Ager, A and Thompson, M},
title = {A Comparative Risk Assessment Framework for Wildland Fire
Management: the 2010 Cohesive Strategy Science Report},
number = {RMRS-GTR-262},
year = {2011},
pages = {8--9},
}
@incollection{buseck,
author = {Buseck, P R and Nord, Jr, G L and Veblen, D R},
title = {Subsolidus Phenomena in Pyroxenes},
booktitle = {Pyroxense},
address = {Washington, D.C.},
publisher = {Mineralogical Society of America},
year = {c1980},
pages = {117--211},
}
@book{wfz,
author = {王夫之},
title = {宋论},
edition = {刻本},
address = {金陵},
publisher = {湘乡曾国荃},
year = {1865(清同治四年)},
}
@periodical{zgtsgxh,
author = {中国图书馆学会},
title = {图书馆学通讯},
year = {1957/1990},
number = {1-4},
address = {北京},
publisher = {北京图书馆},
}
@archive{bjsrmzfbgt,
author = {北京市人民政府办公厅},
title = {关于转发北京市企业投资项目核准暂行实施办法的通知:
京政办发[2005]37号},
year = {2005},
date = {2005-07-12},
urldate = {2011-07-12},
url = {http://china.findlaw.cn/fagui/p_1/39934.html},
}
\end{filecontents}
\begin{document}
文献\cite{wfz,bjsrmzfbgt,zgtsgxh}\cite{calkin,buseck}
\bibliography{\jobname}
\end{document}
\end{texlist}
\end{example}
结果如图所示:
\begin{figure}[!htb]
\begin{tcolorbox}[left skip=0pt,right skip=0pt,%
width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,%
leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
\centering
\includegraphics[width=0.9\linewidth]{backendtest/egmwe.pdf}
\end{tcolorbox}
\caption{最小工作示例结果}\label{fig:usage:eg}
\end{figure}
更多示例见backendtest文件夹内:
egmwe.tex 展示了一个最小工作示例;
egcitations.tex 展示了标注的命令;
egmulticitesty.tex 展示了局部化的标注样式;
egchapterbib.tex 展示了分章文献的用法。
backendtest-lanparal 目录下的示例展示了双语文献表的用法。
backendtest-tabbib 目录下的示例展示了表格文献表的用法。
文献表条目的格式化操作,由指定的样式文件设置,设置的方法详见下一小节。
\subsection{参考文献格式化设置说明}
参考文献格式化工作主要由bibmap程序结合样式文件来实现。bibmap程序主要实现的功能有:
1) 根据样式文件输出格式化后的bbl文件,便于latex文档直接使用。
2) 转存格式化的参考文献表文本为文本文件和网页文件,便于在其它文档中直接使用。
3) 除了bibmap程序内部处理逻辑外,样式文件可以全面控制参考文献的格式化。
4) bibmap实现的内部处理: 根据选项进行排序,根据选项对姓名列表域、文本列表域、日期域、文本域、范围域格式化,根据选项对条目输出项进行组织和格式化。
%有时间进一步介绍内部处理逻辑的实现。
\subsubsection{样式文件的结构}
样式文件主要由几个字典参数构成,分别是:
\begin{description}
\item[formatoptions] 用于设置格式化的全局选项,所设选项必须是bibmap程序支持的选项,主要包括:
\begin{itemize}
\item "style":写bbl信息的设置选项,'authoryear','numeric'
\item "nameformat":'uppercase',\#姓名处理选项:uppercase,lowercase,given-family,family-given,pinyin
\item "giveninits":'space',\#使用名的缩写,space表示名见用空格分隔,dotspace用点加空格,dot用点,terse无分隔,false不使用缩写
\item "usesuffix":True,\#使用后缀名
\item "maxbibnames":3,\#
\item "minbibnames":3,\#
\item "morenames":True,\#
\item "maxbibitems":1,\#
\item "minbibitems":1,\#
\item "moreitems":False,\#
\item "date":'year',\#'日期处理选项':year,iso,等
\item "urldate":'iso',\#'日期处理选项':year,iso,等
\item "origdate":'year',\#'日期处理选项':year,iso,等
\item "eventdate":'year',\#'日期处理选项':year,iso,等
\item 'caseformat':'none',\#设计'none', 'sentencecase', 'titlecase', 'uppercase', 'lowercase','smallcaps'
\item 'numberformat':'ordinal',\#设计'ordinal','arabic'
\item "lanorder":['chinese','japanese','korean','english','french','russian'],\# 文种排序,指定语言全面的顺序['chinese','japanese','korean','english','french','russian'], 或'none'
\item 'sortascending':True,\#排序使用升序还是降序,默认是升序,设置为False则为降序
\item "sorting":['author','year','title'],\#排序,或者指定一个域列表比如['key', 'author', 'year', 'title'],'none'
\end{itemize}
\item[localstrings] 用于设置本地化字符串,可以随意设置,只需符合规范。
典型的设置方式为:
\begin{example}{简单的localstrings参数设置}{code:usage:localstrings}
\begin{pycode}
#本地化字符串
localstrings={
'andothers':{'english':'et al.','chinese':'等'},
'and':{'english':' and ','chinese':'和'},
'edition':{'english':' ed','chinese':'版'},#ed. 中的点不要,为方便标点处理
'in':{'english':'in: ','chinese':'见: '},
'nolocation':{'english':'[S.l.]','chinese':'[出版地不详]'},
'nopublisher':{'english':'[s.n.]','chinese':'[出版者不详]'},
'bytranslator':{'english':'trans by','chinese':'译'},
'volsn':{'english':'Vol.','chinese':'第'},
'volume':{'english':'','chinese':'卷'},
'numsn':{'english':'No.','chinese':'第'},
'number':{'english':'','chinese':'册'},
}
\end{pycode}
\end{example}
\item[localpuncts] 用于设置标点,可以随意设置,只需符合规范。
典型的设置方式为:
\begin{example}{简单的localpuncts参数设置}{code:usage:localpuncts}
\begin{pycode}
#标点
localpuncts={
'multinamedelim':', ',
'finalnamedelim':', ',
'andothorsdelim':', ',
'finalitemdelim':', ',
'multiitemdelim':', ',
'pagerangedelim':'-',
}
\end{pycode}
\end{example}
\item[replacestrings] 用于设置替换字符串,可以随意设置,只需符合规范。
典型的设置方式为:
\begin{example}{简单的replacestrings参数设置}{code:usage:replacestrings}
\begin{pycode}
#替换字符串
replacestrings={
'[出版地不详]: [出版者不详]':'[出版地不详 : 出版者不详]',
'[S.l.]: [s.n.]':'[S.l. : s.n.]',
'..':'.',
}
\end{pycode}
\end{example}
\item[typestrings] 用于设置类型和载体字符串,可以随意设置,只需符合规范。
典型的设置方式为:
\begin{example}{简单的typestrings参数设置}{code:usage:typestrings}
\begin{pycode}
#类型和载体字符串
typestrings={
'book':'[M]',
'inbook':'[M]',
'standard':'[S]',
'periodical':'[J]',
'article':'[J]',
'newspaper':'[N]',
'patent':'[P]',
'online':'[EB]',
'www':'[EB]',
'electronic':'[EB]',
'proceedings':'[C]',
'inproceedings':'[C]',
'conference':'[C]',
'collection':'[G]',
'incollection':'[G]',
'thesis':'[D]',
'mastersthesis':'[D]',
'phdthesis':'[D]',
'report':'[R]',
'techreport':'[R]',
'manual':'[A]',
'archive':'[A]',
'database':'[DB]',
'dataset':'[DS]',
'software':'[CP]',
'map':'[CM]',
'unpublished':'[Z]',
'misc':'[Z]',
}
\end{pycode}
\end{example}
\item[datatypeinfo] 用于将条目的域进行分类,6个类型已经由bibmap程序设定,每一类域都有自身的特定处理逻辑。类型中包含的域可以由用户自由设定。
典型的设置方式为:
\begin{example}{简单的datatypeinfo参数设置}{code:usage:datatypeinfo}
\begin{pycode}
#数据类型
datatypeinfo={
'namelist':['author','editor','translator','bookauthor'],
'literallist':['location','address','publisher','institution','organization','school','language','keywords'],
'literalfield':['title','journaltitle','journal','booktitle','subtitle','titleaddon','url','doi','edition','version',
'volume','number','endvolume','endnumber','type','note','labelnumber','series'],
'datefield':['date','enddate','year','endyear','urldate','origdate','eventdate','endurldate','endorigdate','endeventdate'],
'rangefield':['pages'],
'otherfield':['in','typeid','endpunct']#虚设的用于替换的域
}
\end{pycode}
\end{example}
\item[bibliographyenv] 用于设定文献表的环境。包括默认的文献表环境,以及表格式文献表的环境,如例\ref{code:biblio:env}所示。
\item[bibliographystyle] 用于设定条目的著录格式,用户可以自由设定。
一个条目类型作为一个字典项,项值内容则表示该条目的域的组织顺序及其内容格式,每个域的设置格式构成一个域格式字典,域格式字典中的项可以使用bibmap提供的项,以实现需要的格式,项值设置,可以使用前述的任何设置,包括全局选项同名的选项,用于局部化设置。
\begin{itemize}
\item "fieldsource", 用于设置当前输出项的域名
\item 'options',用于设置当前输出项的格式选项
\item 'prepunct',用于设置当前输出项前的标点
\item 'prepunctifnolastfield',用于设置当前输出项前的标点,仅在前一项不存在时输出
\item "prestring",用于设置当前输出项前的字符串
\item 'prestringifnumber',用于设置当前输出项前的字符串,仅当当前项为数字时输出
\item 'replstring',用于设置替换当前输出项前的字符串
\item "posstring",用于设置当前输出项后的字符串
\item 'posstringifnumber',用于设置当前输出项后的字符串,仅当当前项为数字时输出
\item "omitifnofield",用于忽略当前项,当该选项指定的域都不存在时,忽略当前项
\item "omitiffield",用于忽略当前项,当该选项指定的域只要一个存在,则忽略当前项
\item 'pospunct',用于设置当前输出项后的标点
\end{itemize}
\item[citationstyle] 用于设置所有引用命令的标注标签格式化。典型的设置如:
\begin{example}{典型的标注标签格式设置}{code:usage:citestyle}
\begin{pycode}
#数据类型
datatypeinfo={
'namelist':['author','editor','translator','bookauthor'],
'literallist':['location','address','publisher','institution','organization','school','language','keywords'],
'literalfield':['title','journaltitle','journal','booktitle','subtitle','titleaddon','url','doi','edition','version',
'volume','number','endvolume','endnumber','type','note','labelnumber','series'],
'datefield':['date','enddate','year','endyear','urldate','origdate','eventdate','endurldate','endorigdate','endeventdate'],
'rangefield':['pages'],
'otherfield':['in','typeid','endpunct']#虚设的用于替换的域
}
\end{pycode}
\end{example}
\end{description}
\subsubsection{样式文件的设置原理}
样式设置的核心在bibliographystyle参数,它设置了条目的域的顺序、域本身的格式、域前后的标点和字符串。所以如localstrings等其它参数都是为bibliographystyle参数服务的,也包括全局的选项。全局选项与局部选项的差别在于,它还在bibliographystyle没有设置局部选项的情况下使用。选项的优先级是bib文件中条目本身给出的选项优先于bibliographystyle设置中给出的选项,进一步优先于全局的选项。总的来说,格式设置选项分三级,第一级是bib文件中条目给出的选项,第二级是条目类型格式设置时给出的选项,第三级才是全局选项。
一个简单bibliographystyle参数设置如例\ref{code:usage:bibstyle}所示。
\begin{example}{简单的bibliographystyle参数设置}{code:usage:bibstyle}
\begin{pycode}
#条目的著录格式
bibliographystyle={
"misc":[
{"fieldsource":['author','editor','translator'],'options':{'nameformat':'uppercase'}},
{"fieldsource":['title'],'options':{'caseformat':'sentencecase'},'prepunct':". ",'prepunctifnolastfield':'','posstring':r"\allowbreak\typestring"},
{"fieldsource":['howpublished'],'prepunct':". "},
{"fieldsource":['location','address'],'prepunct':". "},
{"fieldsource":['institution','publisher'],'prepunct':": ",'prepunctifnolastfield':'. '},
{"fieldsource":['date','year'],'prepunct':", "},
{"fieldsource":['pages'],'prepunct':": "},
{"fieldsource":['urldate'],'prestring':"[","posstring":"]"},
{"fieldsource":['url'],'prepunct':r". ",'prestring':r'\newblock\url{','posstring':'}'},
{"fieldsource":['doi'],'prepunct':".",'prestring':r'\newblock DOI:\doi{','posstring':'}'},
{"fieldsource":['endpunct'],'replstring':"."}
],
"book":"misc",
"article":"misc",
"newspaper":"misc",
"inbook":"misc",
"inproceedings":"misc",
"incollection":"misc",
"proceedings":"misc",
"collection":"misc",
"standard":"misc",
"patent":"misc",
"online":"misc",
"www":"misc",
"electronic":"misc",
"report":"misc",
"techreport":"misc",
"periodical":"misc",
"thesis":"misc",
"manual":"misc",
"unpublished":"misc",
"database":"misc",
"dataset":"misc",
"software":"misc",
"map":"misc",
"archive":"misc",
"phdthesis":"misc",
"mastersthesis":"misc",
}
\end{pycode}
\end{example}
其中设置了条目类型"misc"的著录格式,"book"等其他所有类型复用misc类型的格式,复用的方式很简单,就是把misc作为其它类型的键值,比如:\verb|"book":"misc"|。
misc类型的格式中,
第一项,输出的备选域包括作者,编者,译者,方式为:
\verb|"fieldsource":['author','editor','translator']|,
因为这是姓名列表类型的域,给它指定了条目类型一级的选项:
\verb|'options':{'nameformat':'uppercase'}|,意为姓名采用全大写字母的格式。
第二项,输出的备选域为标题,方式为:
\verb|"fieldsource":['title']|;
因为这是文本类型的域,给它指定了给它指定了条目类型一级的选项:
\verb|'options':{'caseformat':'sentencecase'}|,意为标题采用句子模式的大小写格式;
另外设置了前置标点,前一项不存在时输出的标点,后置的字符串,方式为:
\verb|'prepunct':". ",'prepunctifnolastfield':'','posstring':r"\allowbreak\typestring"|
其中默认前置标点为一个点加空格,当前一项不存在时则标点变为空,后置一个字符串中加入了
\verb|\allowbreak|命令,以及一个\verb|\typestring|,\verb|\typestring|最后会根据typestrings参数的设置替换为对应的字符串,
若typestrings设置如例\ref{code:usage:typestrings}所示,那么\verb|\typestring|会替换为[z]。
第三项,输出的备选域为'howpublished',方式为:
\verb|"fieldsource":['howpublished']|;
仅设置了一个前置标点为点加空格:
\verb|'prepunct':". "|。
第四项,输出的备选域为地址,location和address都表示地址,有时会混用,所以两者都给出,方式为:
\verb|"fieldsource":['location','address']|;
仅设置了一个前置标点为点加空格:
\verb|'prepunct':". "|。
第五项,输出的备选域为出版者,institution和publisher都可以表示出版者,有时会混用,所以两者都给出,方式为:
\verb|"fieldsource":['institution','publisher']|;
设置了一个前置标点为冒号加一个空格,当前一项即地址项不存在时则输出标点为点加空格:
\verb|'prepunct':": ",'prepunctifnolastfield':'. '|。
第六项,输出的备选域为日期,'date'和'year'都可以表示日期,有时会混用,所以两者都给出,方式为:
\verb|"fieldsource":['date','year']|;
设置了一个前置标点为逗号加一个空格:
\verb|'prepunct':", "|。
第七项,输出的备选域为页码,方式为:
\verb|"fieldsource":['pages']|;
设置了一个前置标点为冒号加一个空格:
\verb|'prepunct':": "|。
第八项,输出的备选域为网址访问日期,方式为:
\verb|"fieldsource":['urldate']|;
设置了一个前、后字符串为方括号,目的是把访问日期用方括号包围起来:
\verb|'prestring':"[","posstring":"]"|。
第九项,输出的备选域为网址,方式为:
\verb|"fieldsource":['url']|;
设置了一个前置标点为点加空格,前置字符串为一个newblock命令和url命令和花括号,后置字符串为花括号。目的是把网址包围在url命令内:
\verb|'prepunct':r". ",'prestring':r'\newblock\url{','posstring':'}'|。
第十项,输出的备选域为doi,方式为:
\verb|"fieldsource":['doi']|;
设置了一个前置标点为点,前置字符串为一个newblock命令加DOI:和url命令和花括号,后置字符串为花括号。目的是把网址包围在url命令内:
\verb|'prepunct':".",'prestring':r'\newblock DOI:\doi{','posstring':'}'|。
最后一项是,虚设的域endpunct,目的就是用来做替换。这里将其替换为一个点。方式为:
\verb|{"fieldsource":['endpunct'],'replstring':"."}|。
例\ref{code:usage:bibstyle}给出的参考文献著录格式,仅对misc类型做了设置,其它类型全部复用该类型的格式。如果要对其它类型做更专门的设置,可以采用类似misc的方式进行设置。宏包提供的bibstylenumeric.py 样式文件就是精确实现国标要求的设置。
需要注意的是:bibliographystyle参数设置格式,主要设置各输出项所用的域,以及标签,前后添加的字符串等。而域内容本身的格式,则由bib文件中条目本身提供的选项、各输出项设置时给出的条目类型一级的选项,以及formatoptions参数给出的全局选项控制。格式在bibmap程序中实现,不同类型的域实现逻辑不同。主要分为:
'namelist'(姓名列表域,用于处理姓名列表,姓名成分解析和姓名格式化)、
'literallist'(文本列表域,用于处理文本列表,解析和格式化)、
'literalfield'(文本列表域,包含字符串、数字域等,有数字序号、字母大小写等处理)、
'datefield'(日期域,用于处理日期和日期范围,日期成分解析和日期格式化)、
'rangefield'(范围域,主要是页码域,处理页码间隔符)、
'otherfield'(虚设域用于替换)。
各个域的处理逻辑中用户可以控制的部分,都可以通过三个层级的选项来进行控制。
\section{bib文件修改的详细说明}\label{sec:bib:modify:intro}
\subsection{bib文件修改示例}
bib文件修改功能主要如下:
1) bib文件的读取和解析
2) bib文件的转存,包括从大的bib文件抽取引用的文献保存为一个小的bib文件,将bib文件的内容存储为json格式。
3) 参考文献条目的修改,包括条目类型的修改,条目内部的域的修改等,包括删除、变化、转换等等。
修改的逻辑是bibmap程序读取数据修改样式文件内的sourcemaps参数,这个sourcemaps参数与biblatex中sourcemap非常像,基本的逻辑也是一样的,只是把tex的写法转换成了python方便表示的写法,就是把biblatex用tex命令表示的\verb|\maps|、\verb|\map|和\verb|\step|转换为用json格式表示。sourcemaps参数的设置方法见下一节。
\subsection{bib文件修改设置说明}
\subsubsection{数据修改样式文件的结构}
数据修改样式文件是一个py文件,内部但要保存一个或多个sourcemaps参数,但要注意虽然可以存在多个sourcemaps,但后面的sourcemaps会覆盖前面的sourcemaps,也就是只有最后一个sourcemaps会起作用。
典型设置如例\ref{code:usage:mapstyle}所示,其中sourcemaps是一个列表参数,包含了所有map步骤,每个map也是一个列表,一个map就是对所有条目进行一次遍历修改。一个map列表中包含有任意数量的step(步骤),一个step是由一个key-val参数构成字典数据结构。数据的修改是由step步的key-val参数字典决定的。
简单来说,数据修改逻辑是这样的,bibmap程序读取sourcemaps参数后,开始遍历所有的map,
这一个map处理需要遍历所有的bib条目,对于每个条目,遍历当前map内的所有step步,step步的执行规则由step步内的参数以及处理结果确定。
\begin{example}{bib数据修改的处理逻辑}{code:usage:maplogic}
\begin{pycode}
for map in maps #遍历maps中的所有map
for entry in entries #对所有的条目均执行该map
for step in map #遍历map中的所有step
code for the step to modify the bib entry
\end{pycode}
\end{example}
例\ref{code:usage:mapstyle}给出了10次map的数据修改。
第一次修改,内部只有一个step步,目的是将ELECTRONIC类型转换为online类型:
\verb|{"typesource":"ELECTRONIC","typetarget":"online"}|。
其中使用了键typesource和typetarget,意为将类型为typesource值的条目,转换为typetarget值的类型。比如这里将ELECTRONIC类型条目转换为online条目。
第二次修改,内部只有一个step步,目的是将source域转换为url域:
\verb|{"fieldsource":"source","fieldtarget":"url"}|
其中使用了键fieldsource和fieldtarget,意为将条目中域名为fieldsource值的域,转换为名为fieldtarget值的域。比如这里将source域转换为url域。
第三次修改,内部只有一个step步,目的是将urldate域的信息“yyyy-m-d”转换为“yyyy-mm-dd”便于日期能够正常解析。
\verb|{"fieldsource":"urldate","match":r'(\d\d\d\d)\-(\d)\-(\d)',"replace":r'\1-0\2-0\3'}|
其中使用了键fieldsource、match、replace,意为对条目中域名为fieldsource值的域做匹配,当匹配到match键的值时,将匹配内容体会为replace键的值。这里的匹配和替换可以使用普通的字符串,也可以使用正则表达式,这里就是使用的正则表达式。但是要注意一旦涉及到已经存在的域内容的修改,都需要选项overwirte的支持,也就是要加上overwrite键。就是说,这次修改实际不会执行,而下一次的修改,由于overwrite存在才会执行。
第四次修改,基本同第三次修改,由于overwrite键设置为true,则修改会实际执行:
\verb|{"fieldsource":"date","match":r'(\d\d\d\d)\-(\d)\-(\d)',"replace":r'\1-0\2-0\3',"overwrite":True}|
第五次修改,类似于第二次修改,将refdate域转换为urldate域:
\verb|{"fieldsource":"refdate","fieldtarget":"urldate"}|
第六次修改,内部有2个step步,目的是为newspaper类型的条目,设置note域为news。
第一步为:
\verb|{"pertype":"newspaper"}|,是做了条目类型约束,pertype键表示只有其键值给出的条目类型才做修改。
第二步为:
\verb|{"fieldset":"note","fieldvalue":"news","overwrite":True}|
使用了键包括fieldset、fieldvalue、overwrite。fieldset表示对其值表示的域做修改,fieldvalue就是修改后的值,overwrite表示域有原内容的情况下做覆盖修改。若不该处overwrite,那么当note域原来就存在情况下,当前步不实际执行。
第七次修改,内部有2个step步,目的是设置edition域等于version。
第一步为:
\verb|{"fieldsource":"version","final":True}|
是做域查找,当条目中version存在时,并记录version的域值。final键的目的是,当条目中不存在version域时,本次map直接终止,即后面的step步不再执行。
第二步为:
\verb|{"fieldset":"edition","origfieldval":True}|
使用了键包括fieldset、origfieldval。fieldset去设置edition域,域的值为origfieldval表示的内容,即前面一步fieldsource查找并记录下的version域的值。origfieldval表示前面的最近一步fieldsource记录下的域值信息。
第八次修改,与第七次类似,目的是将entrykey域的内容设置给keywords域。
第九次修改,与第七次类型,目的是对于存在note域的情况,将其值添加到keywords。需要注意的是第二步中,使用了append键,目的是修改过程中,不是覆盖修改,而是做添加修改。overwrite键也需要给出,否则无法对已经存在的域做修改。
第二步设置为:
\verb|{"fieldset":"keywords","origfieldval":True,"overwrite":True,"append":True}|
第十次修改,内部由两个step步,目的是根据标题的字符编码范围确定标题的语言类型。
第一步:
\verb|{"fieldsource":"title","match":r'[\u2FF0-\u9FA5]',"final":True}|
目的是搜索fieldsource指出的title域,是否匹配match指出的正则表达式,当不能匹配时,根据final键,直接终止当前map,即第二步step不再处理。
第二步:
\verb|{"fieldset":"userd","fieldvalue":"chinese"}|
目的是,当前一步匹配成功,那么将当前条目的userd域设置为fieldvalue指出的值即chinese。
\begin{example}{典型的bib数据修改样式参数设置}{code:usage:mapstyle}
\begin{pycode}
#
#数据修改的设置
#
#
# 为数据map设置参数
# 选项的逻辑与biblatex基本一致,
# 差别包括:overwrite选项可以放到step步中表示
#[]=maps
#[[],[]]=map in maps
#[[{optionkey:optionval},{optionkey:optionval}],[]]=step in map in mpas
#注意python正则表达方式与perl的略有不同,比如unicode表示
#python用\xHH,\uHHHH,\UHHHHHHHH表示,而perl直接用\x{HHHH}表示。
sourcemaps=[#maps
[#map1:将ELECTRONIC类型转换为online类型
{"typesource":"ELECTRONIC","typetarget":"online"}#step1
],
[#map2:将source域转换为url域
{"fieldsource":"source","fieldtarget":"url"}#step1
],
[#map3:将urldate域的信息“yyyy-m-d”转换为“yyyy-mm-dd”,注意正则表达式直接写不用在外面套""
{"fieldsource":"urldate","match":r'(\d\d\d\d)\-(\d)\-(\d)',"replace":r'\1-0\2-0\3'}#step1
],
[#map4:将urldate域的信息“yyyy-m-d”转换为“yyyy-mm-dd”,注意正则表达式直接写不用在外面套""
{"fieldsource":"date","match":r'(\d\d\d\d)\-(\d)\-(\d)',"replace":r'\1-0\2-0\3',"overwrite":True}#step1
],
[#map5:将refdate域转换为urldate域
{"fieldsource":"refdate","fieldtarget":"urldate"}#step1
],
[#map6:对于newspaper类型,设置note为news
{"pertype":"newspaper"},#step1
{"fieldset":"note","fieldvalue":"news","overwrite":True}#step2
],
[#map7:设置edition域等于version
{"fieldsource":"version","final":True},#step1
{"fieldset":"edition","origfieldval":True}#step2
],
[#map8:设置entrykey域设置给keywords
{"fieldsource":"entrykey"},#step1
{"fieldset":"keywords","origfieldval":True}#step2
],
[#map9:对于存在note域的情况,将其值添加到keywords
{"fieldsource":"note","final":True},#step1
{"fieldset":"keywords","origfieldval":True,"overwrite":True,"append":True}#step2
],
[#map10:根据标题的字符编码范围确定标题的语言类型
{"fieldsource":"title","match":r'[\u2FF0-\u9FA5]',"final":True},#step1
{"fieldset":"userd","fieldvalue":"chinese"}#step2
],
]
\end{pycode}
\end{example}
例\ref{code:usage:mapstyle}大体上给出了数据修改参数设置的方法,下一节详细介绍一下bibmap支持的键(选项)。
\subsubsection{数据修改支持的选项}
bibmap数据修改所用的选项,即各step步中的key值,完全借鉴biblatex中的设计,其意义也是一致的,根据常用程度做了取舍,并增加了部分选项如fieldfunction,实现的选项包括:
\begin{itemize}
\item typesource 对应的值为 entrytype名
\item typetarget 对应的值为 entrytype名
\item fieldsource 对应的值为 entryfield名
\item fieldtarget 对应的值为 entryfield名
\item match 对应的值为 regexp(正则表达式)
\item notmatch 对应的值为 regexp(正则表达式)
\item replace 对应的值为 regexp(正则表达式)
\item notfield 对应的值为 entryfield名
\item final 对应的值为 true和false(bool值)
\item origfieldval 对应的值为 true, false(bool值)
\item append 对应的值为 true, false(bool值)
\item pertype 对应的值为 entrytype名即条目类型
\item pernottype 对应的值为 entrytype名即条目类型
\item fieldset 对应的值为 entryfield名
\item fieldvalue 对应的值为 string(字符串)
\item null 对应的值为 true, false(bool值)
\item origfield 对应的值为 true, false(bool值)
\item origentrytype 对应的值为 true, false(bool值)
\item origfieldval 对应的值为 true, false(bool值)
\item fieldfunction 对应的值为用户指定的函数名,目前提供的函数包括:
'sethzpinyin', 'sethzstroke', 'setsentencecase', 'settitlecase', 'setuppercase', 'setlowercase', 'setsmallcaps', 'setalltitlecase'。 在域内容处理时,
当给出'fieldfunction':'sethzpinyin' 选项时,程序会调用sethzpinyin 函数以域内容为参数,输出其对应的拼音。'sethzstroke'设置用于排序的笔画顺序字符串。其它的函数用于设置字符串字母的大小写格式。
\end{itemize}
其中绝大部分在前一节已经讲过,未介绍的包括notmatch与match类型,只是搜索的是不匹配的情况。
notfield是做约束,当notfield指出的域不存在时,才执行操作,通常和final联用。
pernottype类似于pertype,也是做约束,当不是pernottype指定的条目类型时,才执行操作。
null表示域值不存在,即用于删除当前域。origfield用于标签前面step步中最后一次fieldsource搜索并记录下的域的域名,而origfieldval则是域值。origentrytype则是前面最近一次typesource搜索成功情况下记录下来的条目类型。
同时为方便处理,增加了如下选项:
\begin{itemize}
\item extract 利用正则表达式提取匹配的组的内容,类似于string.match(...).group(1),仅取第一个组的内容。extract是新的命名,本来用group可能更接近python。但为了与match等更统一,所以用了一个新命名。extract后面同样跟着正则表达式,但必须有组符号()用于提取组内容。注意:extract提取的是字符串,所以后续用于比较的也是字符串,年份数字构成的字符串也是可以做比较的。
\item in 相比 match 更高层,也更直接。直接判断前面获取的值在in后面跟着的列表内。
\item notin 与 in 相反。直接判断前面获取的值不在in后面跟着的列表内。
\item inrange 利用大于等于、小于等于直接判断前面获取的值在inrange后面跟着的min和max值范围内。
\item notinrange 与inrange相反。利用大于等于、小于等于直接判断前面获取的值不在inrange后面跟着的min 和max 值范围内。
\end{itemize}
未实现的选项包括:
\begin{itemize}
\item foreach 选项意义不大,因为这只是在代码层的处理,且还需要在后续利用专门的正则取值,不如直接添加代码来得方便。
\item entryclone=?clonekey?
\item entrynew=?entrynewkey?
\item entrynewtype=?string?
\item entrytarget=?string?
\item entrynocite=true, false default: false
\item entrynull=true, false default: false
\item matchi=?regexp?
\item notmatchi=?regexp?
\end{itemize}
未实现的主要是条目整体复制和处理相关的内容,以及区分字符大小写的正则匹配。
\section{bibmap程序命令行用法}
\subsection{bibmap程序输入参数}
bibmap.py或bibmap.exe
filename 单个输入文件的文件名,可带后缀名如bib或aux,无后缀名时默认为辅助文件.aux
[-h] 输出帮助
[-a AUXFILE] 辅助文件的文件名,可带后缀名.aux,如果filename已经设置aux文件则无效
[-b BIBFILE] 文献数据库文件名,可带后缀名.bib,如果filename已经设置bib文件则无效
[-s STYFILE] 设置文献样式文件的文件名,可带后缀名.py,不给出则使用默认样式文件
[-m MAPFILE] 数据库修改设置文件文件名,可带后缀名.py,不给出则使用默认设置文件
\verb|[--addpinyin]| 给出该选项则将为每个文献条目增加带有拼音的key域。
\verb|[--nofmt]| 给出该选项则不做格式化输出
\verb|[--nobdm]| 给出该选项则不做bib数据修改
其中涉及到三种文件:
一是aux文件,如果是要得到格式化的文献表,那么这是最重要的文件,由tex编译生成,当使用bibmap宏包时,可以通过宏包选项设置样式文件,而bib文件通过bibliography命令也会在该文件中指出。
二是bib文件,这是参考文献数据源文件,可以由通过bibliography命令在aux文件内给出,也可以直接利用选项给出。
三是py文件,这是用于设置数据修改和文献格式化的文件,是python代码。宏包自带的样式,通常bibmap*.py是用于bib文件数据修改的,而bibstyle*.py是用于格式化文献表的。
\subsection{bib文件数据修改}
直接在命令行输入脚本及其参数:
\begin{example}{bib文件数据修改命令-默认情况}{code:bib:modify}
\begin{pycode}
python bibmap.py biblatex-map-test.bib
或
bibmap.exe biblatex-map-test.bib
\end{pycode}
\end{example}
此时,bibmap读取biblatex-map-test.bib文件,并根据默认的数据修改设置bibmapdefault.py做修改,此时还会自动的做格式化后的文献表输出。
\begin{example}{bib文件数据修改命令-不输出格式化文献表}{code:bib:modifya}
\begin{pycode}
python bibmap.py biblatex-map-test.bib --nofmt
或
bibmap.exe biblatex-map-test.bib --nofmt
\end{pycode}
\end{example}
此时不再输出格式化后的文献表。
\begin{example}{bib文件数据修改命令-指定数据修改设置}{code:bib:modifyb}
\begin{pycode}
python bibmap.py biblatex-map-test.bib --nofmt -m bibmapaddkw.py
或
bibmap.exe biblatex-map-test.bib --nofmt -m bibmapaddkw.py
\end{pycode}
\end{example}
此时使用指定的数据修改设置bibmapaddkw.py代替默认的bibmapdefault.py对数据库bib文件做修改。
又比如给中文的参考文献条目增加带有拼音的key域,可以采用如下方式:
\begin{example}{bib文件数据修改命令-增加拼音信息的key域}{code:bib:addpinyin}
\begin{pycode}
bibmap.exe biblatex-map-test.bib --nofmt --addpinyin
或
bibmap.exe biblatex-map-test.bib --nofmt -m bibmapaddpinyinkey.py
或