![重新编程后记以引用示例数字和范围(Biblatex)](https://linux22.com/image/461106/%E9%87%8D%E6%96%B0%E7%BC%96%E7%A8%8B%E5%90%8E%E8%AE%B0%E4%BB%A5%E5%BC%95%E7%94%A8%E7%A4%BA%E4%BE%8B%E6%95%B0%E5%AD%97%E5%92%8C%E8%8C%83%E5%9B%B4%EF%BC%88Biblatex%EF%BC%89.png)
当使用\cite
或 时\textcite
,我喜欢作为 postnote 专用可选参数的一部分,除了页面范围之外,还提供一些示例数字,例如ex. 38
。
我正在寻求编写一个后记postnote:examples
,使我能够传递示例编号或范围并包含合理的界限:理想情况下,分号可以很好地将一系列示例与页面范围关联起来,而初始逗号可以用冒号代替。
我希望p./pp.
使用前缀。(如 MWE 所示,目前,当向后记中添加除页面以外的更多内容时,不支持使用前缀。)
另外,我需要一个和而不是在最后几页或示例数字中使用逗号。
例如,
\textcite[45-52,63-65:3-6;57-68:21-23;72-74:3-5,7-9]{ref}
将显示:
author (year: pp. 45-52 and 63-65, ex. 3-6; pp. 57-68, ex. 21-23; pp. 72-74, ex. 3-5 and 7-9).
问题是,我知道如何在某些特定情况下拆分可选参数,我在几篇文章中看到了如何传递无限元素列表,我可以通过查看模型来编写引用命令,但恐怕同时使用它们三个超出了我的技能水平。
编辑
回答后moewe
,似乎支持和在保留引言的同时,在最后两页或示例编号之间进行修改p./pp.
,将需要进行太多的调整。
有人能提供一种方法来得到这个和,甚至放弃p./pp.
?
平均能量损失
\documentclass{article}
\usepackage[citestyle=ext-authoryear-comp,backend=biber,natbib=true]{biblatex}
\newcommand{\exmp}[1]{\unskip,\space ex.\@\,#1}
\begin{filecontents}{\jobname.bib}
@book{smi96,
author = {Smith, Adam},
year = {1996},
title = {Economy},
publisher = {My company}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\textcite[54]{smi96}
\textcite[54\exmp{32}]{smi96}
\end{document}
答案1
xparse
这是、、expl3
LaTeX2e 和诡计的邪恶组合biblatex
。
第一步显然是在分号处拆分输入。然后我们需要将冒号前后的位分开。冒号前的位biblatex
通常打印为\mkpageprefix
(因此响应字段pagination
)。冒号后的位也打印为,但我们伪造了字段的\mkpageprefix
值,以便我们可以看到示例中的“ex.”example
pagination
此解决方案不会在页面范围之间添加“与”,因为它将页面范围的排版委托给biblatex
,只需用逗号分隔不同的范围。
\documentclass{article}
\usepackage[backend=biber, style=ext-authoryear-comp,]{biblatex}
\NewBibliographyString{example}
\NewBibliographyString{examples}
\DefineBibliographyStrings{english}{
example = {ex\adddot},
examples = {ex\adddot},
}
\DeclareFieldFormat{postnote}{\ppexformat{#1}}
\makeatletter
\ExplSyntaxOn
\seq_new:N \l_vk_ppex_chunks
\NewDocumentCommand\ppexformat{m}{\vk_ppex_chunk:n{#1}}
\cs_new_protected_nopar:Npn \vk_ppex_chunk:n #1
{
\seq_set_split:Nnn \l_vk_ppex_chunks ; {#1}
\seq_map_indexed_inline:Nn \l_vk_ppex_chunks
{
\int_compare:nNnT {##1} > {1}
{\addsemicolon\space}
\ppexformat@splitchunk {##2}
}
}
\ExplSyntaxOff
\NewDocumentCommand\ppexformat@splitchunk{>{\SplitArgument{1}{:}}m}{%
\ppexformat@ppex #1}
\NewDocumentCommand\ppexformat@ppex{mm}{%
\mkpageprefix[pagination][\mknormrange]{#1}%
\IfNoValueF{#2}
{\addcomma\space
\exformat{#2}}}
\newrobustcmd*{\exformat}[1]{%
\begingroup
\def\abx@field@pagination{example}%
\mkpageprefix[pagination][\mknormrange]{#1}%
\endgroup
}
\makeatother
\addbibresource{biblatex-examples.bib}
\begin{document}
\textcite[54]{sigfridsson}
\textcite[54:32]{sigfridsson}
\textcite[45-52,63-65:3-6;57-68:21-23;72-74]{sigfridsson}
\end{document}