我很高兴看到这个答案: 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.jar
和JabRef_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")