monperrus/bibtexbrowser

bibtexbrowser 是一个PHP脚本,可以从Bibtex文件创建出版物列表。bibtexbrowser 稳定、成熟且易于安装。

dev-master 2024-08-31 06:40 UTC

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 元数据,以便与 ZoteroMendeley 自动导入参考文献条目。
  • 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 文件

基本安装

创建一个包含出版物记录的 bib 文件(例如 csgroup2008.bib),并将其上传到您的服务器。

  • 使用链接 bibtexbrowser.php?bib=csgroup2008.bib(基于框架的视图)
  • 使用链接 bibtexbrowser.php?bib=csgroup2008.bib&all(按年份排序的出版物列表)
  • 使用链接 bibtexbrowser.php?bib=csgroup2008.bib&all&academic(按出版物类型排序的出版物列表,然后按年份排序,请参阅下文中的“学术模式下的分段”)
警告:bibtexbrowser 维护解析后的 bibtex 的缓存版本,为了高性能,请确保 PHP 可以写入 PHP 的工作目录。

处理多个 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添加对新字段的支持(例如 pdffile等)。检查函数 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

相关工具

过时:bibhtmlbib2htmlbibtohtmlbibtextohtmlbibtex2htmlbibtex2webstratego bibtex module 与它们不同,bibtexbrowser 是动态的,即实时生成 HTML 页面。因此,每次 bib 文件更改时,您不需要重新生成静态 HTML 文件。

重量级:PHP BibTeX 数据库管理器bibadminbasilicphpbibmanaigaionrefbasewikindxrefdb 与它们不同,bibtexbrowser 不需要 MySQL 数据库。

主要竞争对手:具有相同精神的 SimplyBibtex,但该项目自 2006 年以来似乎已经停止。

其他:此 MATLAB 脚本类似

版权

此脚本是从德克萨斯大学埃尔帕索分校的 Joel Garcia、Leonardo Ruiz 和 Yoonsik Cheon 的一个优秀脚本中衍生出来的。

bibtexbrowser 是自由软件;您可以在自由软件基金会发布的 GNU 通用公共许可证的条款下重新分发和/或修改它;许可证版本 2,或(根据您的选择)任何较新版本。

讨论/评论/反馈