hushidong / biblatex-gb7714-2015

A biblatex implementation of the GB/T7714-2015 bibliography style || GB/T 7714-2015 参考文献著录和标注的biblatex样式包
771 stars 84 forks source link

用法:中英文混排时标注标签根据文献语言显示显示“等”与“et al.”和中英文标点 #150

Open leeyupeng119 opened 1 year ago

leeyupeng119 commented 1 year ago

通过学习[https://blog.csdn.net/xenonhu/article/details/124686522]()以及参考这个问题[https://github.com/hushidong/biblatex-gb7714-2015/issues/69](https://github.com/hushidong/biblatex-gb7714-2015/issues/69)下的相关讨论,已经对不同标点的使用有了初步的了解

但上面的修改都是整体的修改,即是针对gbcitelocalcase不同情况下的整体应用,而在gbcitelocalcase=0时包括多种语言(这里主要指中、英两种语种的混排),而本人想实现的功能是,在gbcitelocalcase=0的条件下,类似目前biblatex-gb7714-2015包针对中英文献提供的andincite、andothersincite 、andincitecn 、 andothersincitecn接口,使nameyeardelim(作者和年份之间的分隔符,一般为逗号)能根据每个文献的语种而采用不同的nameyeardelim(中文文献用",",英文文献用”,“),

下面是最终想要实现的效果: image

谢谢。

hushidong commented 1 year ago

不好意思,这几天比较忙,才看到问题,明天有空看一下。

hushidong commented 1 year ago

简单点可以采用下面的方式来处理:

\documentclass{article}
\usepackage{ctex}
\usepackage[backend=biber,style=gb7714-2015ay]{biblatex}

\DeclareDelimFormat[cite,parencite,pagescite]{nameyeardelim}{
\iffieldequalstr{userf}{chinese}{\unspace,}{\addcomma\addspace}%
}
\DeclareDelimFormat[textcite]{nameyeardelim}{
\iffieldequalstr{userf}{chinese}{\unspace,}{\addcomma\addspace}%
}

\DefineBibliographyStrings{english}{
    andothersincitecn={\unspace 等},%将标注中的分开,便于与文献表中的区分
}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}

@Inproceedings{Firoozbakhsh2003-473-477,
  Title                    = {Analysis of IEEE 802.11a interference on UWB systems},
  Address                  = {Oulu, Finland},
  Author                   = {Firoozbakhsh, B. and Pratt,T. G. and Jayant,N.},
  Booktitle                = {Proc. of IEEE Conference on Ultrawideband Systems and Technologies (UWBST)},
  Pages                    = {473-477},
  Year                     = {2003}
}

@Book{郭文彬2006--,
  Title                    = {通信原理--基于Matlab的计算机仿真},
  Address                  = {北京},
  Author                   = {郭文彬 and 桑林},
  Publisher                = {北京邮电大学出版社},
  Year                     = {2006}
}

@Manual{吴凌云2007--,
  Title                    = {CTEX FAQ},
  Author                   = {吴凌云},
  Version                  = {version 0.4},
  Month                    = {1},
  Subtitle                 = {常见问题集},
  Year                     = {2007}
}

@Book{蔡敏2006--,
  Title                    = {UML基础和Rose建模教程},
  Address                  = {北京},
  Author                   = {蔡敏 and 徐慧慧 and 黄柄强},
  Publisher                = {人民邮电出版社},
  Year                     = {2006},
  Month                    = {1}
}

\end{filecontents}
\addbibresource[location=local]{\jobname.bib}

\begin{document}

内容\cite{Firoozbakhsh2003-473-477} 

内容\cite{蔡敏2006--}

内容\cite{郭文彬2006--}

内容\cite{吴凌云2007--}

\textcite{Firoozbakhsh2003-473-477}

\textcite{蔡敏2006--}

\printbibliography
\end{document} 

结果为: 图片

leeyupeng119 commented 1 year ago

非常感谢您的回复,感觉主体功能已经完成了。只有一个小问题:就是当采用author (year)引用的时候,作者里的et al. (或等)后一般是不加逗号的,怎样进一步修改能把这个逗号去除?多谢了。 image

hushidong commented 1 year ago

注销点这一段即可: 比如:

%\DeclareDelimFormat[textcite]{nameyeardelim}{
%\iffieldequalstr{userf}{chinese}{\unspace,}{\addcomma\addspace}%
%}

结果为: 图片

leeyupeng119 commented 1 year ago

可以了,非常感谢。祝元旦快乐!

earthmoon commented 1 year ago

楼主您好。我使用的是武汉大学的latex模板。我想实现以下功能

  1. 文献引用括号为,武大的模板默认是英文括号
  2. 中文文献采用中文逗号,英文文献采用英文逗号加空格

虽然你的问题和回复有答案,但是我看不懂,我更不知道该怎么在武汉大学的模板中修改。您可以指导我下吗?

谢谢!

hushidong commented 1 year ago

见最新的文档

earthmoon commented 1 year ago

见最新的文档

可以说下页码吗?谢谢。

hushidong commented 1 year ago

见最新的文档中,标注标签局部调整一节。

earthmoon commented 1 year ago

标注标签

里面说了可以改括号,但是似乎没有说改中文、英文括号之类的。

我看到你最新的宏包在文字和标识符之间有个空格,感觉舒服一些。比如 期刊名 [J],但是为什么我更新了全部宏包,重新生成参考文献,却没有这个空格呢?

hushidong commented 1 year ago

图片

hushidong commented 1 year ago

标注标签

里面说了可以改括号,但是似乎没有说改中文、英文括号之类的。

我看到你最新的宏包在文字和标识符之间有个空格,感觉舒服一些。比如 期刊名 [J],但是为什么我更新了全部宏包,重新生成参考文献,却没有这个空格呢?

你有新问题可以新开讨论或者issue.

默认是没有空格的。

earthmoon commented 1 year ago

标注标签

里面说了可以改括号,但是似乎没有说改中文、英文括号之类的。 我看到你最新的宏包在文字和标识符之间有个空格,感觉舒服一些。比如 期刊名 [J],但是为什么我更新了全部宏包,重新生成参考文献,却没有这个空格呢?

你有新问题可以新开讨论或者issue.

默认是没有空格的。

您好。比如在武汉大学的模板中,怎么改呢?好像没有设置参数的地方。我见过一种方案,不过不是LaTeX中看到的:文内引用,英文文献以英文括号、英文逗号;中文文献以中文括号、中文逗号;英文文献的英文括号前面应该有一个空格,目前武大的模板没有这个空格。文末参考文献,中文文献使用中文符号,英文文献使用英文符号。我个人感觉这一方案最为理想。

sikouhjw commented 1 year ago

您好。比如在武汉大学的模板中,怎么改呢?好像没有设置参数的地方。

只要是加了 biblatex-gb7714-2015 的,都是一样的改法

earthmoon commented 1 year ago

您好。比如在武汉大学的模板中,怎么改呢?好像没有设置参数的地方。

只要是加了 biblatex-gb7714-2015 的,都是一样的改法

比如在主.tex中,涉及biblatex的为bib-backend = biblatex,,在cls文件中,更复杂。

hushidong commented 1 year ago

您好。比如在武汉大学的模板中,怎么改呢?好像没有设置参数的地方。

只要是加了 biblatex-gb7714-2015 的,都是一样的改法

比如在主.tex中,涉及biblatex的为bib-backend = biblatex,,在cls文件中,更复杂。

你问一下模板的维护者,如果要修改biblatex的设置或宏,怎么传进去?

至于英文的用英文括号和标点,中文的中文括号和标点,可以加上如下代码:

\renewrobustcmd{\mkbibleftborder}
{\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{(}{(}%
\or (\or (\fi}%
\renewrobustcmd{\mkbibrightborder}
{\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{)}{)}%
\or )\or )\fi}%
\renewcommand*{\multicitedelim}
{\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{;}{\addsemicolon\addspace}%
\or ;\or\addsemicolon\addspace\fi}%;
\renewcommand*{\compcitedelim}
{\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}%
\or ,\or\addcomma\space\fi}
\renewcommand{\compextradelim}
{\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}%
\or ,\or\addcomma\space\fi}
\DeclareDelimFormat[cite,parencite,pagescite,citep]{nameyeardelim}
{\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}%
\or ,\or\addcomma\space\fi}
\DeclareDelimFormat[textcite,authornumcite,citet]{nameyeardelim}
{\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}%
\or ,\or\addcomma\space\fi}
\DeclareDelimFormat[cite,parencite,pagescite,citep]{andothersdelim}
{\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}%
\or ,\or\addcomma\space\fi}
\DeclareDelimFormat[textcite,authornumcite,citet]{andothersdelim}
{\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}%
\or ,\or\addcomma\space\fi}
earthmoon commented 1 year ago

您好。比如在武汉大学的模板中,怎么改呢?好像没有设置参数的地方。

只要是加了 biblatex-gb7714-2015 的,都是一样的改法

比如在主.tex中,涉及biblatex的为bib-backend = biblatex,,在cls文件中,更复杂。

你问一下模板的维护者,如果要修改biblatex的设置或宏,怎么传进去?

至于英文的用英文括号和标点,中文的中文括号和标点,可以加上如下代码:

\renewrobustcmd{\mkbibleftborder}
{\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{(}{(}%
\or (\or (\fi}%
\renewrobustcmd{\mkbibrightborder}
{\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{)}{)}%
\or )\or )\fi}%
\renewcommand*{\multicitedelim}
{\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{;}{\addsemicolon\addspace}%
\or ;\or\addsemicolon\addspace\fi}%;
\renewcommand*{\compcitedelim}
{\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}%
\or ,\or\addcomma\space\fi}
\renewcommand{\compextradelim}
{\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}%
\or ,\or\addcomma\space\fi}
\DeclareDelimFormat[cite,parencite,pagescite,citep]{nameyeardelim}
{\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}%
\or ,\or\addcomma\space\fi}
\DeclareDelimFormat[textcite,authornumcite,citet]{nameyeardelim}
{\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}%
\or ,\or\addcomma\space\fi}
\DeclareDelimFormat[cite,parencite,pagescite,citep]{andothersdelim}
{\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}%
\or ,\or\addcomma\space\fi}
\DeclareDelimFormat[textcite,authornumcite,citet]{andothersdelim}
{\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}%
\or ,\or\addcomma\space\fi}

这又两个小问题:

  1. 同时引用中英文文献,由于中文文献在前,左边为中文括号,英文文献在后,右边就是英文括号了。这样就不对称了,因此在这种情况下,可以改成全部为中文括号吗?
  2. 当使用\citet{}命令时,中文后接英文文献和英文后接英文文献时,中间缺少空格,可以自动加上去不。

谢谢

hushidong commented 1 year ago
  1. (a)不要使用上述代码中的前两个定义,设置选项gbcitelabel=parensqj,全部括号就是全角的。

(b) 使用上述代码,目前没有很好的判断同时引用多个文献存在中英文的情况,这其实也没有必要去做的,你可以使用其他方式来实现你的格式要求的。比如括号自己写,引用命令使用citeauthor等方式。

  1. 没有太明白你的意思,不知道你指的是下面哪中情况
    文献 \citet{蔡敏2006--,Miroslav2004--,赵学功2001--}\par
    paragraph \citet{Miroslav2004--,赵学功2001--}\par
    文献 \citet{蔡敏2006--} \citet{Miroslav2004--} \citet{赵学功2001--}\par

通常你自己手动添加就可以了。

hushidong commented 1 year ago

使用上述代码在一个引用命令中引用多篇文献时,特别是中英文都有时,容易出现问题。也许能够根据特定的目标实现特定的情况。

但这没有意义,国标之所以规定全部使用半角标点,就是可以避免这些事情,只要标准统一,按标准来就可以,至于美观与否完全是见仁见智和习惯问题,没有必要太纠结。

earthmoon commented 1 year ago

问题。也许能够根据特定的目标实现特定的情况。

但这没有意义,国标之所以规定全部使用半角标点,就是可以避免这些事情,只要标准统一,按标准来就可以,至于美观与否完全是见仁见智和习惯问题,没有必要太纠结。

按标准来,是这样的。我是一次看到Zotero的双语国标的csl文件时,当使用这个csl文件进行排版,文献中的中英文符号进行了区分,文末参考文献没有进行中英文符号的区分。只是感觉很新颖,觉得是一个值得关注的技术点。就像Zotero官方说,他们很受开发者关注的一个技术,是一个很不受使用者关注的技术,就是用Word编辑器编写文档时,将文献识别域(我粗略描述,不准确)以文字的方式写入文档,再通过Zotero软件导入该Word,文献自动生成转化。使用意义目前不大,但是这个技术方案显然有一定特殊的适用性。如果能在实用性的基础性,以技术性为指导,应该会让工作具有前沿性。

earthmoon commented 1 year ago
  1. (a)不要使用上述代码中的前两个定义,设置选项gbcitelabel=parensqj,全部括号就是全角的。

(b) 使用上述代码,目前没有很好的判断同时引用多个文献存在中英文的情况,这其实也没有必要去做的,你可以使用其他方式来实现你的格式要求的。比如括号自己写,引用命令使用citeauthor等方式。

  1. 没有太明白你的意思,不知道你指的是下面哪中情况
文献 \citet{蔡敏2006--,Miroslav2004--,赵学功2001--}\par
paragraph \citet{Miroslav2004--,赵学功2001--}\par
文献 \citet{蔡敏2006--} \citet{Miroslav2004--} \citet{赵学功2001--}\par

通常你自己手动添加就可以了。

比如,这段代码:

\documentclass{article}
\usepackage{ctex}
\usepackage[backend=biber,style=gb7714-2015ay]{biblatex}

\DeclareDelimFormat[cite,parencite,pagescite]{nameyeardelim}{
\iffieldequalstr{userf}{chinese}{\unspace,}{\addcomma\addspace}%
}
%\DeclareDelimFormat[textcite]{nameyeardelim}{
%\iffieldequalstr{userf}{chinese}{\unspace,}{\addcomma\addspace}%
%}

\DefineBibliographyStrings{english}{
    andothersincitecn={\unspace 等},%将标注中的分开,便于与文献表中的区分
}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}

@Inproceedings{Firoozbakhsh2003-473-477,
  Title                    = {Analysis of IEEE 802.11a interference on UWB systems},
  Address                  = {Oulu, Finland},
  Author                   = {Firoozbakhsh, B. and Pratt,T. G. and Jayant,N.},
  Booktitle                = {Proc. of IEEE Conference on Ultrawideband Systems and Technologies (UWBST)},
  Pages                    = {473-477},
  Year                     = {2003}
}

@Book{郭文彬2006--,
  Title                    = {通信原理--基于Matlab的计算机仿真},
  Address                  = {北京},
  Author                   = {郭文彬 and 桑林},
  Publisher                = {北京邮电大学出版社},
  Year                     = {2006}
}

@Manual{吴凌云2007--,
  Title                    = {CTEX FAQ},
  Author                   = {吴凌云},
  Version                  = {version 0.4},
  Month                    = {1},
  Subtitle                 = {常见问题集},
  Year                     = {2007}
}

@Book{蔡敏2006--,
  Title                    = {UML基础和Rose建模教程},
  Address                  = {北京},
  Author                   = {蔡敏 and 徐慧慧 and 黄柄强},
  Publisher                = {人民邮电出版社},
  Year                     = {2006},
  Month                    = {1}
}

\end{filecontents}
\addbibresource[location=local]{\jobname.bib}

\begin{document}
依据\citet{Firoozbakhsh2003-473-477},according to \citet{Firoozbakhsh2003-473-477}\par
依据\citet{郭文彬2006--},according to \citet{郭文彬2006--}\par

\printbibliography
\end{document} 

输出: image

同样的引用,中文后接中文文献,是正常的。但是中文后接英文文献,需要增加一个空格吧。所以在引用时,需要判断是否为同一种语言,然后是否键入回车键。这样的话,如果可以自动就好很多了。谢谢!

note286 commented 1 year ago

同样的引用,中文后接中文文献,是正常的。但是中文后接英文文献,需要增加一个空格吧。所以在引用时,需要判断是否为同一种语言,然后是否键入回车键。这样的话,如果可以自动就好很多了。谢谢!

@earthmoon https://github.com/CTeX-org/ctex-kit/issues/392

earthmoon commented 1 year ago

同样的引用,中文后接中文文献,是正常的。但是中文后接英文文献,需要增加一个空格吧。所以在引用时,需要判断是否为同一种语言,然后是否键入回车键。这样的话,如果可以自动就好很多了。谢谢!

@earthmoon CTeX-org/ctex-kit#392

谢谢!通过这个链接我知道大体现状了。