Сортировка авторов по фамилии в Tiddlywiki

Было бы хорошо отсортировать списки по фамилии автора.

У меня есть этот код в одном из тиддлеров, он перечисляет все тиддлеры с тегом "автор" и сортирует по алфавиту:

<$list filter='[tag[author]sort[title]]'>

</$list>

например

Adam Robinson
Andrew Adonis
Benjamin Franklin
Dale Carnegie
Daniel Priestley
George Leonard

Я бы хотел, чтобы список сортировался по фамилии, поэтому он выглядит так:

Adonis, Andrew 
Carnegie, Dale
Franklin, Benjamin
Leonard, George
Priestley, Daniel
Robinson, Adam 

Есть идеи, как это сделать?

2 ответа

Простой вариант: добавить поле ByLastName, заполненное так, как вы хотите, и отсортировать по нему.

Средний вариант: ввести понятие сгенерированных полей в tiddlywiki.

Жесткий вариант: измените фильтр сортировки так, чтобы он вызывал макрос с указанными вами данными, а затем сортируйте исходный список на основе результатов.

В последних версиях TiddlyWiki это можно сделать с помощью sortsub оператор , который сортирует на основе результатов применения выражения фильтра к входным данным. Обратите внимание, что когда вы используете этот оператор (или любой другой оператор, который принимает подфильтр), вы должны определить подфильтр с помощью макроса , иначе TiddlyWiki не сможет указать, какие квадратные скобки являются частью основного фильтра, а какие - частью. подфильтр.

Вот минимальная рабочая версия:

      \define myfilt() [split[ ]last[]]

<$list filter="[tag[author]sortsub<myfilt>]">
  ...
</$list>

Чтобы дисплей отображался как «Фамилия, Имя», как в вашем примере, а не просто отображал заголовок тиддлера как есть:

      \define myfilt() [split[ ]last[]]

<$list filter="[tag[author]sortsub<myfilt>]">
  <$set name=formattedName value={{{ [all[current]split[ ]last[]addsuffix[, ]] [all[current]split[ ]butlast[]] +[join[]] }}}>
    <$link to=<<currentTiddler>>><<formattedName>></$link><br>
  </$set>
</$list>

Мы рассчитываем новый формат с помощью фильтра в {{{ triple curly braces }}} и присвоить его переменной (обратите внимание на использование butlast[] скорее, чем first[]так что если у кого-то более двух имен, средние идут в конце, а не исчезают). Затем мы создаем ссылку, текст которой представляет собой эту новую отформатированную версию, а целью является исходное имя тиддлера.

Другие вопросы по тегам