Skip to content

Instantly share code, notes, and snippets.

@QWxleA
Last active October 7, 2024 21:15
Show Gist options
  • Save QWxleA/c7f08e8feded332736a6b376045d0fe4 to your computer and use it in GitHub Desktop.
Save QWxleA/c7f08e8feded332736a6b376045d0fe4 to your computer and use it in GitHub Desktop.
Obsidian zotero template for use with "obsidian-zotero-integration" plugin

QWxlea's over-engineered zotero template

Faq

What are these %% begin id-pn2xitti%% and %% end id-pn2xitti %% and ^pn2xitti? These are the persistance-markers of the indivual highlights, and the reference-id to that highlight.

The markers are meant for the importer. It will skip all text within those markers, so they stay when updating a zotero-import. Removing a marked block does not work well, it will not be reimported. Don't know how to fix that. If you want to reimport a highlight-block, best is to change the highlight in zotero (for example change the color). This will update the id, and on the next import the new highlight will be imported.

The reference-id is used like this: [[@name-of-the-note#^pn2xitti]]

---
title: "{{title | safe}}"
aliases:
{#- Backwards compatible with older version, which had @title in the published url -#}
{% set tempAlias = ["%40", citekey] | join | safe -%}
- "{{ tempAlias }}"
{% if shortTitle %}- {{shortTitle | safe}}
{% endif -%}
Year: {{date | format("YYYY")}}
tags: type/source
Authors: {{authors}}{{directors}}
permalink: "{{citekey | safe }}"
---
{#- These can be changed -#}
{#- This is the order in which the annotations are ordered -#}
{%-
set categoryHeading = {
"orange": "Main ideas and conclusions",
"yellow": "Ordinary notes",
"blue": "Quote / quotable",
"green": "Important To Me",
"red": "Disagree With Author",
"purple": "Interesting side-point",
"magenta": "Methodology",
"grey": "Definitions and concepts"
}
-%}
{%-
set categoryIcon = {
"orange": "💡",
"yellow": "📚",
"blue": "💬",
"green": "💚",
"red": "⛔",
"purple": "💭",
"magenta": "⚙️",
"grey": "🧩"
}
-%}
{#- ---------- Don't make any changes under here --------- #}
{%- macro minEditDate() -%}
{%- set tempDate = "" -%}
{%- for a in annotations -%}
{%- set testDate = a.date | format("YYYY-MM-DD#HH:mm:ss") -%}
{%- if testDate < tempDate or tempDate == ""-%}
{%- set tempDate = testDate -%}
{%- endif -%}
{%- endfor -%}
{%- for a in notes -%}
{%- set testDate = a.dateModified | format("YYYY-MM-DD#HH:mm:ss") -%}
{%- if testDate < tempDate or tempDate == ""-%}
{%- set tempDate = testDate -%}
{%- endif -%}
{%- endfor -%}
{{tempDate }}
{%- endmacro -%}
{# infer latest note date #}
{%- macro maxEditDate() -%}
{%- set tempDate = "" -%}
{%- for n in annotations -%}
{%- set testDate = n.date | format("YYYY-MM-DD#HH:mm:ss") -%}
{%- if testDate > tempDate or tempDate == ""-%}
{%- set tempDate = testDate -%}
{%- endif -%}
{%- endfor -%}
{%- for n in notes -%}
{%- set testDate = n.dateModified | format("YYYY-MM-DD#HH:mm:ss") -%}
{%- if testDate > tempDate or tempDate == ""-%}
{%- set tempDate = testDate -%}
{%- endif -%}
{%- endfor -%}
{{tempDate}}
{%- endmacro -%}
{#- handle | characters in zotero strings used in MD -#}
{% macro formatCell(cellText) -%}
{{ cellText | replace("|","❕")}}
{%- endmacro %}
{#- TAGS: handle space characters in zotero tags -#}
{%- set space = joiner(' ') -%}
{%- macro printTags(rawTags) -%}
{%- if rawTags.length > 0 -%}
{%- for tag in rawTags -%}
#{{ tag.tag | lower | replace(" ","_") }} {{ space() }}
{%- endfor -%}
{%- endif -%}
{%- endmacro %}
{%-
set zoteroColors = {
"#ff6666": "red",
"#f19837": "orange",
"#5fb236": "green",
"#ffd400": "yellow",
"#2ea8e5": "blue",
"#a28ae5": "purple",
"#e56eee": "magenta",
"#aaaaaa": "grey"
}
%}
# {{title}}
> [!info] Info - [**Zotero**]({{desktopURI}}) {% if DOI %}| [**DOI**](https://doi.org/{{DOI}}){% endif %} | Local {% for attachment in attachments | filterby("path", "endswith", ".pdf") %}[**PDF**](file:///{{attachment.path | replace(" ", "%20")}}){%- endfor %}
{% if ShortTitle %}> Short title: {{shortTitle | safe}}{% endif -%}
> Authors: {% for c in creators %}[[{{c.firstName}} {{c.lastName}}]] {% endfor %}
{% if publicationTitle %}> Publication: {{publicationTitle | safe}}{% endif -%}
> Type: {{itemType}}
> Year: {{date | format("YYYY")}}
> Zotero links: [Item]({{select}}) {% if pdfZoteroLink %}PDF: {{pdfZoteroLink}}{% endif %}
> Web links: {% if itemType == "webpage" %}[{{title}}]({{url}}){%else%}[Item]({{uri}}){%endif%} {% if pdfLink %}PDF: {{pdfLink}}{% endif %}
> {{printTags(note.tags)}}
>
> **History**
> Date item added to Zotero: [[{{dateAdded | format("YYYY-MM-DD")}}]]
{%- if annotations %}
> First date annotations or notes modified: [[{{minEditDate() | truncate(10,true,"")}}]]
> Last date annotations or notes modified: [[{{maxEditDate()| truncate(10,true,"")}}]]
{%- endif %}
> Export date: [[{{exportDate | format("YYYY-MM-DD")}}]]
{%- if relations.length > 0 %}
{{ "" }}
> [!abstract] Related Zotero items ({{ relations.length}}):
>
> | title | proxy note | desktopURI |
> | --- | --- | --- |
{%- for r in relations %}
> | {{formatCell(r.title)}} | [[@{{r.citekey}}]] | [Zotero Link]({{r.desktopURI}}) | {% if rel.DOI %}> DOI: {{rel.DOI}}{% endif %} |
{%- endfor -%}
{{ "" }}
{%- endif %}
{% if notes.length > 0 %}
> [!note] Notes ({{notes.length}})
{{ "" }}
{%- for note in notes -%}
{#- Clean up note, change heading level, just in case -#}
> {{ note.note | replace ("# ","### ") | replace(r/\n/g, '\n> ')}}
> {{printTags(note.tags)}}
> <small>📝️ (modified: {{ note.dateModified | format("YYYY-MM-DD") }}) [link](zotero://select/library/items/{{note.key}}) - [web]({{note.uri}})</small>
> {{ "" }}
> ---
{% endfor %}
{% endif -%}
> [!abstract]-
> {% if abstractNote %}
> {{abstractNote|replace("\n"," ")}}
> {% endif %}
---
## Persistant notes
{% persist "notes" %}
{% endpersist %}
---
## Annotations
{% for color, colorCategorie in zoteroColors %}
{%- for entry in annotations | filterby ("color", "startswith", color) -%}
{%- if entry.id %}
{% if entry and loop.first %}## {{categoryIcon[zoteroColors[entry.color]]}} {{categoryHeading[zoteroColors[color]]}}{% endif %}
{% set annoID = ["id-", entry.id] | join | lower %}
{%- persist annoID %}
{%- if entry.date > lastExportDate %}
{%- if entry.annotatedText %}{{categoryIcon[zoteroColors[entry.color]]}} {{ entry.annotatedText }}{% endif %}
{%- if entry.imageBaseName %}![[@{{citekey}}/{{entry.imageBaseName}}|300]]
{% endif %}
{{printTags(entry.tags)}}<small>([{{title | truncate(50)}} p.{{entry.pageLabel}}](zotero://open-pdf/library/items/{{entry.attachment.itemKey}}?page={{entry.page}}&annotation={{entry.id}})) edited:[[{{ entry.date | format("YYYY-MM-DD")}}]]</small>
{%- endif %}
{% endpersist %} {# do not add "-", entry-id needs newline #}
^{{ entry.id | lower }}
{%- if entry.comment %}
>[!note]
>{{entry.comment}}
{% endif -%}
{% endif -%} {# /if entry.id -#}
{% endfor -%}
{% endfor -%}
@QWxleA
Copy link
Author

QWxleA commented Aug 24, 2023

@pclavell Added a Readme, let me know if it's unclear. You should not remove those markers, they are needed for persistence. They should be invisible in reading-mode

@Nikko-A
Copy link

Nikko-A commented Dec 10, 2023

Hello! I've been using the template for a while and It's been generally nice! However, I needed to tinker with some of the settings yet I still have some issues. I'd like to ask for some help.

  1. The new property front matter gets broken from this. I tried removing some of the hyphens which may have been causing the issue yet the problem persisted.
  2. The area highlights break unless specified in the annotation side. I think there should be a part in the readme that talks about how it could be mitigated by fixing the path in the annotations part.
  3. The multi-line notes break unless you add the suggested regex by @timalexdb
  4. Changing color hierarchy does not work unless you change them at the part where hexcodes are.

@timalexdb
Copy link

timalexdb commented Jan 12, 2024

Hello! I've been using the template for a while and It's been generally nice! However, I needed to tinker with some of the settings yet I still have some issues. I'd like to ask for some help.

1. The new property front matter gets broken from this. I tried removing some of the hyphens which may have been causing the issue yet the problem persisted.

2. The area highlights break unless specified in the annotation side. I think there should be a part in the readme that talks about how it could be mitigated by fixing the path in the annotations part.

3. The multi-line notes break unless you add the suggested regex by @timalexdb

4. Changing color hierarchy does not work unless you change them at the part where hexcodes are.

For 1, could you post an example of broken YAML and explain how it breaks (e.g. invalid YAML or not displaying in Obs properties format)?

@ceciliechrstnsn
Copy link

@lsolesen ah, responded too fast. I'm not using the same template and now don't have the time to check thoroughly, but:

{{ entry.comment | replace(r/\n/g, '\n> ') (line 165)

Basically callout syntax requires each line, including empty, to start with '> '. Did a quick try-out with my own template and this should work, as long as you don't have newline-separated enumerations/lists or are using HTML tags to style your comments further.

If I find time in the coming days I can look into this further. More a patch than a solution but might help you on your way.

I am doing something wrong. Where should this be added/what should this replace? Thanks, @timalexdb!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment