如果存在,则使用“fjournal”字段代替“journal”

如果存在,则使用“fjournal”字段代替“journal”

我有一个 bib 文件,其中包含没有字段的条目fjournal,以及包含fjournaljournal字段的其他条目。我想使用与“plain”样式完全相同的参考书目,但只要存在这样的字段,字段的内容就会journal被字段替换fjournal。这可能吗?

非常感谢!!

请求示例:这里是一个简化的示例。该字段通常出现在 bibtex 格式中http://www.ams.org/mref

@article{x,
AUTHOR = {Jacod, J. and Protter, P. and xx, y.},
TITLE = {Semimartingales and {M}arkov processes},
JOURNAL = {Z. Wahrsch. Verw. Gebiete},
FJOURNAL = {Zeitschrift f\"ur Wahrscheinlichkeitstheorie und Verwandte Gebiete},
VOLUME = {54},
YEAR = {1980},
NUMBER = {2},
MRCLASS = {60G44 (60J25)},
MRNUMBER = {597337 (82h:60084)}
}

答案1

事实证明,实现目标所需的参考书目样式文件调整并不难实现。我建议您按以下步骤操作:

  • 在您的 TeX 发行版中找到该文件plain.bst。复制此文件,并将副本命名为 。plainfj.bst不要直接编辑 TeX 发行版的原始文件。

  • 在您选择的文本编辑器中打开该文件plainfj.bst;您用来编辑 tex 文件的程序就可以了。

  • 在打开的文件中,找到名为 ENTRY 的列表;它在我的文件副本中从第 11 行开始。列表中的项目是全部参考书目样式可识别的字段名称。我建议您 (a) 在名为和的字段之间创建一个新行editor,并且 (b)在新行中howpublished插入单词。fjournal

    显然,我们首先需要告诉 BibTeX 一个名为字段的存在,fjournal以便 BibTeX 稍后可以用它做一些事情。

  • 这个“稍后”恰好位于名为 的函数中。因此,在文件 中article找到名为 的函数。如果您在上一步中创建了一个新行,则该函数应从文件的第 539 行开始。articleplainfj.bstarticle

  • article函数中,找到如下行:

        { journal emphasize "journal" output.check
    

    将此行替换为以下四行 [4]:

        { fjournal missing$
          { journal emphasize "journal" output.check }
          { fjournal emphasize "fjournal" output.check }
          if$
    

    即使您不熟悉 BibTeX 的中缀语法,您也大概能猜出发生了什么:在原始版本中,字段名为journal传递给emphasize函数,然后调用函数output.check。(我想您可以猜出函数的emphasize作用;output.check如果字段 -- 此处:journal-- 存在但为空或重复存在,函数会发出警告。)在修改后的版本中,我们首先运行测试以检查字段名为是否fjournal缺失。如果缺失,则运行旧代码;如果没有缺失,则将的内容fjournal传递给emphasizeoutput.check函数。

  • 将文件保存plainfj.bst在主 tex 文件所在的目录中,或保存在 BibTeX 搜索的目录中。如果选择后者,请确保适当更新 TeX 发行版的文件名数据库。

  • \bibliographystyle{plain}通过将指令替换为 来开始使用新的参考书目文件\bibliographystyle{plainfj}。请务必重新运行 LaTeX、BibTEX 和 LaTeX 两次,以完全传播所有更改。

祝您 BibTeX 愉快!

在此处输入图片描述

\RequirePackage{filecontents}
\begin{filecontents}{mybib.bib}
@article{x,
  AUTHOR   = {{\c C}inlar, E. and Jacod, J. and Protter, P. and Sharpe, M. J.},
  TITLE    = {Semimartingales and {M}arkov processes},
  JOURNAL  = {Z. Wahrsch. Verw. Gebiete},
  FJOURNAL = {Zeitschrift f\"ur Wahrscheinlichkeitstheorie und Verwandte Gebiete},
  VOLUME   = {54},  
  YEAR     = {1980},
  NUMBER   = {2},
  pages    = {161-219},
  MRCLASS  = {60G44 (60J25)},
  MRNUMBER = {597337 (82h:60084)},
}
@article{y,
  AUTHOR   = {{\c C}inlar, E. and Jacod, J. and Protter, P. and Sharpe, M. J.},
  TITLE    = {Semimartingales and {M}arkov processes},
  JOURNAL  = {Z. Wahrsch. Verw. Gebiete},
  VOLUME   = {54},  
  YEAR     = {1980},
  NUMBER   = {2},
  pages    = {161-219},
  MRCLASS  = {60G44 (60J25)},
  MRNUMBER = {597337 (82h:60084)},
}
\end{filecontents}

\documentclass{article}
\bibliographystyle{plainfj}

\begin{document}
\nocite{*}
\bibliography{mybib}
\end{document}

答案2

使用biblatexBiber 您可以使用源映射功能

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map[overwrite=true]{
      \step[fieldsource=fjournal]
      \step[fieldset=journal, origfieldval]
    }
  }
}

这会将字段的内容复制fjournaljournal字段中。

虽然numeric类似于plain,但也有模仿的风格plain,但在各个细节上如何使用 biblatex 尽可能地模拟传统的 BibTeX 样式(plain、abbrv、unsrt、alpha)?

平均能量损失

\RequirePackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{x,
  AUTHOR   = {{\c C}inlar, E. and Jacod, J. and Protter, P. and Sharpe, M. J.},
  TITLE    = {Semimartingales and {M}arkov processes},
  JOURNAL  = {Z. Wahrsch. Verw. Gebiete},
  FJOURNAL = {Zeitschrift f\"ur Wahrscheinlichkeitstheorie und Verwandte Gebiete},
  VOLUME   = {54},  
  YEAR     = {1980},
  NUMBER   = {2},
  pages    = {161-219},
  MRCLASS  = {60G44 (60J25)},
  MRNUMBER = {597337 (82h:60084)},
}
@article{y,
  AUTHOR   = {{\c C}inlar, E. and Jacod, J. and Protter, P. and Sharpe, M. J.},
  TITLE    = {Semimartingales and {M}arkov processes},
  JOURNAL  = {Z. Wahrsch. Verw. Gebiete},
  VOLUME   = {54},  
  YEAR     = {1980},
  NUMBER   = {2},
  pages    = {161-219},
  MRCLASS  = {60G44 (60J25)},
  MRNUMBER = {597337 (82h:60084)},
}
\end{filecontents}

\documentclass{article}
\usepackage[style=trad-plain, backend=biber]{biblatex}% (or style=numeric)

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map[overwrite=true]{
      \step[fieldsource=fjournal]
      \step[fieldset=journal, origfieldval]
    }
  }
}

\renewbibmacro*{journal}{%
  \printfield{journaltitle}%
  \setunit{\subtitlepunct}%
  \printfield{journalsubtitle}}

\addbibresource{\jobname.bib}

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

示例输出


但您甚至不必使用biblatex该功能。您可以让 Biber 预处理您的.bib文件。

创建一个名为的文件biber.conf,内容如下

<?xml version="1.0" encoding="UTF-8"?>
<config>
  <sourcemap>
    <maps datatype="bibtex" level="user">
      <map map_overwrite="1">
        <map_step map_field_source="fjournal"/>
        <map_step map_field_set="journal" map_origfieldval="1"/>
      </map>
    </maps>
  </sourcemap>
</config>

然后在你的文件上以工具模式运行 Biber .bib,如果它被调用,fjourn.bib你将运行

biber --tool fjourn.bib

您将获得一个新文件fjourn_bibertool.bib,其中fjournal字段已复制到该字段。然后您可以在文档中journal使用。fjourn_bibertool.bib

相关内容