Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
leeyupeng119 opened this issue Dec 28, 2022 · 23 comments

Comments

@leeyupeng119
Copy link

通过学习https://blog.csdn.net/xenonhu/article/details/124686522以及参考这个问题#69下的相关讨论,已经对不同标点的使用有了初步的了解。

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

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

谢谢。

@hushidong
Copy link
Owner

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

@hushidong
Copy link
Owner

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

\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
Copy link
Author

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

@hushidong
Copy link
Owner

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

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

结果为:
图片

@leeyupeng119
Copy link
Author

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

@earthmoon
Copy link

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

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

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

谢谢!

@hushidong
Copy link
Owner

见最新的文档

@earthmoon
Copy link

见最新的文档

可以说下页码吗?谢谢。

@hushidong
Copy link
Owner

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

@earthmoon
Copy link

标注标签

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

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

@hushidong
Copy link
Owner

图片

@hushidong hushidong reopened this May 27, 2023
@hushidong hushidong changed the title 类似于中英文混排依语言显示“等”与“et al.”,使nameyeardelim针对文献条目自身的语言(中文、英文)而采用不同的逗号(中文逗号,英文豆号) 用法:中英文混排时标注标签根据文献语言显示显示“等”与“et al.”和中英文标点 May 27, 2023
@hushidong
Copy link
Owner

标注标签

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

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

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

默认是没有空格的。

@earthmoon
Copy link

标注标签

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

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

默认是没有空格的。

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

@sikouhjw
Copy link

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

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

@earthmoon
Copy link

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

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

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

@hushidong
Copy link
Owner

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

只要是加了 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
Copy link

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

只要是加了 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
Copy link
Owner

  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
Copy link
Owner

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

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

@earthmoon
Copy link

earthmoon commented May 28, 2023

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

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

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

@earthmoon
Copy link

  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
Copy link

note286 commented May 28, 2023

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

@earthmoon CTeX-org/ctex-kit#392

@earthmoon
Copy link

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

@earthmoon CTeX-org/ctex-kit#392

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants