考虑以下最小工作示例(MWE):
\documentclass{article}
\usepackage{xparse,titling}
\NewDocumentCommand\makethis { } {%
{\LARGE\theauthor\bigskip\par}
}
\author{Bob}
\usepackage[backend=biber]{biblatex}
\bibliography{biblatex-examples}
\begin{document}
\makethis
\end{document}
我原本以为这会将单个单词Bob
以\LARGE
字母形式排版,但结果却并非如此。事实上,它呈现的结果如下:
[请注意,如果没有xparse
,我会给你一个 NMWE(非工作最小示例)而不是 MWE,因为替换\NewDocumentCommand
为\newcommand
会导致编译错误,而不是零成功。]
或者考虑使用 Memoir 的这个 MWE:
\documentclass{memoir}
\author{Bob}
\usepackage[backend=biber]{biblatex}
\bibliography{biblatex-examples}
\begin{document}
\theauthor
\end{document}
再次,Bob 被 Biblatex 归零:
删除加载 Biblatex 的行可以解决问题,指定\author{Bob}
后加载 Biblatex 而不是前。
当 Bob 被定义时后加载 Biblatex,\theauthor
正如我所料,解析为Bob
:
> \theauthor=macro:
->Bob.
l.100 \show\theauthor
然而,当 Bob 被定义时前加载 Biblatex,\theauthor
解析方式有所不同:
> \theauthor=macro:
->\@arabic \c@author .
l.100 \show\theauthor
现在我可以通过其他方式轻松保护 Bob 不被归零。更令人担忧的是,Biblatex 似乎正在与titling
、Memoir 和类似的包/类竞争\theauthor
,我认为 Biblatex 使用名为 的计数器author
,而其竞争对手则定义\theauthor
来保留传递给 的值\author
。
如何最好地解决这种不兼容性?我猜这与以下代码有关biblatex_.sty
:
\def\do#1{%
\newcounter{#1}%
\newcounter{saved#1}%
\appto\abx@dobooleans{\do{more#1}}}
\abx@donames
\abx@dornames
\abx@dolists
这可能 ?? 与定义布尔值以进行条件处理有关,例如\ifauthor
。但如果是这样,这似乎相当危险地依赖于缺少任何类型的包前缀的宏名称,并且很可能被无意中覆盖或无意中覆盖其他内容。
同样,考虑到用于排版计数器,titling
使用和\theauthor
和\thetitle
总是\thedate
让我感到不妥\the...
。但是,当希望保留 和 的值而不使用 时,一些类和包已经使用了这种\author
约定\title
一段\date
时间\maketitle
。
grep
对中第一级子目录的初步分析tex/latex/
表明,该问题可能还会影响几个论文类别,、、、、等uspatent
。但是,由于我对其中大多数都不熟悉,因此我无法立即判断该问题是否会在它们的情况下产生任何症状,也没有进一步进行调查。seminar
droit-fr
ltugboat
ametsoc
abntex2
答案1
我对从数据模型派生的所有此类“裸”计数器进行了保存/恢复。据我所知,这似乎不会产生任何影响 - 所有测试文档都会生成相同的输出。问题比\theauthor
默认数据模型生成的输出更大\thetitle
。DEV 版本 3.4 已修复此问题。