![仅列出高于第 1 期且位于出版商之后的版本](https://linux22.com/image/268003/%E4%BB%85%E5%88%97%E5%87%BA%E9%AB%98%E4%BA%8E%E7%AC%AC%201%20%E6%9C%9F%E4%B8%94%E4%BD%8D%E4%BA%8E%E5%87%BA%E7%89%88%E5%95%86%E4%B9%8B%E5%90%8E%E7%9A%84%E7%89%88%E6%9C%AC.png)
我正在尝试根据需求定制 biblatex。目前,我正在研究 -class book
。
现状基于以下 MWE。正如我在标题中指出的那样,我希望它像这样:
史密斯,J.(2012):
《随机书名》,第 3 版,Springer,柏林。
或者如果该版本是第一版:
史密斯,J.(2012):
《随机书名》,施普林格出版社,柏林。
我尝试\newbibmacro
按照建议使用该命令,但我基本上只是对整个事情进行一些测试和测试。到目前为止,我得到了以下信息:
\renewbibmacro*{publisher+location}{%
\iflistundef{publisher}
{\setunit*{\addspace}}
{\setunit*{\addcomma\space}}
\printlist{publisher}
\setunit*{\addcomma\space}
\printlist{location}
\newunit}
我觉得我可以为这个宏添加一些内容,但这样做毫无用处。它反而“毁掉了”我迄今为止取得的成果。
答案1
我感觉你正试图对标准authoryear
风格进行相当大的改变。我能否集中讨论一下你提出的最直接的问题,即出版商和位置点。
你基本上走在正确的轨道上。相关的宏实际上被调用了publisher+location+date
(尽管,出于现在不重要的原因,它最终并没有以样式打印日期authoryear
。你的重新定义基本上可以工作,但是(因为你已经重新定义了\newunitpunct
)你可以让它更简单
\renewbibmacro*{publisher+location+date}{%
\newunit
\printlist{publisher}%
\newunit
\printlist{location}%
\newunit}
就你的版就这一点而言,版本在驱动程序中处理得相当早——它通常跟在标题后面。我怀疑这真的是你想要的(在一般情况下,这意味着版本后面是出版商和位置)。如果你想移动它,以便它总是在出版商之前立即处理,你需要重写驱动程序。但请找一个有合理数据的例子,打印版本错误的在尝试之前,因为我怀疑实际上没有问题。
更新
至于如果版本为“1”,则不打印版本,我认为可以通过以下重新定义字段格式来实现。请注意,仅有的“捕获”(但不打印)精确的“1”:将打印“1st”或“First”。
\DeclareFieldFormat{edition}{%
\ifstrequal{#1}{1}
{}
{\ifinteger{#1}
{\mkbibordedition{#1}~\bibstring{edition}}
{#1\isdot}}}
.bib
但请再考虑一下!当然,如果是第一版,通常不会在文件中包括版本信息。但如果这样的信息是包括,为什么不应该打印出来?如果您/您的用户希望引用特定作品的第一版和第二版,会发生什么情况?