引用样式的 N 首词命令

引用样式的 N 首词命令

我需要一种方法来显示引文中标题的前三个单词,如果某些单词未显示,则添加点。我正在使用 Biblatex。

\nfirstwords[3]{I Like Apples and Oranges}{\dots}
\nfirstwords[3]{I Like Apples}{\dots}

将会给予:

I Like Apples...
I Like Apples

答案1

如果您正在使用 biber,您可以在读取 .bib 文件时使用此 biber.conf 文件执行此操作:

<?xml version="1.0" encoding="UTF-8"?>
<config>
  <sourcemap>
    <maps datatype="bibtex" map_overwrite="1">
      <map>
        <map_step map_field_source="TITLE"
                  map_match="\A((?:[^\s]+\s+){2})([^\s]+).+"
                  map_replace="$1$2\\ldots"/>
      </map>
    </maps>
  </sourcemap>
</config>

请注意,这是 biber 0.9.8 配置文件格式,您需要使用 biber 0.9.8 beta。显然,您可以使用各种正则表达式来实现这一点,以上只是一个例子。

答案2

这对于任意n,但如果您事先知道您需要 3 个单词(并且字符串不包含\\,尽管可以通过在以下代码中替换另一个控制序列来轻松更改这一点),那么这个 MWE 应该可以解决问题:

\documentclass{article}

\usepackage{etoolbox}% I need \ifblank to put \dots if something nonblank gets deleted

\makeatletter

\def\@threefirstwords #1 #2 #3 #4\\#5{%
  #1 #2 #3\ifblank{#4}{}{#5}%
}
\edef\threefirstwords#1#2{\noexpand\@threefirstwords #1\space\space\space\noexpand\\{#2}}

\makeatother

\begin{document}

\threefirstwords{This is a test}{\dots}

\threefirstwords{This is a}{\dots}

\threefirstwords{This is}{\dots}

\threefirstwords{This}{\dots}

\end{document}

biblatex啊,这似乎与参考书目没有任何关系。

相关内容