德语 APA 参考文献:原年份字段不完整(需要重印标题)

德语 APA 参考文献:原年份字段不完整(需要重印标题)

我使用 LuaTeX、BibLaTeX 和 biber 以及 APA 书目格式。德语版本的字段有origyear误。

原始的英文 APA 版本想要的是这样的:

作者)。标题地点发行商. (原作发表原始年份

德文版也一样,只是把“Original work posted”换成了“Original erschienen”,这样就可以了。但是根据德国DGP的调整版本,其余部分应该是这样的:

作者)。标题地点发行商。 (原文 原始年份原标题

但是我们甚至不能使用该origtitle字段,而只是移动它。因为当该字段已经用于自制的标题翻译时,该origtitle字段是标题的字段。想象一下以下情况:title

史密斯,A.(1990 年)。爱情 [Die Liebe]。巴黎:阿方斯。 (原作发表于 1988 年:《爱》)。

因此,我们有一本原版英文书的法语译本,并且我们给出了德语译本,以便每个人都能理解。title字段是我们的译本“Die Liebe”,origtitle是译本“L'amour”的标题,所以我们需要另一个字段来记录原作“Love”的标题。这不能附加,origyear因为我们origyear在引用时需要单独添加,如下所示:Smith (1988/1990)。

我们需要一个origwork附加到的字段,origyear并且非常灵活,因为如果原始作品的作者略有不同(这到底是什么情况??),DGP 会将其变成:

Zimbardo, PG & Gerrig, RJ (2004)。 ...(原作于 2002 年由 Gerrig, RJ 和 Zimbardo, PG, 《心理学与生活》出版)

而DGP也有点不一致。可以发现:

(原版于 1988 年出版:《爱》)

(原作于 1988 年,《爱》)

无论如何,有人知道如何在 german-apa.lbx 中实现这一点吗?我甚至不知道从哪里开始...

编辑:

非常感谢 Guido,这几乎就是我需要的。

不过这有点混乱。这会把所有东西都弄乱。没有必要这样做。titlesubtitle应该origtitle保留原位。我们只需要一个额外的字段。我们不能使用titleaddon它,因为它放在方括号中(我们也不能使用标题/副标题,因为它是斜体,但如果用作原创作品的标题,就不应该这样)。我们只需要另一个字段origwork

以下是我目前得到的信息:

\documentclass{scrbook}
\usepackage[american,english,ngerman]{babel}
\usepackage[style=apa,backend=biber,bibencoding=utf8,babel=other]{biblatex}
\usepackage[autopunct=true,autostyle=true,german=guillemets,english=american]{csquotes}
\bibliography{test.bib}        
\DeclareLanguageMapping{american}{american-apa}
\DeclareLanguageMapping{ngerman}{ngerman-apa}

\begin{filecontents}{biblatex-dm.cfg}
    \DeclareDatamodelFields[type=list, datatype=name,skipout=false]{origauthor}
    \DeclareDatamodelEntryfields{origauthor}
    \DeclareDatamodelFields[type=field, datatype=literal,skipout=false]{origwork}
    \DeclareDatamodelEntryfields{origwork} 
    \end{filecontents}

    \DeclareFieldFormat{origyear}{%
     \mkbibparens{\bibcpstring{origyear}~\thefield{origyear}%
     \ifnameundef{origauthor}
       {}
       {\addspace als \printnames[author]{origauthor}}%
     \iffieldundef{origwork}
       {}%
       {\ifnameundef{origauthor}
         {\setunit{\addcolon\addspace}}
         {\setunit{\addcomma\addspace}}%
         \printfield{origwork}}}%
     }

    \renewbibmacro*{origyear}{%
      \ifthenelse{
          \NOT\iffieldsequal{labelyear}{origdateyear}
        \OR
          \NOT\iffieldsequal{title}{origwork}
        \OR
          \NOT\ifnamesequal{author}{origauthor}
        }
        {\printfield{origyear}}
        {}%
    }

\begin{document}
\textcite{testentry}
\printbibliography 
\end{document}

测试.bib:

@BOOK{testentry,
  author = {Adam Smith},
  title = {Die Liebe},
  origtitle = {L'amour},
  location = {Paris},
  publisher = {Alfons},
  date = {1994},
  origdate = {1988},
  origauthor = {Adam Smith-Degen},
  origwork = {Love},
  hyphenation = {ngerman},
}

编辑2:

我现在明白了,你把一切都颠倒过来了,这样它就符合语义目的了。而且 biblatex-apa 有点不一致,使用title表示标题,但使用origtitle表示标题,如果有自制的翻译,则填写为title。无论如何,这是现在每个人都在使用的。我们可以使用未使用的字段添加缺失的部分。这是我的尝试reprinttitle

\documentclass{scrbook}
\usepackage[american,english,ngerman]{babel}
\usepackage[style=apa,backend=biber,bibencoding=utf8,babel=other]{biblatex}
\usepackage[autopunct=true,autostyle=true,german=guillemets,english=american]{csquotes}
\bibliography{test.bib}        
\DeclareLanguageMapping{american}{american-apa}
\DeclareLanguageMapping{ngerman}{ngerman-apa}

\DeclareFieldFormat{origyear}{%
 \mkbibparens{\bibcpstring{origyear}~\thefield{origyear}%
 \ifnameundef{origauthor}
   {}
   {\addspace als \printnames[author]{origauthor}}%
 \iffieldundef{reprinttitle}
   {}%
   {\ifnameundef{origauthor}
     {\setunit{\addcolon\addspace}}
     {\setunit{\addcomma\addspace}}%
     \printfield{reprinttitle}}}%
 }

\renewbibmacro*{origyear}{%
  \ifthenelse{
      \NOT\iffieldsequal{labelyear}{origdateyear}
    \OR
      \NOT\iffieldsequal{title}{reprinttitle}
    \OR
      \NOT\ifnamesequal{author}{origauthor}
    }
    {\printfield{origyear}}
    {}%
}

\begin{document}
\textcite{testentry}
\printbibliography 
\end{document}

测试.bib:

@BOOK{testentry,
  author = {Adam Smith},
  title = {Die Liebe},
  subtitle = {in all ihren Formen},
  origtitle = {L'amour},
  location = {Paris},
  publisher = {Alfons},
  date = {1994},
  origdate = {1988},
  origauthor = {Adam Smith},
  titleaddon = {Special issue},
  reprinttitle = {Love},
  hyphenation = {ngerman},
}

现在看起来像:

史密斯,A.(1994 年)。爱情[爱情:以你所有的形式] [特刊]。巴黎:阿方斯。 (原作于 1988 年,作者为 Smith, A., Love)。

要做的事情:“als” 也需要作为关键字,在德语书目中为“als”,在英语书目中为“as”。作者的名字是 Surname, F.,但应该是 F. Surname。如果您能详细说明这一点,我将非常高兴。

答案1

对于原问题,需要的修改是:

\renewbibmacro*{title}{%
  \ifthenelse{\iffieldundef{title}\AND\iffieldundef{subtitle}}
    {}
    {\printtext[title]{%
        \printfield[apacase]{title}%
        \setunit{\subtitlepunct}%
        \printfield[apacase]{subtitle}}%
     \setunit{\addspace}%
     \printfield{titleaddon}%
     \iffieldequalstr{entrytype}{book}%
       {\setunit{\addspace}\usebibmacro{bookaddinfo}}%
       {}%
     \ifthenelse{%
       \ifnameundef{author}\AND%
       \(\ifnameundef{editor}\AND\NOT\boolean{bbx:editorinauthpos}\)\AND%
       \ifnameundef{producer}\AND%
       \ifnameundef{director}\AND%
       \ifnameundef{writer}}
        {\newunit\newblock
         \usebibmacro{labelyear+extrayear}}
        {}}}

\DeclareFieldFormat{origyear}{%
 \mkbibparenss{\bibcpstring{origyear}~\thefield{origyear}%
 \iffieldundef{origtitle}
   {}%
   {\addcolon\addspace\printfield{origtitle}}}%
 }

\newbibmacro*{origyear}{%
  \ifthenelse{
      \NOT\iffieldundef{labelyear}
      \AND\NOT\iffieldsequal{labelyear}{origyear}
    \OR
      \NOT\iffieldsequal{title}{origtitle}}
    {\printfield{origyear}}
    {}%
}

\DefineBibliographyStrings{german}{%
   origyear = {Original erschienen}
} 

这可以插入到文档的序言中。

对于扩展版本,要么引入新的字段(可以通过修改数据模型或使用 BibLaTeX 工具来实现related)。

编辑 1 和编辑 2 为了适应原始出版物作者不同的情况,第一步是修改数据模型,可以这样做:

\begin{filecontents}{biblatex-dm.cfg}
\DeclareDatamodelFields[type=list, datatype=name,skipout=false]{origauthor}
\DeclareDatamodelEntryfields{origauthor}  
\end{filecontents}

这会biblatex-dm.cfg在当前目录中生成一个名为的文件,其中包含有关如何扩展 BibLaTeX 数据模型的说明。

请注意,BibLaTeX 提供了一个titleaddon字段,它可以用于标题的额外信息(OP 中的“Die Liebe”)。

最后,可以添加一个titletranslation用于自制翻译的字段,即可以在数据模型文件中包含以下两行。

\DeclareDatamodelField[type=field, datatype=literal,skipout=false]{titletranslation}
\DeclareDatamodelEntryfields{titletranslation}

另一种可能性是使用“未使用”字段,例如reprinttitle。接下来我将使用此选项。

下一步是修改适当的bibmacros。在本例中,title以及origyear标题的格式(以及有关原始出版物的相关信息)

\renewbibmacro*{title}{%
  \ifthenelse{\iffieldundef{title}\AND\iffieldundef{subtitle}}
    {}
    {\printtext[title]{%
        \printfield[apacase]{title}%
        \setunit{\subtitlepunct}%
        \printfield[apacase]{subtitle}}%
     \setunit{\addspace}%
     \printfield{titleaddon}%
     \setunit{\addspace}%
     \printfield{reprinttitle}%
     \iffieldequalstr{entrytype}{book}%
       {\setunit{\addspace}\usebibmacro{bookaddinfo}}%
       {}%
     \ifthenelse{%
       \ifnameundef{author}\AND%
       \(\ifnameundef{editor}\AND\NOT\boolean{bbx:editorinauthpos}\)\AND%
       \ifnameundef{producer}\AND%
       \ifnameundef{director}\AND%
       \ifnameundef{writer}}
        {\newunit\newblock
         \usebibmacro{labelyear+extrayear}}
        {}}}

首先originyear要做的是定义格式。为此,我们检查是否originauthor已定义,并相应地设置标点符号:

\DeclareFieldFormat{origyear}{%
 \mkbibparens{\bibcpstring{origyear}~\thefield{origyear}%
 \ifnameundef{origauthor}
   {}
   {\addspace\bibstring{as}\addspace\printnames[FirstLast]{origauthor}}%
 \iffieldundef{origtitle}
   {}%
   {\ifnameundef{origauthor}
     {\setunit{\addcolon\addspace}}
     {\setunit{\addcomma\addspace}}%
     \printfield{origtitle}}}%
 }

然后,我们必须考虑必须输出有关原始出版物的信息的情况(这里的条件是年份、标题或作者不同)。

\renewbibmacro*{origyear}{%
  \ifthenelse{
      \NOT\iffieldsequal{labelyear}{origdateyear}
    \OR
      \NOT\iffieldsequal{title}{origtitle}
    \OR
      \NOT\ifnamesequal{author}{origauthor}
    }
    {\printfield{origyear}}
    {}%
}

警告上述解决方案的一个问题是,并非所有书目​​条目类型都包含使用上述方法格式化原始出版物信息的说明。更强大的技术是使用 BibLaTeX 提供的功能来处理相关出版物。

最后一步是使用适当的本地化字符串origyear和值as

\NewBibliographyString{origyear,as}
\DefineBibliographyStrings{ngerman}{%
   origyear = {Original erschienen},
   as = {als}
} 

\DefineBibliographyStrings{american}{%
   as = {as} 
}  

最后,为了改变名称的呈现方式,我们必须修改apaauthor

\DeclareNameFormat{FirstLast}{%
 \ifthenelse{\value{listcount}=\maxprtauth\AND\value{listcount}<\value{listtotal}}
    {\addcomma\addspace\ldots}
    {\ifthenelse{\value{listcount}>\maxprtauth\AND\value{listcount}<\value{listtotal}}
      {}
      {\iffirstinits
        {\usebibmacro{name:first-last}{#1}{#4}{#5}{#7}}
        {\usebibmacro{name:first-last}{#1}{#3}{#5}{#7}}}}
  \ifmorenames{\andothersdelim\bibstring{andothers}}{}}

相关内容