我有一个 bib 文件,其中包含没有字段的条目fjournal
,以及包含fjournal
和journal
字段的其他条目。我想使用与“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 行开始。article
plainfj.bst
article
在
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
传递给emphasize
和output.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
使用biblatex
Biber 您可以使用源映射功能
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite=true]{
\step[fieldsource=fjournal]
\step[fieldset=journal, origfieldval]
}
}
}
这会将字段的内容复制fjournal
到journal
字段中。
虽然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