如果存在,我正在尝试用另一个自定义字段(Titlept - 葡萄牙语标题)替换一个字段(标题)。有什么建议吗?

如果存在,我正在尝试用另一个自定义字段(Titlept - 葡萄牙语标题)替换一个字段(标题)。有什么建议吗?

我尝试编辑从 standard.bbx 复制的 bibmacro。但是没有成功。另一个解决方案是将 Titlept 的内容复制到 Title 中,但是 Biblatex 文档在这方面对我来说似乎很笨拙。

这是我的尝试:

    \renewbibmacro{maintitle+title}{%
     \iffieldundef{titlept}{ % if titlept is undefined
      \iffieldsequal{maintitle}{title}
        {\clearfield{maintitle}%
         \clearfield{mainsubtitle}%
         \clearfield{maintitleaddon}}
        {\iffieldundef{maintitle}
           {}
           {\usebibmacro{maintitle}%
        \newunit\newblock
        \iffieldundef{volume}
          {}
          {\printfield{volume}%
               \printfield{part}%
               \setunit{\addcolon\space}}}}}
               {\printfield{titlept}}%
      \usebibmacro{title}%
      \newunit}

答案1

使用 biber+biblatex 可以轻松实现这一点,它允许您在读取时重新映射数据源,而无需更改源本身。将其放入您的 biber.conf 中(有关更多详细信息和示例,请参阅 Biber 手册第 3.1.1 节):

<?xml version="1.0" encoding="UTF-8"?>
<config>
  <sourcemap>
    <maps datatype="bibtex" bmap_overwrite="1">
      <map>
        <map_step map_field_source="TITLEPT" map_field_target="TITLE"/>
      </map>
    </maps>
  </sourcemap>
</config>

TITLE如果字段也存在,这将覆盖该字段。如果TITLE字段不存在,bmap_overwrite="0"则仅重命名该字段,请使用。

答案2

这里的问题是,您不能使用titlept作为自定义字段名称。您必须使用 定义的字段。例如,biblatex您可以使用。否则无法识别您的输入字段。userabiblatex

例子:

\documentclass{article}
\usepackage[
    backend=biber,
]{biblatex}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@book {foo,
    author = {Foo, Francis},
    usera = {My custom title},
    title = {All about Foo},
    year = {2011},
    location = {Footown},
}

@book {bar,
    author = {Bar, Bernie},
    title = {Barstory},
    year = {2000},
    location = {Barcity},
}
\end{filecontents}

\addbibresource{\jobname.bib}

    \renewbibmacro{maintitle+title}{%
     \iffieldundef{usera}{ % if usera is undefined
      \iffieldsequal{maintitle}{title}
        {\clearfield{maintitle}%
         \clearfield{mainsubtitle}%
         \clearfield{maintitleaddon}}
        {\iffieldundef{maintitle}
           {}
           {\usebibmacro{maintitle}%
        \newunit\newblock
        \iffieldundef{volume}
          {}
          {\printfield{volume}%
               \printfield{part}%
               \setunit{\addcolon\space}}}}}
               {\printfield{usera}\newunit\newblock}%
      \usebibmacro{title}%
      \newunit}

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

有关自定义字段的更多信息,biblatex请参阅手册第 2.2.4 节。

目前支持以下自定义字段:

  • name[a–c]列表(名称)
    特殊书目样式的自定义列表。标准书目样式不使用。
  • name[a–c]type字段(键)
    authortype和类似,editortype但引用字段name[a-c]。标准书目样式不使用。
  • list[a–f]列表(文字)
    特殊书目样式的自定义列表。标准书目样式不使用。
  • user[a–f]字段(文字)
    特殊书目样式的自定义列表。标准书目样式不使用。
  • verb[a–c]字段(文字)与上面的自定义字段类似,但这些是逐字字段。标准书目样式不使用它们。

答案3

我不得不使用 Thorsten 建议的自定义字段更新一些宏,而且效果非常好。我最终得到了类似下面的代码。稍后我将发布完整的文档工作并通知您。我不得不将用户 [a] 带到 [d],替换标题、系列、注释和地址字段。

\renewbibmacro{maintitle+title}{%
 \iffieldundef{usera}{ % if the translation is not available...
  \iffieldsequal{maintitle}{title} % it prints the title macro,
    {\clearfield{maintitle}%
     \clearfield{mainsubtitle}%
     \clearfield{maintitleaddon}}
    {\iffieldundef{maintitle}
       {}
       {\usebibmacro{maintitle}%
        \newunit\newblock
        \iffieldundef{volume}
      {}
      {\printfield{volume}%
           \printfield{part}%
           \setunit{\addcolon\space}}}}
           \usebibmacro{title}
           }
           {\printfield{usera}}% Otherwise, it prints the translation.
      \newunit}

  \newbibmacro{series+number}{%
   \iffieldundef{userb}{
      \printfield{series}%
      \setunit*{\addspace}%
      \printfield{number}%
  \newunit}
  {\printfield{userb}}}

非常感谢您的帮助。我希望回报社区。

相关内容