难以使用命令行中的 Jabref 命令从 aux 文件生成子集 bib 文件

难以使用命令行中的 Jabref 命令从 aux 文件生成子集 bib 文件

我很高兴看到这个答案: https://tex.stackexchange.com/a/212133/69378我希望它能让我Export only used items通过命令行调用 jabref 来编写参考书目。我还没有完全探索同一问题的另一个答案(https://tex.stackexchange.com/a/41823/69378) 提出bibexport(主要是因为它在 上不可用MikTeX)。

我准备了一个如下形式的 Windows 命令行命令:JabRef.jar -a filename[.aux],newBibFile[.bib]

我的解释是: "F:\JabRef_3.6.jar" -n -a "test_article.aux","test_article.bib"

我已经尝试了所有能想到的方法,包括上述命令的所有组合以及通过以下方式反复更改:

  • 省略-n打开 JabRef GUI
  • 省略引号
  • 省略逗号并在后面使用两个参数-a
  • 对两个文件使用完整的文件路径
  • 删除文件扩展名并依靠顺序来暗示[.aux][.bib]
  • 在文件名上使用方括号test_article[.aux],并test_article[.bib]
  • new_test_article作为文件名使用
  • 有一个空test_article.bib文件等待,以防程序无法创建它,但只需附加
  • 经过测试使用JabRef-2.10.jarJabRef_3.6.jar 难度遗憾的是,在迭代了所有这些选项之后,我所做的一切都没有给我一个bib文件。

更新 1

我发现下面评论中的语法链接来自一个旧服务器,他们当前的常见问题解答(http://www.jabref.org/faq/)仅描述该过程:

问:我有一个 JabRef 数据库,我想导出与我的 LaTeX 文件对应的子集。该怎么做?

答:编译后,LaTeX 会生成一个扩展名为“.aux”的文件。此文件包含所引用参考文献的关键字(以及其他内容)。使用此 AUX 文件,JabRef 可以提取相关条目。选择菜单“工具”->“基于 AUX 文件的新子数据库”。然后选择参考数据库(在已打开的数据库中),并指定 AUX 文件。

我可以确认这种手动方法效果很好。

GUI 中的步骤之间的主要区别在于Tools -> New subdatabase based on AUX file您还必须提供参考 bib 文件。我发现命令行版本(如果仍然可用)可能也需要参考 bib 文件。

更新 2

具有更新的命令行配置的新链接: https://help.jabref.org/en/CommandLine

我现在使用以下形式的命令JabRef.jar --aux "infile.aux","outfile.bib" "base-BibTeX-file.bib"

其中每个文件都提供其完整的绝对文件路径和名称。

不幸的是,我仍然没有收到文件。

是否有人曾经使用过此行并从 Windows 命令行生成 bib 文件?

答案1

正如问题评论中所述,辅助导出的命令行功能有效。问题是它没有向用户提供真正的输出,如果源 bib 文件中有错误(显然有重复的键),操作会默默失败。这应该得到改进,我开了一个问题在 JabRefs 问题追踪器中

JabRef 的命令行语法经历了一些变化,目前可用的版本可以在帮助页面上找到。在 Windows 上,您可以使用不同的可执行文件,并且可以用不同的方式调用它们,但命令行参数的结构相同。您可以执行JabRef.exe,或JabRef-X.X.jar。根据本地机器的 Java 设置,您可能能够JabRef-X.X.jar直接执行或可能必须显式调用 Java,例如java -jar JabRef-X.X.jar(强烈建议,原因见下文)。

编辑:经过进一步研究,我可以说命令行可以以上述所有方式工作,但在命令行上获取输出的唯一方法是方式java -jar。因此,如果您想要输出,例如因为您的操作失败,请务必使用java -jar JabRef-X.X.jar,可能带有--debug选项。

对于此处讨论的基于辅助导出,您需要添加参数-a--aux。同时添加还可-n防止 JabRef 同时打开 GUI。 的参数结构--aux如下:infile.aux,outfile.bib base-BibTeX-file.bib,其中

  • infile.aux是包含您要导出的参考文献引文的辅助文件
  • outfile.bib是应将引用导出到的文件。如果此文件存在,则将被覆盖
  • base-BibTex-file.bib是 JabRef 尝试从中读取其尝试导出的参考文献的书目数据的文件

路径可以是绝对路径,也可以是相对路径,但常见的缺陷取决于操作系统,您需要注意(路径中的空格等)。此外,JabRef 必须具有 的写入权限outfile.bib

总而言之,以下命令应该有效:

"F:\JabRef_3.6.jar" -n -a infile.aux,outfile.bib base-BibTeX-file.bib

答案2

无法创建文件的原因可能是 bibtex 键重复,因此存在歧义。由于我使用的是派生文件,而我从未在 JabRef 中打开过该文件,因此我从未看到需要解决的重复键/条目的警告。

就我个人而言,我会在项目特定文件夹中的特定主题 bib 文件中管理我的参考资料。对于我在任何给定时间处于活动状态的任何项目,我都会使用一个小的 Java 程序将项目文件夹中的 bib 文件合并为一个组合文件。

由于不适合将其他项目的参考文献与这个项目一起分发,所以我想通过 bibtex 编译脚本(bat 文件)添加一个命令,然后在文档中使用时生成我编译的参考文献的 bib 文件。

最终的脚本比我上面的测试路径更加灵活:

@ECHO OFF

:CheckOS
IF "%PROCESSOR_ARCHITECTURE%"=="x86" (GOTO 32BIT) ELSE (GOTO 64BIT)

:64BIT
ECHO 64-bit compiling
SET MikTexPath=C:\Program Files\MiKTeX 2.9\miktex\bin\x64\
GOTO END

:32BIT
ECHO 32-bit compiling
SET MikTexPath=C:\Program Files\MiKTeX 2.9\miktex\bin\
GOTO END

:END

:: changed bu*.aux to *.aux to make bibtex bibunit independent
FOR %%B IN (*.aux) DO ( ECHO Will try and compile %%~dpB%%~nB with %MikTexPath%bibtex & "%MikTexPath%bibtex.exe" "%%~dpB%%~nB")

:: --aux infile[.aux],outfile[.bib] base-BibTeX-file
FOR %%B IN (*.aux) DO ( ECHO "Will try and create a reduced bib file (%%~dpB%%~nB.bib) from %%~dpB%%~B with jabref." & "JabRef_3.6.jar" -n --aux "%%~dpB%%~B","%%~dpB%%~nB.bib" "..\References\CombinedBibFile.bib")

相关内容