Biblatex - 在一个参考条目中使用两种语言

Biblatex - 在一个参考条目中使用两种语言

我正在尝试学习 biblatex,但遇到了一些小问题。根据捷克学术写作风格,书目记录中的某些字段(如卷、版或期)应使用源文档的语言,而其他字段(如页码)应使用当前文档所用的语言。所以:

KRSKOVÁ,L.; HILSKÁ,I.; KOPECKÁ,P. aj.恶性淋巴细胞 B 的分子诊断:检测克隆性结构问题及其进展。捷克语 Časopis lékařů českých。 2004年,。 143,C。 3、s.191-194。ISSN 0008-7335。

对阵

BROWMAN,Howard I.;STERGIOU Konstantinos I. 因素和指标是一回事,决定谁是学者、为什么是学者以及他们的学术的相对价值则完全是另一回事。科学伦理与环境政治. 2008年6月,8、。 1、s. 1-3. ISSN 1863-5415。

我使用 可以毫无问题地获取本地化字符串\bibsstring,但是如何从主语言中获取字符串?我尝试了类似


\DeclareFieldFormat*{pages}{#1}
\newbibmacro{pagecount}{%
  \iffieldundef{pages}{}
    {\selectlanguage{czech}\bibsstring{pages}\addnbspace\printfield{pages}}}

..
\DeclareBibliographyDriver{article}{%
..
\usebibmacro{pagecount}

并且它有效,但我认为一定有比将语言硬编码到风格中更优雅的方法。

是否存在一些命令可以切换到主语言,或者我可以使用一些变量吗?我已经找到了\blx@languagename,但它只保存当前记录的语言。


编辑

下面我的解决方案没什么问题。它在输出中添加了空格。

SMITH, Alan; NEWMAN, Paul; PINKY, John   aj. Some title. 3rd ed. 
  New York : MIT Press, 1991. 332  s.

当然,aj. 和 s 之前应该只有一个空格。

biblatex 重新定义 babel 宏\bbl@设置@语言,因此可能存在一些问题。

如果我们有以下示例

\documentclass[a4paper,10pt]{article}
\usepackage[english,czech]{babel}
%\usepackage[backend=biber,style=apa,sorting=nyt,babel=other]{biblatex}
\makeatletter 
   \newcommand\mainlanguage{\expandafter\bbl@set@language\expandafter{\bbl@main@language}}%
\newcommand\ml{[\bbl@main@language{}--\languagename]}
\makeatother
\begin{document}
\ttfamily
(\mainlanguage) \ml 
(\selectlanguage{czech}) \ml 
(\selectlanguage{english}) \ml  
\end{document}

结果是:

() [czech--czech]() [czech--czech]() [czech--english]

如果我们取消注释 \usepackage[...]{biblatex}:

(   ) [czech--czech](   ) [czech--czech]( ) [czech--english]

基于另一个问题我制作了用于丢弃命令输出的宏:

\newlength{\trashlength}
\def\ignoreoutput#1{\globaldefs=1 \settowidth{\trashlength}{#1}}

它会丢弃空格,但是引用现在没有斜体和破折号。

问题 那么,还有其他方法可以丢弃空格吗?或者最好在biblatex.sty?(我试过这么做,但没有成功)

答案1

babel我终于在文档中找到了解决方案:

\newcommand\mainlanguage{\expandafter\bbl@set@language\expandafter{\bbl@main@language}}}

\newbibmacro{pagecount}{%
  \iffieldundef{pages}{}
    {\mainlanguage\addnbspace\printfield{pages}}}

编辑:也许这是一个肮脏的黑客并且效率低下,但是这个版本不会添加不需要的空格:

\newlength{\trashlength}  
\newcommand\mainlanguage{\expandafter\bbl@set@language\expandafter%
  {\bbl@main@language}{\settowidth{\trashlength}\expandafter%
  \bbl@set@language\expandafter{\bbl@main@language}}\kern-\trashlength}}%

相关内容