hushidong / biblatex-gb7714-2015

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

包含translator域的英文文献在参考文献表中仍用中文的"译"来表示译者 #88

Closed NotoOotori closed 3 years ago

NotoOotori commented 3 years ago

TL;DR

如题, 如果英文参考文献中含有translator域, 现在的著录格式为

AUTHOR Title[TYPE]. TRANSLATOR, 译. Location: Publisher, Year.

我已阅读宏包文档, 并按照指示对文献设置了langid域, 在biblatex加载时设置了autolang选项, 并加入了babel宏包以及设置需要使用的语言, 不过问题还是在.

想请问一下如何针对英文文献, 将其中的"译"字改为"translator"或类似的单词.

MWE

\documentclass{ctexart}
\begin{filecontents*}{refs.bib}
@book{sally_history_1985,
location = {Monterey, California},
title = {History of Algebraic Geometry},
isbn = {978-0-534-03723-9},
series = {Wadsworth Mathematics Series},
pagetotal = {xii+186},
publisher = {Wadsworth International Group, Belmont, {CA}},
author = {Dieudonné, Jean},
translator = {Sally, Judith D.},
date = {1985},
langid = {english},
mrnumber = {780183},
}

\end{filecontents*}
\usepackage[english]{babel}
\usepackage{csquotes} % as the warning suggests
\usepackage[%
  backend=biber,style=gb7714-2015,gbalign=gb7714-2015,gbpub=false,sortcites=true, autolang=other*
  ]{biblatex}
\bibliography{refs}

\begin{document}
    引用\cite{sally_history_1985}.
    \printbibliography
\end{document}

image

版本

This is XeTeX, Version 3.14159265-2.6-0.999992 (MiKTeX 20.12) (preloaded format=xelatex 2021.3.25) Package: biblatex 2020/08/23 v3.15a programmable bibliographies (PK/MW) File: gb7714-2015.bbx 2020/07/21 v1.0vbiblatex bibliography style

编译命令

latexmk %DOC% -synctex=1 -interaction=nonstopmode -file-line-error --shell-escape -xelatex
NotoOotori commented 3 years ago

TL;DR

如题, 如果英文参考文献中含有translator域, 现在的著录格式为

AUTHOR Title[TYPE]. TRANSLATOR, 译. Location: Publisher, Year.

我已阅读宏包文档, 并按照指示对文献设置了langid域, 在biblatex加载时设置了autolang选项, 并加入了babel宏包以及设置需要使用的语言, 不过问题还是在.

想请问一下如何针对英文文献, 将其中的"译"字改为"translator"或类似的单词.

MWE

\documentclass{ctexart}
\begin{filecontents*}{refs.bib}
@book{sally_history_1985,
location = {Monterey, California},
title = {History of Algebraic Geometry},
isbn = {978-0-534-03723-9},
series = {Wadsworth Mathematics Series},
pagetotal = {xii+186},
publisher = {Wadsworth International Group, Belmont, {CA}},
author = {Dieudonné, Jean},
translator = {Sally, Judith D.},
date = {1985},
langid = {english},
mrnumber = {780183},
}

\end{filecontents*}
\usepackage[english]{babel}
\usepackage{csquotes} % as the warning suggests
\usepackage[%
  backend=biber,style=gb7714-2015,gbalign=gb7714-2015,gbpub=false,sortcites=true, autolang=other*
  ]{biblatex}
\bibliography{refs}

\begin{document}
    引用\cite{sally_history_1985}.
    \printbibliography
\end{document}

image

版本

This is XeTeX, Version 3.14159265-2.6-0.999992 (MiKTeX 20.12) (preloaded format=xelatex 2021.3.25) Package: biblatex 2020/08/23 v3.15a programmable bibliographies (PK/MW) File: gb7714-2015.bbx 2020/07/21 v1.0vbiblatex bibliography style

编译命令

latexmk %DOC% -synctex=1 -interaction=nonstopmode -file-line-error --shell-escape -xelatex

更新了相关宏包之后问题仍存在, 现在的版本为

This is XeTeX, Version 3.141592653-2.6-0.999993 (MiKTeX 21.3) (preloaded format=xelatex 2021.3.25) Package: biblatex 2020/12/31 v3.16 programmable bibliographies (PK/MW) File: gb7714-2015.bbx 2021/01/19 v1.0wbiblatex bibliography style

hushidong commented 3 years ago

感谢,这个是我的问题,我以前也发现过类似的问题,但没有重视,实在是出现概率太小了,另外由于国标也没有对英文的文献做个格式规定,到底用什么词只能是由我来定,所以一直没有处理。 是用 trans. 或者 trans. by 或者 translated by 这个需要讨论一下,后面我和@leezeping 讨论一下统一一下。

稍等,我先给你一个解决方案,后面再细改。

hushidong commented 3 years ago

先用下面的代码应急一下吧,使用了trans. by,你看看你们学校有什么要求没有,如果不符合要求,按照下面代码里面的逻辑你可以修改一下本地化字符串及其位置。

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

\DefineBibliographyStrings{english}{
    bytranslator= {Trans. by},
    }

\makeatletter
\renewbibmacro*{name:andothers}{\bibauthorfont%
  \ifboolexpr{
    test {\ifnumequal{\value{listcount}}{\value{liststop}}}
    and
    test \ifmorenames
  }{\ifnumgreater{\value{liststop}}{1}%
       {\finalandcomma}%
       {}%
\printdelim{andothersdelim}\printdelim{strandothersdelim}%
}{%当是译者的时候需要特殊处理:从7.2节看等,译前面加逗号,但从示例看等和译同时出现时,译前的逗号没有,比如:
%袁训来, 陈哲, 肖书海, 等.
%胡泳, 范海燕, 译.
%潘惠霞, 魏婧, 杨艳, 等译.
\ifcurrentname{translator}{\iffieldequalstr{usere}{chinese}{\addcomma\addthinspace}{}}{}%为了实现上述第二个示例情况做的处理
}}

\renewbibmacro*{bytranslator+others}{\bibauthorfont%
  \ifnameundef{translator}
    {}
    {\iffieldequalstr{usere}{chinese}{}{\usebibmacro{bytranslator+othersstrg}}
     %\setunit{\addspace}%
     \printnames[bytranslator]{translator}%
     \clearname{translator}%
     %从macro*{bytranslator+othersstrg}%中可以看到当地化字符串格式的引用前的代码处理
     %比如生成cotranslator等用于调用cotranslator所代表的当地化字符串
     \iffieldequalstr{usere}{chinese}{\usebibmacro{bytranslator+othersstrg}}{}%“译”的位置换到下面来,即放到译者后面。
     %\setunit{\addspace}%
     \newunit}%
  \usebibmacro{withothers}}  

\newbibmacro*{bytranslator+othersstrg}{%
  \def\abx@tempa{bytranslator}%
  \ifnamesequal{translator}{commentator}
    {\appto\abx@tempa{co}%
     \clearname{commentator}}
    {\ifnamesequal{translator}{annotator}
       {\appto\abx@tempa{an}%
        \clearname{annotator}}
       {}}%
  \ifnamesequal{translator}{introduction}
    {\appto\abx@tempa{in}%
     \clearname{introduction}}
    {\ifnamesequal{translator}{foreword}
       {\appto\abx@tempa{fo}%
        \clearname{foreword}}
       {\ifnamesequal{translator}{afterword}
          {\appto\abx@tempa{af}%
           \clearname{afterword}}
          {}}}%
\iffieldequalstr{usere}{chinese}{\printtext{译}}
  {\bibstring{\abx@tempa}}}

\makeatother

\begin{filecontents}{\jobname.bib}
@Book{GPS1988--,
  Title                    = {外国出版史},
  Author                   = {{昂温, G} and {昂温, P S}},
  Publisher                = {中国书籍出版社},
  Translator               = {陈生诤},
  Year                     = {1988},
  Location                 = {北京}
}

@book{sally_history_1985,
location = {Monterey, California},
title = {History of Algebraic Geometry},
isbn = {978-0-534-03723-9},
series = {Wadsworth Mathematics Series},
pagetotal = {xii+186},
publisher = {Wadsworth International Group, Belmont, {CA}},
author = {Dieudonné, Jean},
translator = {Sally, Judith D.},
date = {1985},
mrnumber = {780183},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
\nocite{*}
\printbibliography
\end{document} 

结果为:

图片传不上了,所以你自己编译一下看看。

NotoOotori commented 3 years ago

编译出来的效果很好, 感谢及时的回复!