<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>PkmonDocs</title><link>https://hiraethecho.github.io/docs/tags/pkm/</link><description>Recent contentinPkmonDocs</description><generator>Hugo --0.152.2</generator><language>en</language><managingEditor>wyz2016zxc@outlook.com(Hiraeth)</managingEditor><webMaster>wyz2016zxc@outlook.com(Hiraeth)</webMaster><lastBuildDate>Mon, 16 Mar 2026 15:39:39 +0800</lastBuildDate><atom:link href="https://hiraethecho.github.io/docs/tags/pkm/index.xml" rel="self" type="application/rss+xml"/><item><title>豆瓣记录导入obsidian</title><link>https://hiraethecho.github.io/docs/software/obsidian_douban/</link><pubDate>Wed, 28 May 2025 00:00:00 +0000</pubDate><author>wyz2016zxc@outlook.com(Hiraeth)</author><guid>https://hiraethecho.github.io/docs/software/obsidian_douban/</guid><description>&lt;h1 id="obsidian-和豆瓣"&gt;
&lt;a class="anchor inpage" href="#obsidian-%e5%92%8c%e8%b1%86%e7%93%a3"&gt;#&lt;/a&gt;obsidian 和豆瓣&lt;/h1&gt;
&lt;h2 id="plugins"&gt;
&lt;a class="anchor inpage" href="#plugins"&gt;##&lt;/a&gt;plugins&lt;/h2&gt;
&lt;p&gt;发现一些插件可以把豆瓣的信息导入到obsidian，可以作为阅读管理统计。&lt;/p&gt;
&lt;p&gt;首先是豆瓣的
，可以登陆豆瓣账户，然后可以同步自己的书影音。&lt;/p&gt;</description><content:encoded><![CDATA[<h1 id="obsidian-和豆瓣">
  <a class="anchor inpage" href="#obsidian-%e5%92%8c%e8%b1%86%e7%93%a3">#</a>obsidian 和豆瓣</h1>
<h2 id="plugins">
  <a class="anchor inpage" href="#plugins">##</a>plugins</h2>
<p>发现一些插件可以把豆瓣的信息导入到obsidian，可以作为阅读管理统计。</p>
<p>首先是豆瓣的
，可以登陆豆瓣账户，然后可以同步自己的书影音。</p>
<p>
导出划线，这个和豆瓣的不能是同一个文件，会有同步的问题。可以看完了再把划线移动到其他文档。</p>
<p>用bookshelf来查看，和记录阅读进度。这个似乎可以用base之类的方法代替。</p>
<h2 id="模板配置">
  <a class="anchor inpage" href="#%e6%a8%a1%e6%9d%bf%e9%85%8d%e7%bd%ae">##</a>模板配置</h2>
<h3 id="豆瓣">
  <a class="anchor inpage" href="#%e8%b1%86%e7%93%a3">###</a>豆瓣</h3>
<p>book</p>
<details open>
    <summary>temple</summary><pre
        class="codeblock"
      ><code class="language-temple" data-lang="temple">---
title: {{title}}
lists: {{type}}
score: {{score}}
rating: {{myRating}}
originalTitle: {{originalTitle}}
published: {{datePublished}}
pages: {{totalPage}}
author: {{author}}
tags: {{myTags}}
state: {{myState}}
url: {{url}}
country: {{country}}
language: {{language}}
time: {{time}}
comment: {{desc}}
cover:
---

# {{title}}

![image]({{image}})

comment: {{desc}}

{{myComment}}

doubanId: {{id}}

## log</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><p>movie</p>
<details open>
    <summary>template</summary><pre
        class="codeblock"
      ><code class="language-template" data-lang="template">---
doubanId: {{id}}
title: {{title}}
lists: {{type}}
score: {{score}}
rating: {{myRating}}
originalTitle: {{originalTitle}}
published: {{datePublished}}
director: {{director}}
actor: {{actor}}
author: {{author}}
tags: {{myTags}}
url: {{url}}
aliases: {{aliases}}
country: {{country}}
language: {{language}}
time: {{time}}
comment: {{desc}}
cover:
---

# {{title}}
![]({{image}})
IMDb: {{IMDb}}</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><h3 id="weread">
  <a class="anchor inpage" href="#weread">###</a>weread</h3>
<p>这个是只导出划线和高亮没有评论，因为我不怎么在微信阅读写评论。</p>
<details open>
    <summary>template</summary><pre
        class="codeblock"
      ><code class="language-template" data-lang="template">---
title: {{ metaData.title }}
lists: book
author: {{ metaData.author }}
time: {{ metaData.publishTime }}
comment: {{ metaData.intro }}
cover: {{ metaDate.cover }}
---

![{{metaData.title}}|200]({{metaData.cover}})

作者： {{metaData.author}}
简介： {{metaData.intro}}
类型： {{metaData.category}}

## highlights

{% for chapter in chapterHighlights %}### {{chapter.chapterTitle}}

{% for highlight in chapter.highlights %}- {{ highlight.markText |trim }}
{% endfor %}
{% endfor %}</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><h3 id="bookshelf">
  <a class="anchor inpage" href="#bookshelf">###</a>bookshelf</h3>
<p>这个json可以直接放在<code>obsidian-repo/.obsidian/plugins/bookshelf/data.json</code>中。</p>
<details open>
    <summary>json</summary><pre
        class="chroma codeblock"
      ><code class="language-json" data-lang="json"
          ><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;settingsVersion&#34;</span>: <span style="color:#ae81ff">20250408</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;booksFolder&#34;</span>: <span style="color:#e6db74">&#34;gallery&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;bookProperties&#34;</span>: {
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;cover&#34;</span>: <span style="color:#e6db74">&#34;cover&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;author&#34;</span>: <span style="color:#e6db74">&#34;author&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;published&#34;</span>: <span style="color:#e6db74">&#34;published&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;pages&#34;</span>: <span style="color:#e6db74">&#34;pages&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;tags&#34;</span>: <span style="color:#e6db74">&#34;tags&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;rating&#34;</span>: <span style="color:#e6db74">&#34;rating&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;lists&#34;</span>: <span style="color:#e6db74">&#34;lists&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;comment&#34;</span>: <span style="color:#e6db74">&#34;comment&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;links&#34;</span>: <span style="color:#e6db74">&#34;links&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;series&#34;</span>: <span style="color:#e6db74">&#34;series&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;positionInSeries&#34;</span>: <span style="color:#e6db74">&#34;position-in-series&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;duration&#34;</span>: <span style="color:#e6db74">&#34;duration&#34;</span>
</span></span><span style="display:flex;"><span>    },
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;bookNote&#34;</span>: {
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;enabled&#34;</span>: <span style="color:#66d9ef">true</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;heading&#34;</span>: <span style="color:#e6db74">&#34;log&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;dateFormat&#34;</span>: <span style="color:#e6db74">&#34;yyyy-MM-dd&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;patterns&#34;</span>: {
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">&#34;started&#34;</span>: <span style="color:#e6db74">&#34;{date}: Started&#34;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">&#34;finished&#34;</span>: <span style="color:#e6db74">&#34;{date}: Finished&#34;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">&#34;abandoned&#34;</span>: <span style="color:#e6db74">&#34;{date}: Abandoned&#34;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">&#34;absoluteProgress&#34;</span>: <span style="color:#e6db74">&#34;{date}: {start}-{end}&#34;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">&#34;relativeProgress&#34;</span>: <span style="color:#e6db74">&#34;{date}: {end}&#34;</span>
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>    },
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;dailyNote&#34;</span>: {
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;enabled&#34;</span>: <span style="color:#66d9ef">true</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;heading&#34;</span>: <span style="color:#e6db74">&#34;Reading&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;patterns&#34;</span>: {
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">&#34;started&#34;</span>: <span style="color:#e6db74">&#34;Started {{book}}&#34;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">&#34;finished&#34;</span>: <span style="color:#e6db74">&#34;Finished {book}&#34;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">&#34;abandoned&#34;</span>: <span style="color:#e6db74">&#34;Abandoned {book}&#34;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">&#34;absoluteProgress&#34;</span>: <span style="color:#e6db74">&#34;Read {book}: {start}-{end}&#34;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">&#34;relativeProgress&#34;</span>: <span style="color:#e6db74">&#34;Read {book}: {end}&#34;</span>
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>    },
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;readingProgress&#34;</span>: {
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&#34;newEntryLocation&#34;</span>: <span style="color:#e6db74">&#34;bookNote&#34;</span>
</span></span><span style="display:flex;"><span>    },
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;previousVersion&#34;</span>: <span style="color:#e6db74">&#34;0.18.0&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;showReleaseNotes&#34;</span>: <span style="color:#66d9ef">true</span>
</span></span><span style="display:flex;"><span>}</span></span></code
        ><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><h2 id="解释">
  <a class="anchor inpage" href="#%e8%a7%a3%e9%87%8a">##</a>解释</h2>
<p>我的文件放在<code>obsidian-repo/gallery/</code>目录下，用bookshelf的lists来区分书、电影和音乐</p>
]]></content:encoded></item><item><title>用mkdocs、obsidian、zotero搭建在线文献学习笔记</title><link>https://hiraethecho.github.io/docs/dev/3in1wiki/</link><pubDate>Tue, 15 Oct 2024 00:00:00 +0000</pubDate><author>wyz2016zxc@outlook.com(Hiraeth)</author><guid>https://hiraethecho.github.io/docs/dev/3in1wiki/</guid><description>&lt;h1 id="使用mkdocsobsidianzotero搭建在线文献学习笔记"&gt;
&lt;a class="anchor inpage" href="#%e4%bd%bf%e7%94%a8mkdocsobsidianzotero%e6%90%ad%e5%bb%ba%e5%9c%a8%e7%ba%bf%e6%96%87%e7%8c%ae%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0"&gt;#&lt;/a&gt;使用mkdocs、obsidian、zotero搭建在线文献学习笔记&lt;/h1&gt;
&lt;p&gt;工作流是，在zotero中阅读和标记。用zotero-better-notes插件把标记变成文本格式，并且导出到obsidian的库文件中，进一步编辑（或者用nvim编辑）。在obsidian中更方便笔记链接跳转，zotero只是文献管理和阅读。然后把笔记同步到mkdocs的git仓库（实际上是把mkdocs的文件夹软链接到obsidian库），用github pages搭建在线wiki。&lt;/p&gt;</description><content:encoded><![CDATA[<h1 id="使用mkdocsobsidianzotero搭建在线文献学习笔记">
  <a class="anchor inpage" href="#%e4%bd%bf%e7%94%a8mkdocsobsidianzotero%e6%90%ad%e5%bb%ba%e5%9c%a8%e7%ba%bf%e6%96%87%e7%8c%ae%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0">#</a>使用mkdocs、obsidian、zotero搭建在线文献学习笔记</h1>
<p>工作流是，在zotero中阅读和标记。用zotero-better-notes插件把标记变成文本格式，并且导出到obsidian的库文件中，进一步编辑（或者用nvim编辑）。在obsidian中更方便笔记链接跳转，zotero只是文献管理和阅读。然后把笔记同步到mkdocs的git仓库（实际上是把mkdocs的文件夹软链接到obsidian库），用github pages搭建在线wiki。</p>
<h2 id="设置">
  <a class="anchor inpage" href="#%e8%ae%be%e7%bd%ae">##</a>设置</h2>
<h3 id="zotero">
  <a class="anchor inpage" href="#zotero">###</a>Zotero</h3>
<p>关键是<code>zotero-better-note</code>插件的
：从注释创建笔记；将笔记插入到其他笔记；将笔记导出为markdown。</p>
<blockquote class="alert alert-important">
      <p class="alert-heading">IMPORTANT</p><p>导出路径和模板中链接路径有硬编码部分，需要根据具体情况手动修改。</p></blockquote><h3 id="obsidian">
  <a class="anchor inpage" href="#obsidian">###</a>obsidian</h3>
<p>需要在设置中选择使用<code>markdown</code>风格链接而不是<code>wiki</code>风格。根目录<code>/</code>是obsidian的库文件夹。</p>
<h3 id="mkdocs">
  <a class="anchor inpage" href="#mkdocs">###</a>mkdocs</h3>
<p>基本上就是直接使用模板。</p>
<h2 id="路径匹配">
  <a class="anchor inpage" href="#%e8%b7%af%e5%be%84%e5%8c%b9%e9%85%8d">##</a>路径匹配</h2>
<p>主要需要注意的，是文件名和链接格式，即<code>[markdown格式的链接](这里应该写什么路径)</code>，使得zotero、obsidian、在线网页的跳转都正常。实际上有两个跳转，一个是到md文件的跳转，另一个是到pdf的跳转。前者是obsidian或网页内的跳转，相对简单；后者是跳转到zotero中的pdf，这个实际上只有我能用，因为涉及到zotero的数据库。有多种选择：</p>
<h3 id="docs文件夹作为obsidian仓库">
  <a class="anchor inpage" href="#docs%e6%96%87%e4%bb%b6%e5%a4%b9%e4%bd%9c%e4%b8%baobsidian%e4%bb%93%e5%ba%93">###</a><code>docs</code>文件夹作为obsidian仓库</h3>
<p>创建仓库<code>username.github.io</code>（必须是这个格式），在线网页会是<code>https://&lt;username&gt;.github.io</code>，那么链接应该写成<code>[title](/filename)</code>，在网页端是<code>https://&lt;username&gt;.github.io/filename</code>。把<code>docs/</code>文件夹作为obsidian repo，用<code>.gitignore</code>忽略掉<code>docs/.obsidian</code>。</p>
<p>优点是简单，缺点文件直接在obsidian的根目录，不好管理其他内容了。</p>
<h3 id="docs文件夹作为obsidian仓库子文件夹">
  <a class="anchor inpage" href="#docs%e6%96%87%e4%bb%b6%e5%a4%b9%e4%bd%9c%e4%b8%baobsidian%e4%bb%93%e5%ba%93%e5%ad%90%e6%96%87%e4%bb%b6%e5%a4%b9">###</a><code>docs</code>文件夹作为obsidian仓库子文件夹</h3>
<p>使用二级域名的github pages，即创建仓库（例如<code>wiki</code>），在线网页会是<code>https://&lt;username&gt;.github.io/wiki</code>，那么链接应该写成<code>[title](/wiki/filename)</code>，在网页端是<code>https://&lt;username&gt;.github.io/wiki/filename</code></p>
<p>把<code>docs</code>变成obsidian的子文件夹，可以用软链接：</p>
<details open>
    <summary>sh</summary><pre
        class="chroma codeblock"
      ><code class="language-sh" data-lang="sh"
          ><span style="display:flex;"><span>ln -s /path/to/git/repo/docs /path/to/obsidian/repo/wiki</span></span></code
        ><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><p>或者用
</p>
<h2 id="总结">
  <a class="anchor inpage" href="#%e6%80%bb%e7%bb%93">##</a>总结</h2>
<blockquote class="alert alert-note">
      <p class="alert-heading">NOTE</p><p>似乎需要一个markdown和latex转换的脚本。其中markdown应该混写html比较好。似乎lua就可以，那么就可以做nvim插件。<br>
2025-05-21: 似乎latex转markdown+html比较好，用<code>&lt;ul&gt;</code> <code>&lt;ol&gt;</code> <code>&lt;detail&gt;</code>标签来处理latex环境<code>itemize</code> <code>enumerate</code> <code>Theorem</code></p></blockquote>]]></content:encoded></item><item><title>zotero</title><link>https://hiraethecho.github.io/docs/software/zotero/</link><pubDate>Mon, 13 Nov 2023 00:00:00 +0000</pubDate><author>wyz2016zxc@outlook.com(Hiraeth)</author><guid>https://hiraethecho.github.io/docs/software/zotero/</guid><description>&lt;h1 id="zotero"&gt;
&lt;a class="anchor inpage" href="#zotero"&gt;#&lt;/a&gt;Zotero&lt;/h1&gt;
&lt;h2 id="install-and-basic-setting"&gt;
&lt;a class="anchor inpage" href="#install-and-basic-setting"&gt;##&lt;/a&gt;Install and basic setting&lt;/h2&gt;
&lt;h2 id="plugins"&gt;
&lt;a class="anchor inpage" href="#plugins"&gt;##&lt;/a&gt;Plugins&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;zotero 7:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;常用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Zotero attanger&lt;/li&gt;
&lt;li&gt;Del item with Attachment&lt;/li&gt;
&lt;li&gt;Ethereal Reference&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;好用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;zotero better notes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;没必要但可以：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ethereal Style&lt;/li&gt;
&lt;li&gt;Attachment Scanner&lt;/li&gt;
&lt;li&gt;arXiv Workflow for zotero&lt;/li&gt;
&lt;li&gt;Zoplicate&lt;/li&gt;
&lt;li&gt;Linter for zotero&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="sync"&gt;
&lt;a class="anchor inpage" href="#sync"&gt;##&lt;/a&gt;Sync&lt;/h2&gt;
&lt;p&gt;using &lt;del&gt;zotmoov&lt;/del&gt; attanger to move files&lt;/p&gt;
&lt;p&gt;zotero 7 to rename:&lt;/p&gt;
&lt;details open&gt;
&lt;summary&gt;TEXT&lt;/summary&gt;&lt;pre
class="codeblock"
&gt;&lt;code class="language-" data-lang=""&gt;{{ title case=&amp;#34;snake&amp;#34; }}{{ creators case=&amp;#34;snake&amp;#34; prefix=&amp;#34;_&amp;#34; max=&amp;#34;1&amp;#34;}}{{ year prefix=&amp;#34;_&amp;#34; }}&lt;/code&gt;&lt;button onclick="copyCode(this)" class="copybtn"&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;
&lt;script&gt;
function copyCode(btn) {
const code = btn.previousElementSibling.textContent.trim();
navigator.clipboard.writeText(code).then(() =&gt; {
btn.innerText = "copied";
setTimeout(() =&gt; (btn.innerText = "copy"), 2000);
});
}
&lt;/script&gt;&lt;p&gt;use any cloud drive to sync. I&amp;rsquo;m using koofr.&lt;/p&gt;</description><content:encoded><![CDATA[<h1 id="zotero">
  <a class="anchor inpage" href="#zotero">#</a>Zotero</h1>
<h2 id="install-and-basic-setting">
  <a class="anchor inpage" href="#install-and-basic-setting">##</a>Install and basic setting</h2>
<h2 id="plugins">
  <a class="anchor inpage" href="#plugins">##</a>Plugins</h2>
<p><strong>zotero 7:</strong></p>
<p>常用：</p>
<ul>
<li>Zotero attanger</li>
<li>Del item with Attachment</li>
<li>Ethereal Reference</li>
</ul>
<p>好用：</p>
<ul>
<li>zotero better notes</li>
</ul>
<p>没必要但可以：</p>
<ul>
<li>Ethereal Style</li>
<li>Attachment Scanner</li>
<li>arXiv Workflow for zotero</li>
<li>Zoplicate</li>
<li>Linter for zotero</li>
</ul>
<h2 id="sync">
  <a class="anchor inpage" href="#sync">##</a>Sync</h2>
<p>using <del>zotmoov</del> attanger to move files</p>
<p>zotero 7 to rename:</p>
<details open>
    <summary>TEXT</summary><pre
        class="codeblock"
      ><code class="language-" data-lang="">{{ title case=&#34;snake&#34; }}{{ creators case=&#34;snake&#34; prefix=&#34;_&#34; max=&#34;1&#34;}}{{ year prefix=&#34;_&#34; }}</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><p>use any cloud drive to sync. I&rsquo;m using koofr.</p>
<h2 id="zotero-better-notes">
  <a class="anchor inpage" href="#zotero-better-notes">##</a>zotero better notes</h2>
<p>用来
</p>
<p><strong>templates:</strong> you can copy these:</p>
<details open>
    <summary>quickinsert</summary><pre
        class="codeblock"
      ><code class="language-quickinsert" data-lang="quickinsert"># This template is specifically for importing/sharing, using better
# notes &#39;import from clipboard&#39;: copy the content and
# goto Zotero menu bar, click Tools-&gt;New Template from Clipboard.
# Do not copy-paste this to better notes template editor directly.
name: &#34;[QuickInsertV2]&#34;
zoteroVersion: &#34;7.0.9.SOURCE.fadbf3d2d&#34;
pluginVersion: &#34;2.0.18&#34;
savedAt: &#34;2024-11-07T07:59:45.835Z&#34;
content: |-
  // @use-markdown
  &lt;a href=&#34;${link}&#34;&gt;${linkText}&lt;/a&gt; [md](/wiki/math/zotero/${subNoteItem.getNoteTitle ? subNoteItem.getNoteTitle().replace(/[/\\?%*:|&#34;&lt;&gt; ]/g, &#34;-&#34;) &#43; &#34;-&#34;:&#34;&#34;}${subNoteItem.key})</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><details open>
    <summary>quickimport</summary><pre
        class="codeblock"
      ><code class="language-quickimport" data-lang="quickimport"># This template is specifically for importing/sharing, using better
# notes &#39;import from clipboard&#39;: copy the content and
# goto Zotero menu bar, click Tools-&gt;New Template from Clipboard.
# Do not copy-paste this to better notes template editor directly.
name: &#34;[QuickImportV2]&#34;
zoteroVersion: &#34;7.0.9.SOURCE.fadbf3d2d&#34;
pluginVersion: &#34;2.0.18&#34;
savedAt: &#34;2024-11-07T05:54:37.696Z&#34;
content: |-
  &lt;blockquote&gt;
  ${{
    return await Zotero.BetterNotes.api.convert.link2html(link, {noteItem, dryRun: _env.dryRun});
  }}$
  &lt;/blockquote&gt;</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><details open>
    <summary>quicknote</summary><pre
        class="codeblock"
      ><code class="language-quicknote" data-lang="quicknote"># This template is specifically for importing/sharing, using better
# notes &#39;import from clipboard&#39;: copy the content and
# goto Zotero menu bar, click Tools-&gt;New Template from Clipboard.
# Do not copy-paste this to better notes template editor directly.
name: &#34;[QuickNoteV5]&#34;
zoteroVersion: &#34;7.0.9.SOURCE.fadbf3d2d&#34;
pluginVersion: &#34;2.0.18&#34;
savedAt: &#34;2024-11-07T05:54:55.255Z&#34;
content: |-
  ${{
    let res = &#34;&#34;;
    if (annotationItem.annotationComment) {
      res &#43;= await Zotero.BetterNotes.api.convert.md2html(
        annotationItem.annotationComment
      );
    } else {
  	res &#43;= &#34;No comment&#34;;
    }
    return res;
  }}$

  // @use-markdown
  ***
  ${{
  	let res = &#34;&#34;;
    res &#43;= await Zotero.BetterNotes.api.convert.annotations2html([annotationItem], {noteItem, ignoreComment: true});
    return res;
  }}$</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><details open>
    <summary>exportmdfilename</summary><pre
        class="codeblock"
      ><code class="language-exportmdfilename" data-lang="exportmdfilename"># This template is specifically for importing/sharing, using better
# notes &#39;import from clipboard&#39;: copy the content and
# goto Zotero menu bar, click Tools-&gt;New Template from Clipboard.
# Do not copy-paste this to better notes template editor directly.
name: &#34;[ExportMDFileNameV2]&#34;
zoteroVersion: &#34;7.0.9.SOURCE.fadbf3d2d&#34;
pluginVersion: &#34;2.0.18&#34;
savedAt: &#34;2024-11-07T05:55:24.890Z&#34;
content: |-
  ${(noteItem.getNoteTitle ? noteItem.getNoteTitle().replace(/[/\\?%*:|&#34;&lt;&gt; ]/g, &#34;-&#34;) &#43; &#34;-&#34; : &#34;&#34;)}${noteItem.key}.md</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><details open>
    <summary>exportmdfileheader</summary><pre
        class="codeblock"
      ><code class="language-exportmdfileheader" data-lang="exportmdfileheader"># This template is specifically for importing/sharing, using better
# notes &#39;import from clipboard&#39;: copy the content and
# goto Zotero menu bar, click Tools-&gt;New Template from Clipboard.
# Do not copy-paste this to better notes template editor directly.
name: &#34;[ExportMDFileHeaderV2]&#34;
zoteroVersion: &#34;7.0.9.SOURCE.fadbf3d2d&#34;
pluginVersion: &#34;2.0.18&#34;
savedAt: &#34;2024-11-07T05:55:34.047Z&#34;
content: |-
  ${{
    let header = {};
    header.tags = noteItem.getTags().map((_t) =&gt; _t.tag);
    header.parent = noteItem.parentItem
      ? noteItem.parentItem.getField(&#34;title&#34;)
      : &#34;&#34;;
    header.collections = (
      await Zotero.Collections.getCollectionsContainingItems([
        (noteItem.parentItem || noteItem).id,
      ])
    ).map((c) =&gt; c.name);
    return JSON.stringify(header);
  }}$</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><details open>
    <summary>exportmdfilecontent</summary><pre
        class="codeblock"
      ><code class="language-exportmdfilecontent" data-lang="exportmdfilecontent"># This template is specifically for importing/sharing, using better
# notes &#39;import from clipboard&#39;: copy the content and
# goto Zotero menu bar, click Tools-&gt;New Template from Clipboard.
# Do not copy-paste this to better notes template editor directly.
name: &#34;[ExportMDFileContent]&#34;
zoteroVersion: &#34;7.0.9.SOURCE.fadbf3d2d&#34;
pluginVersion: &#34;2.0.18&#34;
savedAt: &#34;2024-11-07T05:56:22.434Z&#34;
content: |-
  ${{
    let start = mdContent;
    let rmspan = start.replace(/&lt;\/?span.*?&gt;/g,&#39;&#39;);
    let pdflink = rmspan.replace(/(&lt;a .*?open.*?&gt;)“(.*?)”/g,&#39;$2 $1(pdf)&lt;/a&gt;&#39;);
    let dir2zotero = pdflink.replace(/&lt;a href.*?zhref=&#34;(.*?)&#34; ztype.*?&gt;/g,&#39;&lt;a href=&#34;$1&#34;&gt;&#39;);
    return dir2zotero;
  }}$</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><p>annotation will be exported as</p>
<details open>
    <summary>TEXT</summary><pre
        class="codeblock"
      ><code class="language-" data-lang="">&lt;span class=&#34;highlight&#34; data-annotation=&#34;&lt;data-annotation&gt;&#34; ztype=&#34;zhighlight&#34;&gt;&lt;a href=&#34;zotero://open/library/items/G4BKVA2X?page=2&amp;#x26;annotation=LZLEYYRJ&#34;&gt;“&lt;content&gt;”&lt;/a&gt;&lt;/span&gt; &lt;span class=&#34;citation&#34; data-citation=&#34;&lt;citation&gt;&#34; ztype=&#34;zcitation&#34;&gt;(&lt;span class=&#34;citation-item&#34;&gt;&lt;a href=&#34;zotero://select/library/items/GLXUZZJT&#34;&gt;&lt;/a&gt;&lt;/span&gt;)&lt;/span&gt;</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><p>the color of annotation is coded as <code>%23&lt;rgb&gt;</code> in <code>&lt;data-annotation&gt;</code>, for
example blue (#2ea8e5) annotation is <code>%232ea8e5</code></p>
]]></content:encoded></item><item><title>obsidian使用与插件</title><link>https://hiraethecho.github.io/docs/software/obsidian/</link><pubDate>Sat, 11 Nov 2023 00:00:00 +0000</pubDate><author>wyz2016zxc@outlook.com(Hiraeth)</author><guid>https://hiraethecho.github.io/docs/software/obsidian/</guid><description>&lt;h1 id="obsidian"&gt;
&lt;a class="anchor inpage" href="#obsidian"&gt;#&lt;/a&gt;obsidian&lt;/h1&gt;
&lt;h2 id="plugins"&gt;
&lt;a class="anchor inpage" href="#plugins"&gt;##&lt;/a&gt;plugins&lt;/h2&gt;
&lt;p&gt;常用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;remotely save (using webdav to synchronize files)&lt;/li&gt;
&lt;li&gt;obsidian web clipper 浏览器插件&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;好用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;git&lt;/li&gt;
&lt;li&gt;digital garden&lt;/li&gt;
&lt;li&gt;share as gist&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;没必要：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;gistr: 和&lt;code&gt;share as gist&lt;/code&gt;比不能添加description&lt;/li&gt;
&lt;li&gt;find orphaned files and broken links&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;about vim:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;vim toggle&lt;/li&gt;
&lt;li&gt;vim input method switch&lt;/li&gt;
&lt;li&gt;vimrc&lt;/li&gt;
&lt;li&gt;edit in neovim&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;展示：&lt;/p&gt;</description><content:encoded><![CDATA[<h1 id="obsidian">
  <a class="anchor inpage" href="#obsidian">#</a>obsidian</h1>
<h2 id="plugins">
  <a class="anchor inpage" href="#plugins">##</a>plugins</h2>
<p>常用：</p>
<ul>
<li>remotely save (using webdav to synchronize files)</li>
<li>obsidian web clipper 浏览器插件</li>
</ul>
<p>好用：</p>
<ul>
<li>git</li>
<li>digital garden</li>
<li>share as gist</li>
</ul>
<p>没必要：</p>
<ul>
<li>gistr: 和<code>share as gist</code>比不能添加description</li>
<li>find orphaned files and broken links</li>
</ul>
<p>about vim:</p>
<ul>
<li>vim toggle</li>
<li>vim input method switch</li>
<li>vimrc</li>
<li>edit in neovim</li>
</ul>
<p>展示：</p>
<ul>
<li>
</li>
<li>dataview (display files by metadata)</li>
<li>kanban (plan things, especially something with many stages)不习惯</li>
</ul>
<h2 id="theme">
  <a class="anchor inpage" href="#theme">##</a>theme</h2>
<ul>
<li>nord</li>
<li>minimal</li>
</ul>
<h2 id="sync">
  <a class="anchor inpage" href="#sync">##</a>sync</h2>
<p>因为
，所以重点是同步obsidian仓库。云端是github和webdav（koofr），在两台电脑（都是win/linux双系统）和手机、ipad，总计6个仓库同步。要注意的是</p>
<ul>
<li>手机和ipad很难用git</li>
<li>设置需要忽略的文件</li>
<li>考虑用插件还是外部命令</li>
<li>各种方式下的冲突文件处理</li>
</ul>
<h2 id="editor">
  <a class="anchor inpage" href="#editor">##</a>editor</h2>
<p>虽然用obsidian管理markdown文件，但编辑器可以用其他的。比如
.</p>
]]></content:encoded></item></channel></rss>