为什么空格 make 无法评估 \bibliography 中的命令

为什么空格 make 无法评估 \bibliography 中的命令

我创建了一个命令,其中包含一个以逗号和空格分隔的 bib 文件列表。然后,我将此命令提供给\bibliography,它不会产生任何参考书目。

如果我创建相同的列表但仅用逗号分隔(没有空格),则会生成参考书目。

以下是 MWE:

\documentclass{article}
    \newcommand{\PathBaseBib}{./biblioA.bib, ./biblioB.bib} % this is not working
    %\newcommand{\PathBaseBib}{./biblioA.bib,./biblioB.bib} % this (without space) is working
    \usepackage{natbib}
        \bibliographystyle{plain}

\begin{document}
    \cite{Knuth81} \cite{Lamport94}

    \bibliography{\PathBaseBib}
\end{document}

所以我想了解为什么这个简单的空格会导致命令失败\bibliogrpahy。出于美观的原因,我想知道是否可以纠正这个问题,然后使用\bibliography包含空格列表的命令进行输入。

答案1

由于\bibdata在辅助文件中写入的,由于 BibTeX 读取其输入的方式,不希望其参数中有空格,因此标准\bibliography命令会执行\zap@space,但如果参数是宏,则会失败。

您可以按照如下方式修复此问题:

\documentclass{article}
\usepackage{xpatch}

\makeatletter
\xpatchcmd{\bibliography}{\zap@space #1}{\expandafter\zap@space\expanded{#1}}{}{}
\makeatother

\newcommand{\PathBaseBib}{./biblioA, ./biblioB} % this is not working

\bibliographystyle{plain}

\begin{document}

\cite{Knuth81} \cite{Lamport94}

\bibliography{\PathBaseBib}

\end{document}

这将写入.aux文件中:

\relax 
\bibstyle{plain}
\citation{Knuth81}
\citation{Lamport94}
\bibdata{./biblioA,./biblioB}
\gdef \@abspage@last{1}

您会发现空间已被删除。

请注意,添加.bib到文件是不是一般情况下允许。只有 MiKTeX 允许,但不应该。

相关内容