问题

问题

我想在命令中存储 bib 文件路径的一部分。但是如果我运行此示例(无需 bib 文件或 bib 条目即可查看问题),路径中会出现不需要的空格:

\documentclass[]{scrartcl}
\usepackage{biblatex}
\newcommand\pathtosrc{test/}
\addbibresource{\pathtosrc contact.bib}
%\edef\bibpath{\pathtosrc contact.bib}
%\addbibresource{\bibpath}
\begin{document}
\cite{a}
\end{document}

biber 给出错误信息,表明路径中的 test/ 后面有一个空格:

 ERROR - Cannot find 'test/ contact.bib'

问题

  • 这是一个错误还是一个功能?

  • 如何才能抑制变体之间的空间差异\edef

答案1

\addbibresource\begingroup\blx@hook@fileverb什么

\let\do\@makeother\dospecials\catcode`\\=\z@\catcode`\{=\@ne\catcode`\}=\tw@

在抓取真实参数之前,结果是参数中的空格被类别代码 12 吸收,因此它们在控制序列之后不会被忽略。

我想说尝试一下

\appto\blx@hook@fileverb{\catcode`\ =10 }

但是当名称包含空格时,我不知道文件名解释会产生什么后果。

完整示例:

\documentclass[]{scrartcl}
\usepackage{biblatex}
\makeatletter
\appto\blx@hook@fileverb{\catcode`\ =10 }
\makeatother
\newcommand\pathtosrc{Tesi classica/}
\addbibresource{\pathtosrc Bibliografia.bib}
\begin{document}
\cite{a}
\end{document}

我的工作目录中有一个Tesi classica目录。这是运行 Biber 时的终端输出:

INFO - This is Biber 1.9
INFO - Logfile is 'addbibspace.blg'
INFO - Reading 'addbibspace.bcf'
INFO - Found 1 citekeys in bib section 0
INFO - Processing section 0
INFO - Looking for bibtex format file 'Tesi classica/Bibliografia.bib' for section 0
INFO - Decoding LaTeX character macros into UTF-8
INFO - Found BibTeX data source 'Tesi classica/Bibliografia.bib'
WARN - I didn't find a database entry for 'a' (section 0)
INFO - Overriding locale 'en-US' defaults 'normalization = NFD' with 'normalization = prenormalized'
INFO - Overriding locale 'en-US' defaults 'variable = shifted' with 'variable = non-ignorable'
INFO - Sorting list 'nty' of type 'entry' with scheme 'nty' and locale 'en-US'
INFO - No sort tailoring available for locale 'en-US'
INFO - Writing 'addbibspace.bbl' with encoding 'ascii'
INFO - Output to addbibspace.bbl
INFO - WARNINGS: 1

因此建议的路径似乎有效。

如果没有补丁,以下策略

\makeatletter
\newcommand{\definebiberpath}[2]{%
   \newcommand{#1}{#2\@gobble}%
}
\makeatother

\definebiberpath{\pathtosrc}{Tesi classica/}

将工作。

相关内容