重新编程后记以引用示例数字和范围(Biblatex)

重新编程后记以引用示例数字和范围(Biblatex)

当使用\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这是、、expl3LaTeX2e 和诡计的邪恶组合biblatex

第一步显然是在分号处拆分输入。然后我们需要将冒号前后的位分开。冒号前的位biblatex通常打印为\mkpageprefix(因此响应字段pagination)。冒号后的位也打印为,但我们伪造了字段的\mkpageprefix值,以便我们可以看到示例中的“ex.”examplepagination

此解决方案不会在页面范围之间添加“与”,因为它将页面范围的排版委托给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}

Sigfridsson 和 Ryde(1998 年,第 45-52、63-65 页,例 3-6;第 57-68 页,例 21-23;第 72-74 页)

相关内容