monperrus / bibtexbrowser
bibtexbrowser 是一个PHP脚本,可以从Bibtex文件创建出版物列表。bibtexbrowser 稳定、成熟且易于安装。
Requires
- php: >=5.6
This package is auto-updated.
Last update: 2024-08-31 06:40:31 UTC
README
bibtexbrowser 是一个PHP脚本,可以从Bibtex文件创建出版物列表。bibtexbrowser 稳定、成熟且易于安装。它被成百上千所不同大学和机构使用(根据谷歌统计,超过469个不同域名)。
此文档是协作的,您可以使用拉取请求来改进它。
特性
- (09/2021) 添加了对使用辅助脚本 bibtex-to-cff.php 生成 CITATION.cff 文件的支持
- (01/2017) 支持基本的 Composer 支持
- (02/2016) 支持 OpenGraph 元数据
- (10/2015) 支持 Bibtex 字段的过滤
- (10/2013) 支持本地化(见下文)
- (07/2012) 新的标签类型(见配置值 ABBRV_TYPE)
- (10/2011) 如果Bibtex条目包含字段gsid(如谷歌学术ID),bibtexbrowser 将包含一个链接 [cites] 到谷歌学术的引用页面(例如,http://scholar.google.com/scholar?cites=15080874515065717592)
- (03/2011) bibtexbrowser 包含对 Bibtex 条目的隐藏/显示机制(在 JavaScript 中,见配置变量 BIBTEXBROWSER_USE_PROGRESSIVE_ENHANCEMENT)
- (10/2010) bibtexbrowser 现在支持交叉引用(Bibtex crossref)
- (09/2010) bibtexbrowser 现在支持多个 Bibtex 文件(bibtexbrowser.php?bib=file1.bib;file2.bib)
- (05/2010) bibtexbrowser 如果您定义了相应的 @string(见函数 addHomepageLink),则会添加到您的合著者页面上的链接
- (01/2010) bibtexbrowser 可以处理用户定义的参考文献样式
- bibtexbrowser 生成出版物 RSS 源(只需在 URL 末尾添加 &rss 即可)!演示
- (10/2009) bibtexbrowser 现在能够生成只包含所选条目的 Bibtex 文件(只需在链接末尾添加 &astext 即可)
- (10/2009) bibtexbrowser 现在与 register_globals 的配置无关
- (01/2009) bibtexbrowser 允许多条件搜索,例如 演示
- bibtexbrowser 生成 COinS 元数据,以便与 Zotero 和 Mendeley 自动导入参考文献条目。
- bibtexbrowser 生成 Google Scholar 元数据,以提高您在 Google Scholar 上的论文可见性。
- bibtexbrowser 替换在 @STRING 中定义的常量
- bibtexbrowser 非常快,因为它保留了一个编译版本的 Bibtex 文件(PHP 对象序列化)
- bibtexbrowser 与 PHP 4.x 和 PHP 5.x 兼容
- bibtexbrowser 可以使用框架集显示菜单和所有条目 演示
- bibtexbrowser 可以显示 Bibtex 文件中的所有条目 演示
- bibtexbrowser 可以显示给定年份的所有条目 演示
- bibtexbrowser 可以显示单个 bibtex 条目 演示
- bibtexbrowser 可以通过搜索词显示找到的条目(它可以是任何 bib 字段)演示
- bibtexbrowser 可以通过 bib 关键字显示所有条目,例如 "?keywords=components"。它将与 "keywords" bibtex 字段匹配。演示
- bibtexbrowser 输出有效的 XHTML 1.0 Transitional
- bibtexbrowser 可以显示某位作者的条目 演示
- bibtexbrowser 可以使用不同的编码(如果您的 bib 文件是 UTF-8,则更改默认的 iso-8859-1 编码 define('BIBTEX_INPUT_ENCODING','UTF-8') )
- bibtexbrowser 安装简单:只需一个文件。
下载
对于功能请求或错误报告,请在下面评论此页;补丁可以通过在 github 上的拉取请求贡献:()
稳定版本:bibtexbrowser.php 变更日志
不要犹豫,联系我加入 bibtexbrowser 用户列表:-)
Bibtexbrowser 生态系统
以下是在底层使用 bibtexbrowser 的应用
- Bibtex 的一个美观打印机和清洁工具
- bibtexbrowser 的一个自定义引用样式,遵循 IEEE 引用指南(在 github 上)
- 使用 http://www.monperrus.net/martin/bibtex2latex 生成 Latex 中的出版物列表
- 从 bibtex 文件的内容中填充 MySQL 数据库
- 使用 wp-publications 在 WordPress 中的出版物列表
- 使用 HAL 和 bibtexbrowser 的出版物列表
演示和截图
演示: 在这里,您可以浏览一个专门用于软件指标的 bibtex 文件
基本安装
创建一个包含出版物记录的 bib 文件(例如 csgroup2008.bib),并将其上传到您的服务器。
- 使用链接 bibtexbrowser.php?bib=csgroup2008.bib(基于框架的视图)
- 使用链接 bibtexbrowser.php?bib=csgroup2008.bib&all(按年份排序的出版物列表)
- 使用链接 bibtexbrowser.php?bib=csgroup2008.bib&all&academic(按出版物类型排序的出版物列表,然后按年份排序,请参阅下文中的“学术模式下的分段”)
处理多个 bibtex 文件:如果您想包含多个 bibtex 文件,只需将文件以分号分隔提供给 bibtexbrowser,例如:bibtexbrowser.php?bib=strings.bib;csgroup2008.bib
常见问题解答
如何将 Bibtexbrowser 嵌入网站中?
要将 Bibtexbrowser 嵌入网站,您可以将其用作库
<?php $_GET['library']=1; define('BIBTEXBROWSER_BIBTEX_LINKS',false); // no [bibtex] link by default require_once('bibtexbrowser.php'); global $db; $db = new BibDataBase(); $db->load('biblio.bib'); // printing all 2014 entries // can also be $query = array('year'=>'.*'); $query = array('year'=>'2014'); $entries=$db->multisearch($query); uasort($entries, 'compare_bib_entries'); foreach ($entries as $bibentry) { echo $bibentry->toHTML()."<br/>"; } ?>
如何将出版物列表嵌入主页中?
在上面的代码片段中,只有包含 'Martin Monperrus' 作为作者的 bibtex 条目将被提取,而不是 'Monperrus, Martin'。为了解决这个问题,您需要将 define('USE_FIRST_THEN_LAST',true); 添加到 php-query 或 bibtexbrowser.local.php
如何更改引用样式?
通过修改CSS
如果存在bibtexbrowser.css文件,则使用它;否则bibtexbrowser将使用其自身的内嵌CSS样式(参见函数bibtexbrowserDefaultCSS)。CSS定制的一个例子是
.date { background-color: blue; } .btb-header { } .rheader { font-size: large } .bibref { padding:3px; padding-left:15px; vertical-align:top;} .bibtitle { font-weight:bold; } .bibbooktitle { font-style:italic; }
例如,可以通过禁用一些标题和信息来调整输出。
.bibmenu {display:none} /* disables the [bibtex] and the like */ .bibanchor {display:none} /* disables the index [1] or [Name2010], etc. depending on the value of the configuration value ABBRV_TYPE and BIBTEXBROWSER_LAYOUT .theader {display:none} .sheader {display:none} /* disables the year header e.g., 2001 */
通过设置自己的样式函数 参考文献样式封装在函数中。如果想要修改参考文献样式,可以复制默认样式到一个新文件,例如 bibtexbrowser-yourstyle.php,并将函数 DefaultBibliographyStyle 重命名为 MyFancyBibliographyStyle。然后,在文件 bibtexbrowser.local.php 中添加
<?php function MyFancyBibliographyStyle(&$bibentry) { return $bibentry->getTitle().' ('.$bibentry->formattedAuthors(.')'; } define('BIBLIOGRAPHYSTYLE','MyFancyBibliographyStyle'); ?>
如何使用IEEE参考文献样式?
在 bibtexbrowser.php 所在的文件夹中创建一个名为 `bibtexbrowser.local.php` 的文件,包含以下内容
<?php // JanosBibliographyStyle is the IEEE contributed by Janos Tapolcai define('BIBLIOGRAPHYSTYLE','JanosBibliographyStyle'); ?>
另请参阅 遵循IEEE引用指南的另一个bibtexbrowser自定义引用样式(在github上)。
如何更改链接样式?
默认情况下,每个参考文献条目后面会跟有[bibtex] [pdf] [doi]等。
可以通过以下配置进行定制(在文件 bibtexbrowser.local.php 中)
<?php define('BIBTEXBROWSER_LINK_STYLE','MyFancyBib2links'); function MyFancyBib2links(&$bibentry) { // bib is a special type of link. without the url argument or with an invalid image, it prints '[bibtex]' $result = $bibentry->getBibLink(); $result .= ' '.$bibentry->getLink('url'); // Google Scholar ID. empty string if no gsid field present $result .= ' '.$bibentry->getGSLink(); // returns an empty string if no doi field present $result .= ' '.$bibentry->getDoiLink(); return $result; } ?>
可以使用自定义函数为bibtex添加对新字段的支持(例如 pdf,file等)。检查函数 getLink(),getBibLink(),getGSLink() 和 getDoiLink() 的文档:它们接受一个可选参数,可以提供一个图像/图标来代替文本。
// returns an empty string if no pdf field present $result .= $bibentry->getLink('pdf','http://url.to/icons/pdf.png'); // returns an empty string if no slides field present $result .= $bibentry->getLink('slides'); // returns an empty string if no poster field present $result .= $bibentry->getLink('poster');
如何指定bibtex文件的编码(UTF-8/ISO-8859-1等)?
默认情况下,bibtexbrowser假设bibtex文件是UTF-8编码的。如果想要将其更改为例如ISO-8859-1,在 bibtexbrowser.local.php 中添加
define('BIBTEX_INPUT_ENCODING','ISO-8859-1');
请注意,如果bibtex只包含LaTeX编码的重音符号(例如\'e),则没有关系。bibtex文件的编码和生成的HTML文件的编码相同。
如何禁用JavaScript渐进增强?
在 bibtexbrowser.local.php 中添加: define('BIBTEXBROWSER_USE_PROGRESSIVE_ENHANCEMENT',false);
如何移除"[bibtex]"链接?
@define('BIBTEXBROWSER_BIBTEX_LINKS',false);
如何更改参考文献索引?
ABBRV_TYPE的配置驱动索引
// index => [1] The essence of metamodeling // year => [2005] The essence of metamodeling // x-abbrv => [SoSyM] The essence of metamodeling if the bibtex entry contains a field x-abbrv define('ABBRV_TYPE','year');// may be year/x-abbrv/key/none/index
也可以扩展类SimpleDisplay来调整索引。
例如,此配置...
// bibtexbrowser.local.php class SimpleDisplayExt extends SimpleDisplay { // overriding the default function setIndices() { $this->setIndicesInIncreasingOrderChangingEveryYear(); } } bibtexbrowser_configure('BIBTEXBROWSER_DEFAULT_DISPLAY','SimpleDisplayExt');结果是在每年重置数字索引如下
2017 [1] article1... (2017) [pdf] [doi] [2] article2... (2017) [pdf] [doi] [3] article3... (2017) [pdf] [doi] etc.. 2016 [1] article1... (2017) [pdf] [doi] [2] article2... (2017) [pdf] [doi] [3] article3... (2017) [pdf] [doi]
如何使用“学术风格”?
默认的学术模式创建四个部分
- 书籍 - 文章和书籍章节 - 工作坊论文(对于字段booktitle中包含“workshop”的条目) - 其他
你可以在 bibtexbrowser.local.php 中创建自己的(也请参阅下方的“创建bibtexbrowser.local.php”)
define('BIBLIOGRAPHYSECTIONS','my_sectioning'); function my_sectioning() { return array( // Books array( 'query' => array(Q_TYPE=>'book'), 'title' => 'Books' ), // Articles array( 'query' => array(Q_TYPE=>'article'), 'title' => 'Refereed Articles' ), // Conference and Workshop papers array( 'query' => array(Q_TYPE=>'inproceedings'), 'title' => 'Conference and Workshop Papers' ), // others array( 'query' => array(Q_TYPE=>'misc|phdthesis|mastersthesis|bachelorsthesis|techreport'), 'title' => 'Other Publications' ) ); }
如何嵌入单个bibtex页面?
define('BIBTEXBROWSER_URL','');
如何添加会议/工作坊论文的幻灯片链接?
只需简单填写bibtex条目的 comment 字段,添加一个HTML链接即可: @inproceedings{foo, author="Jean Dupont", title="Bibtexbrowser", year=2009, booktitle="BIB会议论文集", comment={<a href="myslides.pdf">[slides]</a>} }
此注释字段还可以用于添加接受率和影响因子。
如何本地化bibtexbrowser?
在 bibtexbrowser.local.php 中添加
<?php global $BIBTEXBROWSER_LANG; $BIBTEXBROWSER_LANG=array(); $BIBTEXBROWSER_LANG['Refereed Conference Papers']="Conférences avec comité de lecture"; ... $BIBTEXBROWSER_LANG['Year']="Année"; ?>
如何更改默认框架?
在 bibtexbrowser.local.php 中添加
<?php // or any valid query: year=2010, author=Jane, etc. @define('BIBTEXBROWSER_DEFAULT_FRAME','all'); ?>
如何配置Bibtex条目的排序顺序?
默认顺序是首先按bibtex字段year排序,然后按bibtex字段month排序,通过函数 `compare_bib_entry_by_year` 和 `compare_bib_entry_by_month`。
您可以通过在bibtexbrowser.local.php中定义define('ORDER_FUNCTION',...)和define('ORDER_FUNCTION_FINE',...)来修改此设置。
<?php function my_own_order($a, $b) { return strcmp($a->getKey(),$b->getkey()); } define('ORDER_FUNCTION','my_own_order'); ?>
如何更改结果页面的标题?
您可以在bibtexbrowser.local.php中创建自己的标题函数(参见下文“创建bibtexbrowser.local.php”部分)。
define('BIBLIOGRAPHYTITLE','my_title_function'); function my_title_function($query) { return "Publications of the Nuclear Research Group"; }参考DefaultBibliographyTitle函数以获取灵感。
如何禁止爬虫索引?
请在bibtexbrowser.local.php中添加(参见下文“创建bibtexbrowser.local.php”部分)。
define('BIBTEXBROWSER_ROBOTS_NOINDEX', true);
如何从动态字符串中加载Bibtex?
您可以在新的分发器中使用特殊的php://memory功能。请在bibtexbrowser.local.php中添加。
define("BIBTEXBROWSER_MAIN", 'DynamicDispatcher');
然后,在bibtexbrowser.after.php中
<?php class DynamicDispatcher extends Dispatcher { function getDB() { $data = fopen('php://memory','x+'); $dynamic_string = "@book{aKey,title={A Book},author={Jan Doe},publisher={Springer},year=2009}\n"; fwrite($data, $dynamic_string); fseek($data,0); $db = new BibDataBase(); $db->update_internal("inline", $data); return $db; } } ?>
如何加载其他格式的文献数据?
如果您的文献数据来自XML或数据库,您仍然可以使用bibtexbrowser浏览它,如下所示:请在bibtexbrowser.local.php中添加。
define("BIBTEXBROWSER_MAIN", 'PgmDispatcher');
然后,在bibtexbrowser.after.php中
<?php class PgmDispatcher extends Dispatcher { function getDB() { $db = new BibDataBase(); // builds the first entry $entry = new BibEntry(); $entry->setType("article"); $entry->setField("title", "foo"); $entry->setField("year", "2014"); $entry->setKey("kolp"); $db->addEntry($entry); // builds the second entry $entry2 = new BibEntry(); $entry2->setType("article"); $entry2->setField("title", "bar"); $entry2->setField("year", "2013"); $entry2->setKey("tili"); $db->addEntry($entry2); return $db; } } ?>
如何从bibtex文本中删除字段?
如果您想从生成的bibtex中删除一些字段(例如,缩写和注释),请在bibtexbrowser.local.php中添加。
<?php define('BIBTEXBROWSER_BIBTEX_VIEW','reconstructed'); define('BIBTEXBROWSER_BIBTEX_VIEW_FILTEREDOUT','abbrv|comment'); ?>
如何在输出中激活页码?
在 bibtexbrowser.local.php 中添加
<?php bibtexbrowser_configure('BIBTEXBROWSER_DEFAULT_DISPLAY','PagedDisplay'); bibtexbrowser_configure('PAGE_SIZE','3'); ?>
如何覆盖frameset和header?
您可以按以下方式自定义每个视图,特别是通过操作BIBTEXBROWSER_URL。
frameset.html:
<html> <frameset cols="15%,*"> <frame name="menu" src="menu.php" /> <frame name="main" src="output.php" /> </frameset> </html>
menu.php:
MENU (no header sent) <?php define('BIBTEXBROWSER_URL','output.php'); $_GET['menu']=1; $_GET['bib']='foo.bib'; include('bibtexbrowser.php'); ?>
output.php:
OUTPUT (no header sent) <?php define('BIBTEXBROWSER_URL','elem.php'); include('bibtexbrowser.php'); ?>
elem.php:
ELEM (no header sent) <?php include('bibtexbrowser.php'); ?>
如何在作者网页中添加超链接?
您必须在bibtex文件中添加一个@string块,其中包含链接。键是hp_和FirstNameLastName(无空格)的连接。例如
@String { hp_ericfoo = {http://www.foo.de/}, hp_joebar = {http://www.joebar.me/}, }
如何在命令行中修改bibtex条目?
使用bibtexbrowser-cli.php。例如
php bibtexbrowser-cli.php mybib.bib --id classical --set-title \"a new title\" --id with_abstract --set-title \"a new title\" --set-year 1990
如何与composer一起使用?
Bibtexbrowser现在可以通过composer从packagist下载。
在您的项目的`composer.json`中,只需添加以下内容
"monperrus/bibtexbrowser": "dev-master"。例如
{ "require": { "monperrus/bibtexbrowser": "dev-master" } }
使用composer,可以使用以下命令启动测试服务器
cd vendor/monperrus/bibtexbrowser/
composer serve这将运行此脚本
php -S localhost:29896 bibtexbrowser.php
现在,要显示浏览器中的特定bibtex文件,URI应采用以下形式
localhost:29896/?bib=bibfile.bib注意端口号后面的正斜杠。
如何在frameset模式下在主视图中添加横幅?
例如,如果您想在frameset模式的主视图中添加“主页”按钮,请在bibtexbrowser.local.php中添加以下横幅函数
<?php function bibtexbrowser_top_banner() { return '<a href="/home">Home page</a>'; } ?>
如何配置bibtexbrowser生成的元数据类型?
Bibtexbrowser可以生成Coins、Google Scholar、Dublin Core (DC)、Opengraph和Eprints元数据。这可以在bibtexbrowser.local.php中按以下方式配置
<?php @define('METADATA_COINS',true); // see https://en.wikipedia.org/wiki/COinS @define('METADATA_GS',false); // metadata google scholar, see http://www.monperrus.net/martin/accurate+bibliographic+metadata+and+google+scholar @define('METADATA_DC',true); // see http://dublincore.org/ @define('METADATA_OPENGRAPH',true); // see http://ogp.me/ @define('METADATA_EPRINTS',false); // see https://wiki.eprints.org/w/Category:EPrints_Metadata_Fields ?>
如何运行针对其他PHP版本的测试?
在Docker中找到正确的映像,例如8.3.11-cli-alpine,并创建`container/Dockerfile`
FROM php:8.3.11-cli-alpine RUN apk add phpunit WORKDIR /tmp CMD [ "phpunit"]
然后,docker build container,然后docker run -v /path/to/bibtexbrowser.dir:/tmp -ti 4f3591b79a60 /tmp/BibtexbrowserTest.php
相关工具
过时:bibhtml,bib2html,bibtohtml,bibtextohtml,bibtex2html,bibtex2web,stratego bibtex module 与它们不同,bibtexbrowser 是动态的,即实时生成 HTML 页面。因此,每次 bib 文件更改时,您不需要重新生成静态 HTML 文件。
重量级:PHP BibTeX 数据库管理器,bibadmin,basilic,phpbibman,aigaion,refbase,wikindx,refdb 与它们不同,bibtexbrowser 不需要 MySQL 数据库。
主要竞争对手:具有相同精神的 SimplyBibtex,但该项目自 2006 年以来似乎已经停止。
版权
此脚本是从德克萨斯大学埃尔帕索分校的 Joel Garcia、Leonardo Ruiz 和 Yoonsik Cheon 的一个优秀脚本中衍生出来的。
bibtexbrowser 是自由软件;您可以在自由软件基金会发布的 GNU 通用公共许可证的条款下重新分发和/或修改它;许可证版本 2,或(根据您的选择)任何较新版本。