hushidong/biblatex-gb7714-2015

作者年制标注以年份排序,文献表以作者排序(citation的顺序和bibliography的顺序如何不关联)

sphcn opened this issue · 16 comments

sphcn commented

为什么加sortcase没有用?加了sortcase, bibliography的顺序依然跟着citation一起变?

你要实现什么功能,能再描述一下么,就看你的提问不知道如何下手?

sphcn commented

嗯,抱歉啊,是我描述得不够清楚。

我是想实现”多个citation内部按year-name排序“,后面的”参考文献列表按name-year-title排序“。
我先用sorting设置了一下,发现两个都会变,后面查了文档说sorting是sortcase管理“Whether or not to sort the bibliography and the list of shorthands case-sensitively”,可改了也不起作用。

还是新手,不知我理解的对不对,希望作者能给予解答,非常感谢。

我现在用手机,只能给你简单回答。

文献表要按name year title,那么加选项sorting=nyt

引用标签中的顺序,默认按给出的顺序,加sortcites=true后会按文献表的顺序给出。

你说的多个citation内部按year name顺序排。我还不是很明白,能给个例子么?

sphcn commented

谢谢您的回复,我想实现的是\cite{NameA2012, NameB2013, NameC2014}时,cite内部的(NameA, 2012; NameB, 2013; NameC, 2014) 三篇文献在正文引用中自动按year name排序,而后面的文献列表按name year title排序。现在我用了一个奇怪的组合实现了这个结果,我将biblatex的参数设置为:

sorting = nyt, sortcites=false, sortcase=false,
uniquename=false, uniquelist=false, maxcitenames=1,

并将gb7714-2015ay.cbx的\RequireCitationStyle{authoryear}修改为:

\RequireCitationStyle{authoryear-comp}

且在使用\cite{}时,按引用文献的发表年代手动调整了先后顺序。
这一组合基本实现了我想要的效果,但是对于引文关键字重名的文献,比如(NameA, 2012; NameB, 2012; NameA, 2014)的情况,NameA还不能自动合并,但也可以用了吧。
不知道我说清楚了没有,对您的回复和贡献再次表示感谢!

你这个方式很神奇,请问你用的样式是怎么设置的?

sphcn commented

貌似把:

sorting = nyt, sortcites=false, sortcase=false,

去掉,把 \RequireCitationStyle{authoryear-comp} 也换回

\RequireCitationStyle{authoryear}

也行,效果跟我想要的一样。尴尬了,抱歉打扰。

你的style怎么设的?

加载biblatex的这行的完整代码给出来看一下?

sphcn commented

全部设置是

\usepackage[backend=biber, isbn=false, hyperref=true,
bibstyle=gb7714-2015ay, citestyle=gb7714-2015ay,
gbnamefmt=lowercase, natbib=true, gbnoauthor=true,
uniquename=false, uniquelist=false, maxcitenames=1,
url=false, gbtype=false, gbpub=true
]{biblatex}

除了(NameA, 2012; NameB, 2012; NameA, 2014)中的NameA不能自动合并,其他都可以

你把citestyle设为authoryear-comp就可以合并了。

你这是什么期刊的要求啊,挺复杂的?

sphcn commented

让citestyle=authoryear-comp的话,gb7714-2015ay.cbx文件里的设置就没有了。

另外,如果把gb7714-2015ay.cbx里的\RequireCitationStyle{authoryear}改为 \RequireCitationStyle{authoryear-comp} 的话,会引入authoryear-comp的默认设置sortcites=true,而这个设置是说citation的顺序要和bibliography context的sorting保持一致。这样,一用authoryear-comp,citation里的顺序又变成bibliography的默认顺序name-year-title,所以不能用。

所以只能自己写好顺序,也不好合并。

我是在写博士论文啊,以前都用的word和endnote,现在公式、图和文献都太多了,所以用latex。

谢谢您的帮助啊!Thanks♪(・ω・)ノ

sphcn commented

另外,我把gb7714-2015ay.bbx文件里"% 修改作者数量超过限定值,做省略时的处理格式“下面的两个”{\finalandcomma}“去掉了一个,把"\defversion{3.8}{dateextra}{"里的

\DeclareDelimFormat[textcite]{nameyeardelim}{\addcomma\space}

改成了

\DeclareDelimFormat[textcite]{nameyeardelim}{\space}

好让natbib里的\citet{}能用,效果是把Chen, et al., (2012)改成了Chen et al. (2012)。
同时\cite{}的效果也由(Chen, et al., 2012)变成了(Chen et al., 2012)。

我觉得都可以接受,这样用citet的时候也更方便一些。

你的问题我明白了,主要是文献表按nyt排,标注用ynt排,但有相同作者又要合并。要实现标签自动排序必须要用sortcites=true,但一旦排序相同作者不同年份的文献就不能排在一起,也就不能压缩了,这里是个矛盾没有办法解决。

现在你有两种方式可以采用,

一是全自动排序,
宏包加载时使用
gb7714-2015ay,sortcites,sorting=ynt

然后在文献打印前加
\newrefcontext[sorting=nyt]

这种方式自动排序但没有合并。

二,实现合并,但标注中按年份手动排,且相同作者放一起。
这种方式是把7714-2015ay.cbx中的authoryear换成comp,然后加载时加上sortcites=false
这种方式,能达到要求,但是要手动排序。

sphcn commented

试了一下,两种方式都对,非常感谢!

方法一我这里打印文献变成了英文在前。现在应该可以用

\usepackage[backend = biber, style = gb7714-2015ay, doi=false, url=false, sorting=ynt]{biblatex}

....
\newrefcontext[sorting=gb7714-2015]
\printbibliography[heading = bibintoc, title = {参考文献}]