我需要一种方法来显示引文中标题的前三个单词,如果某些单词未显示,则添加点。我正在使用 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
啊,这似乎与参考书目没有任何关系。