Skip to content

怎么生成双语对照的参考文献表?

[email protected] edited this page Apr 9, 2018 · 2 revisions

参考文献的双语文献要求,可以通过条目集类型(set)/或者条目关联(related)来解决。

利用条目集类型满足双语文献要求

使用条目集类型(set)时,有静态和动态两种方法:

动态方法使用更为方便,在写文档时候,直接利用defbibentryset设置双语文献的set,然后引用set的bibtex键。比如:

\defbibentryset{bilangyi2013}{易仕和2013--,Yi2013--}
专著,双语文献引用\cite{bilangyi2013}

需要注意的是:因为set条目类型除了子条目关键词信息外,并无其他信息,因此它的标注标签通常会是空的。这个问题目前的解决方法是设置一个指定格式和内容中间无空格无英文逗号的关键字,用它来作为标签,这个问题与biblatex版本有关,v3.7及之前版本没有这个问题,因为set中还带有第一个子条目的信息,但v3.8及以上版本就不行了。比如:

\defbibentryset{易仕和,等,2013}{易仕和2013--,Yi2013--}
专著,双语文献引用\cite{易仕和,等,2013}

注意到“易仕和,等,2013”中的逗号是中文全角逗号,这样使得“易仕和,等,2013”以一个整体字符串当作关键字,而不会被分开解析。但是这种解决方案中的中文全角逗号与其它标签的英文逗号的差异使得该问题并没有完美解决。对于v3.8及以上版本,可以利用后面介绍的关联(related)方法来解决,或者也可以用静态方法手动添加标签来解决。

静态方法是在bib源文件中给出条目集(set)并使用biber后端进行解析,条目的域信息采用如下方法定义:

@Set{set1,
entryset = {key1,key2,key3},
}
%如果要达到上例动态设置set一样的结果,在bib文件中静态设置set条目如下:
@Set{bilangyi2013,
entryset = {易仕和2013--,Yi2013--},
}

需要注意,使用静态条目集时,如果仅采用上述这般简单设置,中文排序会出现问题,条目集会出现在文献表末尾,这是因为条目集没有设置userb域用于排序,而通常的条目都是利用动态数据修改设置了userb域,在biber运行中因为要解析文献集,所以无法对userb域进行处理。但动态方法没有这一问题,因为其解析过程直接会利用第一个子条目的排序信息。静态方法的这个问题可以在set条目中手动设置userb域来修正。此外,对于v3.8以上版本的biblatex,无论动态方法还是静态方法,条目集不复制第一个子条目信息,因此引用时也无法生成标注标签,这就是前面介绍动态方法时讨论过的问题,该问题也可以通过在set条目中手动设置label域来解决。比如:

%在bib文件中静态设置set条目如下,其中:
%手动设置userb域用于解决排序问题
%手动设置label域用于解决标注标签问题
@Set{bilangyi2013,
entryset = {易仕和2013--,Yi2013--},
label={易仕和, 等, 2013},
userb={cn}
}

还要注意的是,动态set条目集等价于使用nocite命令,因此只要定义了动态条目集的文献都会出现在文献表中,因此如果不引用相应的文献,那么就不应该对其定义动态条目集。

利用条目关联满足双语文献要求

除上述给出的条目集方案外,关联条目方法则是另一种可行方案,该方案的讨论可以见“Again about the @ set label for authoryear style”。该方案同样也有静态和动态两种方法,静态就是修改bib文件内容,动态则是在源文档中做设置。

静态方法很简单,bib文件中条目设置如下例所示,它能解决双语同时显示的问题,也能解决排序和标注标签问题,唯一的问题在于修改了bib文件后当不需要双语文献时,它还需要改回来,这会带来不便,因此可以考虑下面的动态方法,但要注意动态方法需要利用多个DeclareStyleSourcemap,因此该方法只适用于biblatex3.7及以上版本。

%在bib文件中静态设置条目如下,其中:
%易仕和2013--条目中增加了related域用于关联其对应的英文条目Yi2013--
@Book{易仕和2013--,
  Title                    = {超声速和高超声速喷管设计},
  Address                  = {北京},
  Author                   = {易仕和 and 赵玉新 and 何霖 and 张敏莉},
  Publisher                = {国防工业出版社},
  Year                     = {2013}
  related                  = {Yi2013--}
}
@Book{Yi2013--,
  Title                    = {Supersonic and hypersonic nozzle design},
  Address                  = {BeiJing},
  Author                   = {Yi, S H and Zhao, Y X and He, L and Zhang, M L},
  Publisher                = {National Defense Industry Press},
  Year                     = {2013}
}

动态方法利用动态数据修改自动添加related域,避免对bib文件做直接修改。本样式中对该过程进行了封装,定义一个新的命令defdoublelangentry,例如:

\defdoublelangentry{易仕和2013--}{Yi2013--}

使用该命令后,可以引用主条目“易仕和2013--”生成双语文献。但要注意由于DeclareStyleSourcemap命令只能在导言区中使用,因此defdoublelangentry命令也只能出现在导言区中,这也是相比条目集动态方法的唯一遗憾。