我创建了一个命令,其中包含一个以逗号和空格分隔的 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 允许,但不应该。