我是一名日本人,想引用英文和日文文献。据我所知,biblatex 中没有简洁的标准解决方案来处理东方语言,在参考书目中显示姓氏在前(不带逗号)。因此,我正在考虑使用宏 http://granular.blog39.fc2.com/blog-entry-76.html
这个宏似乎运行得很好。我唯一不满意的地方(也是这个宏的作者自己指出的)是参考书目列表中的日文条目显示为“日文”。这对于日本人而言完全是多余的。
作者说我必须注释掉
\printlist{language}
.bbx 文件中的部分。我想知道是否有更直接的解决方案。
注意
\AtEveryBibitem{ \clearlist{language} }
由于宏需要 biblatex 中的“语言”规范,因此这种解决方案在这里不起作用。
非常感谢您的帮助。
答案1
大卫的回答使用\DeclareListFormat{language}{}
works becausebiblatex
非常聪明,并且会采取预防措施,如果字段/列表/名称格式为空,则不会打印任何内容。尽管采取了这些安全措施,但我并不太喜欢使用空字段格式,并且如果可能的话,我会尽量避免使用它们。
对于您的情况,我建议language
根本不要使用该字段。language
旨在打印在参考书目中,不用于其他内部检查。 对于语言切换biblatex
用途langid
,因此您也可以在此处使用它。 的一个优点langid
是它是一个字段,而不是像 这样的列表language
,这使得它更容易处理。
请注意,我改变了代码中的缩进,使其对我来说更具可读性,同时我还确保在此过程中删除了虚假的空格。
\documentclass{ltjsarticle}
\usepackage[backend=biber]{biblatex}
\newbibmacro*{finalnamedelim:japanese}{\multinamedelim}
\renewcommand*{\finalnamedelim}{%
\iffieldundef{langid}
{\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace\bibstring{and}\space}
{\usebibmacro*{finalnamedelim:\strfield{langid}}}}
\newbibmacro*{name:given-family:japanese}[4]{%
\usebibmacro{name:delim}{#1#2}%
\usebibmacro{name:hook}{#1#2}%
#1\bibnamedelimc#2}
\DeclareNameFormat{given-family}{%
\iffieldundef{langid}
{\ifgiveninits
{\usebibmacro{name:given-family}
{\namepartfamily}
{\namepartgiveni}
{\namepartprefix}
{\namepartsuffix}}
{\usebibmacro{name:given-family}
{\namepartfamily}
{\namepartgiven}
{\namepartprefix}
{\namepartsuffix}}}
{\usebibmacro*{name:given-family:\strfield{langid}}
{\namepartfamily}
{\namepartgiven}
{\namepartprefix}
{\namepartsuffix}}%
\usebibmacro{name:andothers}}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{山田2018,
author = {山田, 太郎 and 鈴木, 花子 and 田中, 次郎},
langid = {japanese},
journal = {ほげ学会論文集},
pages = {8--15},
title = {〇〇について},
volume = {8},
year = {2018},
}
@article{Smith2018,
author = {Smith, John and Schmidt, Hans},
journal = {Int. J. Hoge},
pages = {3-5},
title = {Piyo is Fuga},
volume = {10},
year = {2018},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
山田ら\cite{山田2018}は〇〇について××と言っている。
Smith and Hans \cite{Smith2018}は piyo について fuga と言っている。
\printbibliography
\end{document}
我认为将语言设为名称或名称列表的属性而不是整个条目的属性会更好。使用扩展名称格式可以实现这一点,请参阅Bibtex/Biber:如何使用埃塞俄比亚惯例引用作者?和芝加哥风格的 CJK 文献引用 #2。当然,如果语言只是列表中一个名称的属性,那么这个名称可能会改变,这似乎很奇怪finalnamedelim
。需要进行一些思考和工作才能使其适合您的目的。
答案2
我建议为该字段设置一个空列表格式language
。这样它仍然存在,但永远不会被打印。
要永不打印language
,请使用:
\DeclareListFormat{language}{}
平均能量损失
\documentclass{ltjsarticle}
\usepackage[backend=biber]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{demo.bib}
@article{山田2018,
author = {山田, 太郎 and 鈴木, 花子 and 田中, 次郎},
language = {japanese},
journal = {ほげ学会論文集},
pages = {8--15},
title = {〇〇について},
volume = {8},
year = {2018}
}
@article{Smith2018,
author = {Smith, John and Schmidt, Hans},
journal = {Int. J. Hoge},
pages = {3-5},
title = {Piyo is Fuga},
volume = {10},
year = {2018}
}
\end{filecontents}
\addbibresource{demo.bib}
\DeclareListFormat{language}{}
\newbibmacro*{finalnamedelim:{japanese}}{%
\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace\multinamedelim
}
\renewcommand*{\finalnamedelim}{%
\iflistundef{language}
{\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace\bibstring{and}\space}
{\usebibmacro*{finalnamedelim:\strlist{language}}}
}
\newbibmacro*{name:given-family:{japanese}}[4]{%
\usebibmacro{name:delim}{#1#2}\usebibmacro{name:hook}{#1#2}#1\bibnamedelimc#2}
\DeclareNameFormat{given-family}{%
\iflistundef{language}{%
\ifgiveninits
{\usebibmacro{name:given-family}{\namepartfamily}{\namepartgiveni}{\namepartprefix}{\namepartsuffix}}
{\usebibmacro{name:given-family}{\namepartfamily}{\namepartgiven}{\namepartprefix}{\namepartsuffix}}
}
{\usebibmacro*{name:given-family:\strlist{language}}{\namepartfamily}{\namepartgiven}{\namepartprefix}{\namepartsuffix}}
\usebibmacro{name:andothers}
}
\begin{document}
山田ら\cite{山田2018}は〇〇について××と言っている。
Smith and Hans\cite{Smith2018}は piyo について fuga と言っている。
\printbibliography
\end{document}