<?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>Anki on かおるのブログ</title>
    <link>https://blog.kaorubb.org/ja/tags/anki/</link>
    <description>Recent content in Anki on かおるのブログ</description>
    <generator>Hugo -- 0.147.8</generator>
    <language>ja</language>
    <lastBuildDate>Mon, 17 Mar 2025 10:30:00 +0900</lastBuildDate>
    <atom:link href="https://blog.kaorubb.org/ja/tags/anki/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>最強のAnki用単語学習Cardを作った</title>
      <link>https://blog.kaorubb.org/ja/posts/anki_super_vocab/</link>
      <pubDate>Mon, 17 Mar 2025 10:30:00 +0900</pubDate>
      <guid>https://blog.kaorubb.org/ja/posts/anki_super_vocab/</guid>
      <description>&lt;figure&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;https://blog.kaorubb.org/kaorunoblog/ox-hugo/superVocabDemo.gif&#34;/&gt; 
&lt;/figure&gt;

&lt;h2 id=&#34;はじめに&#34;&gt;はじめに&lt;/h2&gt;
&lt;p&gt;皆さん、Ankiは使っていますか？
Ankiは、間隔反復学習システム(SRS)を採用した、非常に強力な暗記ツールです。
私も長年Ankiを愛用しており、特に語学学習には欠かせない存在となっています。&lt;/p&gt;
&lt;p&gt;今回、私がAnkiで英語の語彙学習をするにあたり、「こんな機能があったら最高なのに&amp;hellip;」と思う理想のカードタイプを形にし、 &lt;a href=&#34;https://github.com/KaoruBB/anki-super-vocab&#34;&gt;GitHub&lt;/a&gt;で公開しました。
この記事では、そのカードタイプ「Super Vocab」の紹介と、開発の経緯、そしてAnki/Emacsユー ザーには嬉しい、 &lt;code&gt;anki-editor&lt;/code&gt; を使ったカード作成方法について解説します。&lt;/p&gt;
&lt;h2 id=&#34;理想の単語カードに求める機能&#34;&gt;理想の単語カードに求める機能&lt;/h2&gt;
&lt;p&gt;私が単語学習用のフラッシュカードに求める機能は、以下の5点です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;双方向学習:&lt;/strong&gt;
単語を見て意味を答えるだけでなく、意味を見て単語を答える、両方向の学習ができること。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;意味→単語カードでの例文表示:&lt;/strong&gt;
意味から単語を答えるカードでは、定義だけでなく、例文や用例も表示すること。
&lt;ul&gt;
&lt;li&gt;理由：
&lt;ul&gt;
&lt;li&gt;単語は例文や構文とセットで覚えることで、記憶に定着しやすくなる。&lt;/li&gt;
&lt;li&gt;同義語の微妙なニュアンスの違いを理解し、区別して覚えられる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ただし、例文中のターゲット単語は隠したい (ここがポイント！)
&lt;ul&gt;
&lt;li&gt;理由： 答えが見えてしまうとフラッシュカードの意味がないからカードの意味がないから。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;単語→意味はシンプルに:&lt;/strong&gt;
単語から意味を答えるカードでは、単語以外の情報は極力表示しないこと。
&lt;ul&gt;
&lt;li&gt;理由: 例文などがあると、単語の意味を推測できてしまい、フラッシュカード本来の目的（想起訓練）が損なわれるため。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;簡単に単語を追加でき、経験と結びつけられる:&lt;/strong&gt;
読書などで出会った単語を、その文脈（例文）ごと簡単にカードに追加できること。
&lt;ul&gt;
&lt;li&gt;理由: 自分の経験と単語を結びつけることで、より深く記憶に刻み込むため。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;柔軟な情報追加:&lt;/strong&gt;
発音記号、品詞、関連語、語源、メモ、ヒント画像など、単語に関するあらゆる情報を簡単に追加できること。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;既存のカードとの比較-そしてsuper-vocab誕生へ&#34;&gt;既存のカードとの比較、そしてSuper Vocab誕生へ&lt;/h2&gt;
&lt;p&gt;AnkiWebを探しても、上記の機能を全て満たすカードタイプは見つかりませんでした。
特に、2番目と3番目の要件（文脈付きの意味→単語カードで、ターゲット単語を自動的に隠す）を満たすものは皆無でした。&lt;/p&gt;
&lt;p&gt;Ankiの標準機能であるクローズ削除（穴埋め問題）を使えば、この要件に近いものは作れます。
しかし、例文が増えるほど手作業でのクローズ削除は大変です。&lt;/p&gt;
&lt;p&gt;「JavaScriptなどを使って、自動的に単語を隠せないか？」&lt;/p&gt;
&lt;p&gt;そう考えていた時、&lt;a href=&#34;https://ankiweb.net/shared/info/1678116644&#34;&gt;English vocab (note type)&lt;/a&gt; という素晴らしいカードタイプに出会いました。
このカードタイプは、まさに私が求めていた自動クローズ削除機能を備えていました！
しかし、惜しいことに、上記の要件を全て満たしているわけではありません。&lt;/p&gt;
&lt;p&gt;そこで、私はこの「English vocab (note type)」をベースに、自分の理想とする機能を全て盛り込んだ、究極の単語カード「Super Vocab」を作ることにしました。&lt;/p&gt;
&lt;h2 id=&#34;anki-editorとemacs-立ちはだかる壁-そしてpull-requestへ&#34;&gt;anki-editorとEmacs、立ちはだかる壁、そしてPull Requestへ&lt;/h2&gt;
&lt;p&gt;私は普段、Ankiのカード作成に&lt;a href=&#34;https://github.com/anki-editor/anki-editor&#34;&gt;anki-editor&lt;/a&gt;というEmacs packageを使っています。
org-modeで構造化されたノートをAnkiに簡単に取り込める、非常に便利なツールです。&lt;/p&gt;
&lt;p&gt;Super Vocabのカードタイプも、anki-editorを使ってEmacsからAnkiに送信しようとしました。
しかし、ここで問題が発生しました。&lt;/p&gt;
&lt;p&gt;通常、anki-editorはorg-modeのノートをHTMLに変換してAnkiに送信します。
しかし、HTMLに変換してしまうと、Super VocabのJavaScriptによる自動クローズ削除機能が動作しなくなってしまうのです。&lt;/p&gt;
&lt;p&gt;anki-editorには &lt;code&gt;:ANKI_FORMAT: nil&lt;/code&gt; というオプションがあり、これを使うとHTML変換を無効にできます。
しかし、このオプションは全てのフィールドに適用されてしまい、カードの見た目（HTML/CSSによる装飾）も失われてしまいます。&lt;/p&gt;
&lt;p&gt;「特定のフィールドだけ、HTML変換せずに生のテキストとしてAnkiに送りたい&amp;hellip;」&lt;/p&gt;
&lt;p&gt;しかし、anki-editorにはそのような機能はありませんでした。&lt;/p&gt;</description>
    </item>
    <item>
      <title>emacsをupgradeしたらankiの数式が汚くなったので直した</title>
      <link>https://blog.kaorubb.org/ja/posts/anki_editor_latex_problem/</link>
      <pubDate>Sun, 24 Nov 2024 15:41:00 +0900</pubDate>
      <guid>https://blog.kaorubb.org/ja/posts/anki_editor_latex_problem/</guid>
      <description>&lt;h2 id=&#34;導入&#34;&gt;導入&lt;/h2&gt;
&lt;p&gt;こんにちは。
私は日頃から&lt;a href=&#34;https://github.com/anki-editor/anki-editor&#34;&gt;anki-editor&lt;/a&gt; を使ってAnkiのカードを作成しているのですが、
Emacsをupgradeすると、数式が汚く表示されるようになってしまいました。&lt;/p&gt;
&lt;p&gt;症状としては、&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;デスクトップ版のAnkiのBrowserで各Fieldのプレビューで数式が数式として表示されない (plain latex codeとして表示される)&lt;/li&gt;
&lt;li&gt;数式がpng画像として表示される
(もともとはMathJax inlineで表示されていた)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;というものでした。&lt;/p&gt;
&lt;p&gt;デスクトップ版のAnkiでcardを編集することはほぼないので、1の症状についてはまだ許容範囲でしたが、
2のほうについては、数式の解像度だけ低くなったり、他の文字とのサイズが合わなくなったりして、かなり気になりました。&lt;/p&gt;
&lt;h2 id=&#34;解決策&#34;&gt;解決策&lt;/h2&gt;
&lt;p&gt;以下を &lt;code&gt;config.org&lt;/code&gt; に追加することで解決しました。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(use-package! anki-editor
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  :after org
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  :init
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (setq-default anki-editor-latex-style &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;mathjax&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;この解決策に至った背景&#34;&gt;この解決策に至った背景&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/anki-editor/anki-editor&#34;&gt;anki-editor&lt;/a&gt; でpushされたカードは、HTMLに変換された状態でカードとして保存されます。
うまく数式が表示されるカードのHTMLを見ると、数式は以下のように &lt;code&gt;anki-mathjax&lt;/code&gt; というタグで囲まれていました。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;anki-mathjax&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;block&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&amp;gt;1 + 1 = 3&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;anki-mathjax&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;一方、今回の問題が発生したカードのHTMLを見ると、数式は以下のように &lt;code&gt;p&lt;/code&gt; タグと &lt;code&gt;[$$]&lt;/code&gt; で囲まれていました。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;[$$] 1 + 1 = 3 [/$$]&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;したがって、anki-editorがorgテキストをHTMLに変換する部分で、問題が発生していることがわかりました。
&lt;code&gt;anki-editor.el&lt;/code&gt; の中を見てみると、以下のように &lt;code&gt;anki-editor-latex-style&lt;/code&gt; という変数によって、latexのスタイルを変更できるようになっており、今回の解決策に至りました。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun anki-editor--translate-latex-env (latex-code)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (setq latex-code (replace-regexp-in-string &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\n&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;br&amp;gt;&amp;#34;&lt;/span&gt; (org-html-encode-plain-text latex-code)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (cl-ecase anki-editor-latex-style
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (builtin (&lt;span style=&#34;color:#a6e22e&#34;&gt;concat&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[latex]&amp;lt;br&amp;gt;&amp;#34;&lt;/span&gt; latex-code &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[/latex]&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (mathjax (&lt;span style=&#34;color:#a6e22e&#34;&gt;concat&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\\[&amp;lt;br&amp;gt;&amp;#34;&lt;/span&gt; latex-code &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\\]&amp;#34;&lt;/span&gt;))))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;読んでいただきありがとうございました。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
