如题, 自动检测当前编辑器用什么来编译bib文件,比如我用的是Texstudio,如何用宏命令知道我用的是Biber还是BibTex
例如:
\ifbiber
%% writing
\fi
\ifbibtex
%% writing
\fi
答案1
如果您的编辑器设置为运行 BibTeX 或 Biber ,我认为您无法实际使用.tex
文档中的 TeX 代码进行查询(如果您的编辑器在某些配置文件中公开了此信息,您可能能够使用某些 shell 转义读取此配置文件并解析信息,但这似乎非常非常困难,并且 shell 转义本身也存在安全风险)。
以下是您可以尝试使用 LaTeX 执行的操作。
您可以检查文档的最后一次运行是否使用了 Biber 或 BibTeX。为此,我们查看文件.blg
,看看它是否开始告诉
This is BibTeX, Version 0.99d
或者
[0] Config.pm:311> INFO - This is Biber 2.16
事情变得有点混乱,因为我们必须在读取时考虑正确的类别代码,但以下内容应该是可用的。问题是,你只能检测到事后运行了哪个书目引擎。您无法检测将/应该运行哪个引擎。
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage{etoolbox}
\makeatletter
\newread\cbe@blgin
\begingroup
\gundef\cbe@firstline
\openin\cbe@blgin\jobname.blg\relax
\ifeof\cbe@blgin
\else
\endlinechar\m@ne
\global\readline\cbe@blgin to \cbe@firstline
\fi
\closein\cbe@blgin
\gdef\ecb@expandfirsttwo#1#2#3{%
\edef\reserved@a{\noexpand#1#2#3}\reserved@a}
\xdef\ecb@thisisbiber{\detokenize{This is Biber}}
\expandafter\gdef
\expandafter\IfBiberUsedTF@i
\expandafter#\expandafter1
\ecb@thisisbiber #2\biberteststop{\notblank{#2}}
\gdef\IfBiberUsedTF{%
\ifundef\cbe@firstline
{\@secondoftwo}
{\ecb@expandfirsttwo\IfBiberUsedTF@i\cbe@firstline\ecb@thisisbiber\biberteststop}}
\xdef\ecb@thisisbibtex{\detokenize{This is BibTeX}}
\expandafter\gdef
\expandafter\IfBibTeXUsedTF@i
\expandafter#\expandafter1
\ecb@thisisbibtex #2\bibtexteststop{\notblank{#2}}
\gdef\IfBibTeXUsedTF{%
\ifundef\cbe@firstline
{\@secondoftwo}
{\ecb@expandfirsttwo\IfBibTeXUsedTF@i\cbe@firstline\ecb@thisisbibtex\bibtexteststop}}
\endgroup
\makeatother
\begin{document}
\IfBiberUsedTF{Biber}{No Biber}
\IfBibTeXUsedTF{BibTeX}{No BibTeX}
\end{document}
biblatex
如果您想检查应该运行哪个引擎(由于您加载的软件包),您可以使用 Biber只能在用户未指定的情况下使用backend=bibtex,
。所以我们可以检查这些条件
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber, style=authoryear]{biblatex}
\usepackage{etoolbox}
\makeatletter
\let\ecb@ifbibtex\@firstoftwo
\let\ecb@ifbiber\@secondoftwo
\AtBeginDocument{%
\@ifpackageloaded{biblatex}
{\iftoggle{blx@bibtex}
{}
{\let\ecb@ifbibtex\@secondoftwo
\let\ecb@ifbiber\@firstoftwo}}
{}}
\newcommand*{\IfBiberTF}{\ecb@ifbiber}
\newcommand*{\IfBibTeXTF}{\ecb@ifbibtex}
\makeatother
\begin{document}
\IfBiberTF{Use Biber}{Do not use Biber}
\IfBibTeXTF{Use BibTeX}{Do not use BibTeX}
\end{document}