Как настроить Zotero Integration в Obsidian раз и навсегда

Данный пост был обновлен 12.10.2023
Все новые фишки, шаблоны и ссылки были добавлены в пост.


Несмотря на отличную работу Readwise’а, принизить трушность и удобство Zotero нельзя(и плохо :grinning:). Поэтому давайте разбираться как его настроить в связке с Obsidian.

  • Но перед этим скажу какой конечный результат будет от проделанных манипуляций:
    • Любые аннотации, как текст так и изображения, будут выгружаться в Obsidian в удобном и заданном для вас формате(используя шаблон).

    • Аннотации и ваши комментарии к ним теперь выносятся в Callouts, которые будут соответствовать цветам выделений в Zotero. Те, у кого определенный цвет аннотаций означает определенный тип выделения(важно, не понял, проверить, и т.д), особенно оценят это улучшение.

    • Добавился необходимый CSS сниппет реализующий вышеописанную функцию

    • Аннотации, независимо где вы их делали, в телефоне или на ПК, будут синхронизироваться и в дальнейшем экспортироваться в Obsidian.

    • Аннотации, которые вы выгрузили а Obsidian, будут содержать работающие ссылки на места выделения в Zotero. Как на телефоне так и на ПК.

    • Пользователи Zotero для iOS смогут начать использовать им как читалкой для всего что PDF или веб-архив.

1. Подготовка Zotero

Первым делом нам надо установить плагин Better BibTeX для Zotero.
Переходим в данный репозиторий GitHub и скачиваем первый файл с расширением .xpi
Плагин часто обновляется так что смотрите на последий релиз и качайте его. После можно будет самвыставить автоматическое обновление в самом Zotero.

После открываем Zotero и слева наверху жмём на Tools, а затем на Add-ons. Откроется окно Extensions куда вы должды перетащить файл, скачанный по ссылке выше. Перезапускаете и готово. И никаких Mdnotes не понадобится.

2. Подготовка Obsidian

В Obsidian скачиваем плагин Zotero Integration и заходим в его опции.
Далее, на фото укажу нумерацию шагов для вашего удобства.

Фото тут :)

  1. Скачиваем PDF Utility, нажимая на данную нам кнопку.

  2. В разделе Note Import Location указываем место куда, собственно, будут выгружаться, сделанные вами в Zotero аннотации. Указываем нужную папку. У меня они храняться в Sources/Zotero. При первом импорте папка Zotero создастся сама.

  3. Включаем Enable Annotation Concatenation, что позволит вам обновлять заметку с аннотациями если вы, к примеру, сделали еще пару выделений в вашей ПДФке и снова импортировали, то тогда существующая заметка перепишется, дополнив новые пометки.

    • Важно! Поэтому если вы вынесли выделения в Обсидиан, затем уже в этой заметке что то сами дописали, а затем еще раз сделали пометки в Zotero и заново экспортировали в Обс, то файл перепишется и ВАШИ добавления(мысли или ссылки) исчезнут. Keep that in mind.

    • Решение: Чтобы такого не было можно поменять название заметки с выгруженными аннотациями и тогда последующая выгрузка создаст просто такой же файл, но обновленный, при этом ваш старый файл не перепишется, а затем вы из старого файла перенесете написанное вами в новый.

3. Подготовка Шаблона

Теперь, перед тем как продолжить, разберемся с шаблоном по которому будут выгружаться ваши заметки.

Открываем вашу папку-хранилище или, по-другому, ваш Obsidian Vault. Не в самом Obsidian, а вашу локальную папку где лежат все ваши маркдаун файлы. Переходим в папку где выбудете хранить шаблоны для экспорта аннотаций. Я их храню в папке Extra, вы можете где угодно, разницы нет. Создаем маркдаун файл в выбранной вами папке и даем им название вроде ZoteroTemplateBook.md (на ваше усмотрение).

Вот так

Открываем файл любым текстовым редактором и вставляем туда содержимое шаблона:

Вставить вот это. (P.S Этот шаблон я использую для книг)
> [!info] Metadata
> **Title**:: {{title}}
>
> **Author**:: {{authors}}; {{directors}}
> **Year**:: {{date | format ("YYYY")}}
>
> **Item Type**:: {{itemType | capitalize}}
> **Edition**:: {{edition}}
> **Publisher**: {{publisher}}
> **Pages**:: {{numPages}}
>
> *Read start*::
> *Read end*::
> 
> **Tags**:: `{{hashTags}}` #source/zotero
> **Keywords**:: {{allTags}}
> **URL**:: {{url}}

> [!link]+ Zotero Link
>{{pdfZoteroLink}}

> [!abstract]+
> {{abstractNote}}

### The Book in 3 Sentences


### What can I apply


### Key Takeaways & Evergreens


### Impressions


### How the Book Changed Me


### My Top 3 Quotes


### Highlights
{% for annotation in annotations -%}
>[!Annotation|{{annotation.color}}]+
>{%- if annotation.annotatedText -%}*« {{annotation.annotatedText}} »* ([Page {{annotation.page}}](zotero://open-pdf/library/items/{{annotation.attachment.itemKey}}?page={{annotation.page}}&annotation={{annotation.id}})){% endif %}{% if annotation.imageRelativePath %}![[{{annotation.imageRelativePath}}]][View on page {{annotation.page}}](zotero://open-pdf/library/items/{{annotation.attachment.itemKey}}?page={{annotation.page}}){% endif %}{% if annotation.comment %}
>
>{{annotation.comment}}{%- endif %}

{% endfor %}

Как вы поняли, все то, что НЕ формулы(под хедером #, или Read Start-ReadEnd) вы можете менять как угодно. А то что в {{ }} скобках лучше не трогать, если только не знаете как с ними работать.

Третье с конца условие > {{annotation.comment}}{%- endif %} это то, в каком формате будут отбражаться ВАШИ заметки\комментарии к выделениям в Zotero. Этот символ > делает ВАШИ заметки к выделениям цитатой, то бишь blockquote. По рекомендации Рустама, можете добавить туда второй символ > , чтобы сделать ваши комментарии визуально заметней.

Всталяем, сохраняем, готово.
Я использую 3 шаблона: для книг(тот что приложил выше), научных статей, и обычных. Отличаются они тем, что в шаблоне для research paper, к примеру, более богатаяьше метадата, чем в книгах.

Нижу приложу содержимое оставшихся двух для тех кому они нужны. Так же создаем для них маркдаун файлы и вставляем туда нужное содержимое.

Для research articles
> [!info]+ Metadata
> **Title**:: {{title}}
> 
> **Author**:: {{authors}}; {{directors}}
> **Year**:: {{date | format ("YYYY")}}
> **Item Type**:: {{itemType}}
>
> **Citekey**:: {{citationKey}}
> **Tags**:: `{{hashTags}}` #source/zotero
> **Keywords**:: {{allTags}}
> **Related**:: {{related}}
>
> **Journal**:: {{publicationTitle}}
> **Issue**:: {{issue}}
> **Volume**:: {{volume}}
>
> *Read start*::
> *Read end*::
> 
> **URL**:: {{url}}
> **DOI**:: {{DOI}}

> [!link]+ Zotero Link
> {{pdfZoteroLink}}

> [!abstract]+
> {{abstractNote}}


## Key Takeaways & Evergreens


### Highlights
{% for annotation in annotations -%}
>[!Annotation|{{annotation.color}}]+
>{%- if annotation.annotatedText -%}*« {{annotation.annotatedText}} »* ([Page {{annotation.page}}](zotero://open-pdf/library/items/{{annotation.attachment.itemKey}}?page={{annotation.page}}&annotation={{annotation.id}})){% endif %}{% if annotation.imageRelativePath %}![[{{annotation.imageRelativePath}}]][View on page {{annotation.page}}](zotero://open-pdf/library/items/{{annotation.attachment.itemKey}}?page={{annotation.page}}){% endif %}{% if annotation.comment %}
>
>{{annotation.comment}}{%- endif %}

{% endfor %}


Для обычных статей из интернета
> [!info]+ Metadata
> **Title**:: {{title}}
>
> **Author**:: {{authors}}; {{directors}}
> **Year**:: {{date | format ("YYYY")}}
>
> **Item Type**:: {{itemType | capitalize}}
> **Publisher**: {{publisher}}
> **Pages**:: {{numPages}}
>
> *Read start*::
> *Read end*::
> 
> **Tags**:: `{{hashTags}}` #source/zotero
> **Keywords**:: {{allTags}}
> **URL**:: {{url}}

> [!link]+ Zotero Link
>{{pdfZoteroLink}}

> [!abstract]+
> {{abstractNote}}

## Key Takeaways & Evergreens


### Highlights
{% for annotation in annotations -%}
>[!Annotation|{{annotation.color}}]+
>{%- if annotation.annotatedText -%}*« {{annotation.annotatedText}} »* ([Page {{annotation.page}}](zotero://open-pdf/library/items/{{annotation.attachment.itemKey}}?page={{annotation.page}}&annotation={{annotation.id}})){% endif %}{% if annotation.imageRelativePath %}![[{{annotation.imageRelativePath}}]][View on page {{annotation.page}}](zotero://open-pdf/library/items/{{annotation.attachment.itemKey}}?page={{annotation.page}}){% endif %}{% if annotation.comment %}
>
>{{annotation.comment}}{%- endif %}

{% endfor %}

После того как создали 1 или все 3 шаблона можете переходить к следующему шагу.

Создаем CSS сниппет для разноцветных Callouts в цвет выделений

Открываем папку нашего хранилища Obsidian и в папке .obsidian/snippets/ создаем файл с расширением .css куда вставляем следующее:

CSS
/* Red */
.callout[data-callout-metadata="#ff6666"] {
    --callout-color: 205, 52, 92;
}

/* Green */
.callout[data-callout-metadata="#5fb236"] {
    --callout-color: 114, 162, 100;
}

/* Blue */
.callout[data-callout-metadata="#2ea8e5"] {
    --callout-color: 52, 82, 255;
}

/* Purple */
.callout[data-callout-metadata="#a28ae5"] {
    --callout-color: 157, 131, 242;
}

/* Orange */
.callout[data-callout-metadata="#f19837"] {
    --callout-color: 244, 164, 96;
}

/* Yellow */
.callout[data-callout-metadata="#ffd400"] {
    --callout-color: 255, 236, 0;
}

/* Magenta */
.callout[data-callout-metadata="#e56eee"] {
    --callout-color: 255, 33, 255;
}

/* Gray */
.callout[data-callout-metadata="#aaaaaa"] {
    --callout-color: 152, 152, 152;
}

.callout-icon {
    display: flex;
}

Сохраняем файл, закрываем. Открываем Obsidian и включаем сниппет в настройках в разделе Appearance. Готово

Настриваем Import Formats в плагине Zotero Integration

Теперь когда шаблон готов заходим опять в Obsidian в опции плагина Zotero Integration и в разделе Import Formats делаем следующее:

Приложил фото с шагами

  1. Add Import Format

  2. Даем название для этого формата. Тут мы, грубо говоря, говорим Obsidian’у что мы будем выгружать: книгу или статью. Если вы создали все 3 шаблона, которые я приложил сверху, то, соответсвенно, создадим сейчас 3 формата.

  3. Указываем путь где в папке Obsidian будет создаваться заметка с аннотациями. {{title}} значит какое имя будет у вашей заметки согласно Title’у файла в Zotero. Можно выбрать {{citekey}}, индивидуально.

  4. Путь где будут сохраняться фото-выделения. Допустим вы выделили в Zotero область. Эта облась(фотка) при импорте в Обс будет сохранена в указанную папку. Если для фото вы используете папку Assets или Attachments, то этот путь и пишете. У меня они хранятся в, дополнительно созданной папке, ZoteroAttach, чтобы разграничить их с остальными.

    • UPD: В Image output path в конце {{citekey}} добавьте слеш / , как указано самим обсидианом.
  5. Самое важное, выбираем путь к вашему маркдаун файлу-шаблону, который мы ранее создали и поместили в определенную папку.

Готово. Вы создали Import Format. Делаете также для двух других шаблонов меняя только название Import Format’а и путь к шаблону с нужныи типом.

Создаем Parent Item для наших PDF в Zotero

Чтобы выгружать аннотации для каждой PDF нужно создать Parent Item. Для научных статей, Parent Item часто создается сам, когда мы добавляем статью в Zotero. Если же мы закинули в Zotero какую-нибудь книгу, метадата которой не была автоматически прочитана Zotero, то она добавляется “голой”.

Вот так

Поэтому каждую “голую” PDF кликайте правой кнопкой мыши и жмёте Create Parent Item. Если это книга, то прописываете ISBN книги с сайта Амазон, к примеру. Если же метадата не так важна, то просто жмете Manual Enter и Parent Item создастся пустой и ее уже можно будет выгружать в Obsidian.

Вот так

Готово :partying_face:

Теперь заходим в Zotero(и держим его открытым или свёрнутым), затем в Обсидиан и пробуем запустить Pop-up окно Zotero через палитру команд в Obsidian.

  1. Ctrl + P(дефолт), затем вводим Zotero и появляются созданные нами ранее Import Formats для того или иного типа заметок.
Фото

  1. Всплывает окошко Zotero куда вы вбиваете название статьи/книги, предварительно аннотированную. Если у ПДФ нет Parent Item, то она не покажется, нужно ее создать как ранее уже объяснил.
Фото

  1. Выбираем нужную статью, он впишеться в окошко и подтверждаем нажав Enter.

  2. Готово, через секунду-две откроется заметка с аннотациями, а сам файл будет в вашей папке(что мы указали). :cowboy_hat_face:


Конечный результат будет выглядеть вот так:



Что касается Zotero на IOS

При аннотации PDF в IOS Zotero, они синхронизируются с ПК. Откывая заметку с выделениями в мобильном Obsidian, все ссылки кликабельные и перебрасывают тебя к месту выделения в Zotero КАК на телефоне ТАК и на ПК.


Полезная фишка от @alisa.armsid

Добавлю сюда полезное: по дефолту окно Zotero всплывает не поверх всех окон, что неудобно, когда вызываешь его из Обсидиана. Чтобы это исправить, в Zotero:
Edit → Preferences → Advanced → Config editor → extensions.zotero.integration.keepAddCitationDialogRaised true (двойной клик меняет статус)

9 лайков

Огогого. Пойду ковырять :))

Спасибочки

@alisa.armsid Смотри какая прикольная приблуда получилась. )) Прям отличная.

1 лайк

Рад помочь.
Самому еще предстоит прочувствовать всю мощь Zotero. Но на сегодня ограничусь тем, что осилил его настройку :sweat_smile:

Вопрос остался, а как сделать так, чтобы фиксировался read start и end? Что-то в самом Зотеро нужно настроить?

Агааа) Я давно в сторону этого плагина смотрела, но Citation plugin привычнее)

@Disappointed , а он теги из Зотеро в заметку не умеет подтягивать?

@alisa.armsid Да может. Я просто более юзер-френдли шаблон приложил.

У Bryan Jenks, тут например, чуть ли не все выноситься. Для тегов он добавляет keywords: [{{allTags}}]

Любит он такое. И теги и related бумажки и авторов и все это в data query потом отображается, где он их потом видит по тегам ADHD ADD либо по related.
Related он выводит вот так:


{% for relation in relations -%}
{%- if relation.citekey -%}
related:: {{relation.citekey}}
{% endif -%}
{%- endfor %}

Получается у него так примерно

1 лайк

А он все это выносит в yaml разметку?

По-моему отдельно самому либо проставлять либо через Templater возможно.
В Zotero вроде нет трекинга когда прочил когда закончил :man_shrugging:

Да, по крайней мере на видео у него так.
А линк на пдф и related вроде вне yaml держит

Добрый день, ребята!

Помогите, пожалуйста, новичку-юноше, который застрял на 3 этапе, подготовке шаблона. В какой папке создаем заметку с шаблонами и каким образом будем туда вставлять шаблон?

В общем, не очень понимаю 3-ый пункт, буду рад, если объясните ещё раз на пальцах!

@abrora99 Там как раз самое простое.
Прямо в Obsidian создаете заметку обычную и вставляете туда тот текст под спойдером с кодом и все.

У вас же есть наверняка папка для шаблонов в Obsidian, там можете сразу и создать, вставить и все.
И потом останетесь на следующем этапе выбрать эту созданную заметку в качестве шаблона

А, понял, спасибо, попробую!

Появился вопросик. Можно ли как нибудь каждое выделения разделять подзаголовком.

Сейчас это выглядит вот так:

One goal is to turn readers into great observers of the absurd, of the poor design that gives rise to so many of the problems of modern life, especially of modern technology. It” | Green Highlight | Page 12

Human-centered design (HCD) has emerged since the first edition, partially inspired by that book. This current edition has an entire chapter devoted to the HCD process of product devel- opment.” | Green Highlight | Page 14

Cog- nition and emotion are tightly intertwined, which means that the designers must design with both in mind.” | Green Highlight | Page 29

Classroom design also about these two features

Но что если каждые отдельно вынесенный фрагмент был под подзаголовком

One goal is to turn readers into

One goal is to turn readers into great observers of the absurd, of the poor design that gives rise to so many of the problems of modern life, especially of modern technology. It” | Green Highlight | Page 12

Human-centered design (HCD) has

Human-centered design (HCD) has emerged since the first edition, partially inspired by that book. This current edition has an entire chapter devoted to the HCD process of product devel- opment.” | Green Highlight | Page 14

Cog- nition and emotion are tightly

Cog- nition and emotion are tightly intertwined, which means that the designers must design with both in mind.” | Green Highlight | Page 29

Classroom design also about these two features

Чем это может быть полезно? Когда разношу заметку на разных бордах, канвас или экскалидроу, можно работать не со строками, а сразу целиком с блоком, особенно если там есть комменты или изображение – особенно полезно.

При этом в качестве заголовка брать первые 5 слов из выделенного фрагмента. Что нужно добавить в изначальный код:

## Highlights
{% for annotation in annotations -%} 
    {%- if annotation.annotatedText -%} 
    {{annotation.annotatedText}}”{% if annotation.color %} | **{{annotation.colorCategory}} {{annotation.type | capitalize}}** {% else %} {{annotation.type | capitalize}} {% endif %} | [Page {{annotation.page}}](zotero://open-pdf/library/items/{{annotation.attachment.itemKey}}?page={{annotation.page}}&annotation={{annotation.id}})
    {%- endif %}
    {%- if annotation.imageRelativePath -%}
    ![[{{annotation.imageRelativePath}}]] [View on page {{annotation.page}}](zotero://open-pdf/library/items/{{annotation.attachment.itemKey}}?page={{annotation.page}}) {%- endif %}
{% if annotation.comment %} 
> {{annotation.comment}}

{% endif %} 
{% endfor -%}

Что-то вроде этого?

## Highlights
{% for annotation in annotations -%} 
    {%- if annotation.annotatedText -%}
    ### {{annotation.annotatedText.split(' ', 5).join(' ')}} 
    {{annotation.annotatedText}}”{% if annotation.color %} | **{{annotation.colorCategory}} {{annotation.type | capitalize}}** {% else %} {{annotation.type | capitalize}} {% endif %} | [Page {{annotation.page}}](zotero://open-pdf/library/items/{{annotation.attachment.itemKey}}?page={{annotation.page}}&annotation={{annotation.id}})
    {%- endif %}
    {%- if annotation.imageRelativePath -%}
    ![[{{annotation.imageRelativePath}}]] [View on page {{annotation.page}}](zotero://open-pdf/library/items/{{annotation.attachment.itemKey}}?page={{annotation.page}}) {%- endif %}
{% if annotation.comment %} 
> {{annotation.comment}}

{% endif %} 
{% endfor -%}

Спасибо, работает!!! Боле того, великолепно.

Тогда посмею еще напроситься. У меня есть несколько цветов, которыми выделяю. Зеленый – подумать, синий, скопировать дословно, а красный – куда дальше исследовать.

Когда эта штука переносит, то она помечает цвет выделенного фрагмента. А можно чтобы цвет был не только словами а еще и подсчечивался.

Вот так это выглядит сейчас:

Lift from [the teacher’s] shoulders

Lift from [the teacher’s] shoulders as much as possible of this burden and make her [sic] free for those inspirational and thought-stimulating activities which are, presumably, the real function of the teacher.” | Green Highlight |

А что если программа сама сможет делать вот такое:

А еще что можно сделать, чтобы прописывался абстракт и конфигурировались вот такие мета данные, сразу при импорте?:

Мне кажется. что можно датавью настроить так чтобы он выводил автоматом все импортированное. Это может облегчить дальнейшую работу с этими файлами.

Если что это вот из этой статьи:

У меня есть отдельный Colored шаблон, который сами аннотации подсвечивает в нужный цвет.

  • Green – Digest
  • Magneta – Applicable
  • Cyan – Important
  • Red – Follow up
  • Yellow – Confusion

Цвета вот так градировал, в соответствии с доступными цветами в Zotero

Но здесь они целиком красятся, но сделать так чтобы только обозначатель был в нужном цвете - тоже можно. Покапаюсь сегодня и может найду решение.

1 лайк

А может так даже будет лучше, если все выделение подкрашивается, но это не точно. Нужно в общем и так и так попробовать. Посмотреть как лучше работается с информацией.

Единственный минус в том что эти выделения красятся кодом, который затем отображается в обсидиане при клике/редактировании аннотации

Вот так примерно <font color="#00b050">Green</font> – Digest

1 лайк

Вот цветной шаблон, может подойдет, кто знает:

Спойлер
{% for annotation in annotations -%}
    {%- if annotation.annotatedText -%}
    <span style="color: {{annotation.color}};">{{annotation.annotatedText}}</span>”{% if annotation.color %} | **{{annotation.colorCategory}} {{annotation.type | capitalize}}** {% else %} {{annotation.type | capitalize}} {% endif %} | [Page {{annotation.page}}](zotero://open-pdf/library/items/{{annotation.attachment.itemKey}}?page={{annotation.page}}&annotation={{annotation.id}})
    {%- endif %}
    {%- if annotation.imageRelativePath -%}
    ![[{{annotation.imageRelativePath}}]] [View on page {{annotation.page}}](zotero://open-pdf/library/items/{{annotation.attachment.itemKey}}?page={{annotation.page}}) {%- endif %}
{% if annotation.comment %}
> {{annotation.comment}}

{% endif %}
{% endfor -%}

Решение этого тоже есть, в течении часа скину

1 лайк