# mdict.koplugin：在KOReader自带的查词弹窗里直接用MDict词典（竖排、真人发音）

**URL:** <https://forum.freemdict.com/t/topic/45445>\
**Category:** 软件经验交流展望\
**Created:** [2026 年11 月 2 日 23:13 UTC](https://forum.freemdict.com/t/topic/45445 "2026-11-02T23:13:18Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

作者： ![moopoint](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/m/7bcc69/32.png) [@moopoint](https://forum.freemdict.com/u/moopoint)\
发布日期： [2026 年11 月 2 日 23:13 UTC](https://forum.freemdict.com/t/topic/45445/1 "2026-11-02T23:13:18Z")

</div>

用墨水屏阅读器看书，查词体验一直不太理想：KOReader 自带的查词弹窗很顺手，却只认 StarDict；想用 MDict 词典，就只能跳到外部 App，每查一个词屏幕都要闪好几下。

所以我写了 **mdict.koplugin** ：一个让 KOReader **直接读取 `.mdx` / `.mdd`** 的插件。在 Android 上，它用系统 WebView（Chromium 内核）来排版词条，再把词条切成一页一页放进 KOReader 自己的查词弹窗里。词典原本的样子基本都能保留，竖排日语、笔顺、公式、插图、折叠例句、真人发音都没问题。

![查「犬」：双指张开切换大窗口，翻页，切换到其他词典的结果](https://forumcdn.freemdict.com/uploads/default/original/3X/2/0/20d8e940763c09177e53e1e4a301599b1f372164.gif)

项目地址：[https://github.com/moopoint-dev/mdict.koplugin](https://github.com/moopoint-dev/mdict.koplugin)（开源，AGPL-3.0，当前版本 0.2.0）

* * *

## 为什么要做这个插件

KOReader 查词时，用内置的 `sdcv` 查 StarDict 词典，HTML 释义交给 **MuPDF** 排版。MuPDF 擅长 PDF，作为网页引擎就比较勉强：

- **CSS 只支持一部分** ：没有 flexbox / grid，很多现代词典的版式会乱掉。
- **不支持竖排** ：`writing-mode: vertical-rl` 不起作用，日语国语辞典只能横着看。
- **不执行 JavaScript** ：折叠的例句、「VERB FORMS」之类的展开区块、点开看大图，统统失效。
- **不能放声音** ：词典里的 `sound://` 发音和例句录音，点了没有反应。

KOReader 官方对 MDict 的建议（issue #5552）是：用 PyGlossary 转成 StarDict，或者调用外部 App。但这两条路都有代价：

- **转换成 StarDict** ：音频和脚本都会丢掉，CSS 要手动处理，词典每次更新都要重新转换。
- **调用外部 App** （欧路、DictTango、GoldenDict 等）：每次查词都会离开 KOReader，切换 Android 界面会让墨水屏整屏刷新好几次。外部 App 大多还是滚动式界面，在墨水屏上拖得很吃力。

我想要的其实很简单： **不离开 KOReader，不做格式转换，词典原来什么样，弹窗里就是什么样，而且一页一页地翻。**

* * *

## 这个插件能做什么

### 原版排版：交给 WebView，而不是 MuPDF

- 在 Android 上用系统 WebView（Chromium）排版，完整支持现代 CSS（flexbox、grid、网页字体、MDD 里自带的字体）。
- **竖排日语** （`vertical-rl`）、 **注音假名（ruby）** 、 **纵中横** 、 **笔顺字表** 、 **SVG 数学公式** ，都按词典原本的设计显示。
- 插图、示意图照常显示，彩色屏上还能看到彩色。

### 运行词典自带的脚本

- 词典自己的 JavaScript 会正常运行：折叠或展开区块、点缩略图看大图等交互都能用。
- 词条里的链接、`#锚点`、`entry://` 交叉引用都能点。

### 发音和例句音频

- 点喇叭图标就能播放单词发音和例句录音。支持 AAC、MP3、Ogg、WAV（Speex 暂不支持）。

### 为墨水屏设计的翻页

- 词条按弹窗大小 **切成一页一页** ，没有滚动。横排词条上下滑或点左右半屏翻页；竖排词条左右滑翻页，上下滑切换词典。
- **双指张开** 就切到 KOReader 的大窗口，一页能看更多内容。
- 默认会在后台 **预先排好下一个结果** ，切换词典时更快。
- **墨水屏模式** ：黑色文字，去掉浅色底纹，避免显示成一片灰。

### 和 KOReader 无缝结合

- MDict 词典和 StarDict 词典出现在同一个「管理词典」列表里，一起启用、停用和排序。
- 长按释义里的字词可以继续查；「在释义中查找」会搜索整个词条；查词记录、生词本照常可用。
- 支持 MDict 1.2 / 2.0、zlib / LZO 压缩、加密的 key index。
- **不需要改动或重新编译 KOReader** ：插件的 Java 部分在运行时加载，官方版 KOReader 就能用。
- **自动更新** ：插件会从 GitHub Releases 检查新版本，每天最多一次，不会主动打开 Wi-Fi，也可以跳过某个版本。

### 给爱折腾的坛友

- **覆盖文件** ：在 `name.mdx` 旁边放 `name.koreader.css`（追加 CSS）或 `name.koreader.lua`（改写 HTML），就能为墨水屏单独调整某部词典。放在文件夹里的 `mdict.koreader.css` / `.lua` 对整个文件夹生效。
- 可以按词典设置横排或竖排，以及分栏或切片的分页方式（默认自动选择）。
- **给词典制作者** ：大词典第一次使用时，插件会在后台建一次索引（每部几秒）。如果词条按插件的 `kosort-1` 顺序排好，并在 MDX 头部写上 `KOReaderKeyOrder="kosort-1"`，就可以跳过建索引。参考实现和测试数据都在仓库的 `tools/kosort.py` 和 `spec/data/kosort-1.tsv` 里。

* * *

## 截图

以下截图来自模拟 7 英寸、300 ppi 阅读器的 Android 模拟器。

**横排英汉** ：牛津高阶英汉双解第 10 版，「rabbit」，带插图

 ![rabbit](https://forumcdn.freemdict.com/uploads/default/original/3X/d/d/dd6fa63f7b7cfce4cc1f9509e784d0b28a60e631.png)

**竖排汉字条目** ：三省堂 現代新国語辞典，「故」，有笔顺、注音和纵中横（大窗口）

 ![故](https://forumcdn.freemdict.com/uploads/default/original/3X/7/f/7feb41fbafb6ccbb6edd6f0036ac9e69b53fbe60.png)

**横排日语** ：大辞泉，「双曲線」，有声调符号、发音按钮和彩色示意图（大窗口）

 ![双曲線（大辞泉）](https://forumcdn.freemdict.com/uploads/default/original/3X/6/b/6bed761be521811aae127e456d99a7615defe5fd.png)

**竖排日语** ：現代新国語辞典，「双曲線」，配图竖排（大窗口）

 ![双曲線（現代新国語辞典）](https://forumcdn.freemdict.com/uploads/default/original/3X/c/d/cd49401bf0602d2414da78d11b007d142ceb2d6c.png)

**横排翻页演示** ：「watch」。双指张开切到大窗口，展开再收起 VERB FORMS，翻页，切换到下一个结果，点开插图大图再关闭

![watch](https://forumcdn.freemdict.com/uploads/default/original/3X/1/f/1ff44c7312380ca84c7a37d3772441185f419dc2.gif)

* * *

## 安装

1. 到 [Releases](https://github.com/moopoint-dev/mdict.koplugin/releases) 下载 `mdict.koplugin-<版本>.zip`，解压到 `koreader/plugins/`。
2. 把词典放进 KOReader 的词典目录 `koreader/data/dict/`，也可以在 _Search → Settings → MDict dictionaries → Dictionary folders_ 里添加其他文件夹。`.mdx` 要和它的 `.mdd`（`name.mdd`、`name.1.mdd`……）放在一起。
3. 重启 KOReader。MDict 词典会出现在「管理词典」列表里。

插件的所有设置都在查找菜单的 _MDict dictionaries_ 里。

* * *

## 已知限制

- 暂不支持 MDict 3.0 格式，也不支持需要注册码的加密词典。
- Speex 格式的音频暂时不能播放。
- WebView 排版只在 Android 上可用。Kindle、Kobo、PocketBook 等设备会退回 KOReader 内置的 MuPDF 渲染：文字和图片能显示，但竖排、脚本、发音这些功能用不了。
- 有些词典的 CSS 原本是为手机彩屏设计的，在墨水屏上可能需要用覆盖文件微调。

* * *

## 反馈

插件还很新，欢迎大家拿自己手头的词典来试。遇到显示不对、查不到词、翻页异常的情况，请到 [GitHub Issues](https://github.com/moopoint-dev/mdict.koplugin/issues) 反馈，或者直接在这个帖子里回复。附上 **词典名称、查询的词和截图** ，排查起来会快很多。

也欢迎分享你在墨水屏上用得顺手的词典，以及为它们写的 `koreader.css` 覆盖文件。

祝大家查词愉快！

---

<div class="post-metadata">

作者： ![zgzzx10](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/zgzzx10/32/18623_2.png) [@zgzzx10](https://forum.freemdict.com/u/zgzzx10)\
发布日期： [2026 年11 月 3 日 05:26 UTC](https://forum.freemdict.com/t/topic/45445/2 "2026-11-03T05:26:26Z")

</div>

反馈个问题，使用encarta词典时，不能下拉

如下图，我往下滑到一半也依然是最开始的内容

 ![IMG_7175](https://forumcdn.freemdict.com/uploads/default/original/3X/2/7/27fccc2cf49c4ca2b59c2dad5e6ea627734baf89.jpeg)

词典来自这里，[Encarta English Dictionary 2009 css修改](https://forum.freemdict.com/t/topic/14864)

我自己使用的CSS也一并上传

[encarta2009.css](https://forum.freemdict.com/uploads/short-url/9PUowxtU04iN5XOilUm6vqYWDZw.css) (261.7 KB)

---

<div class="post-metadata">

作者： ![moopoint](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/m/7bcc69/32.png) [@moopoint](https://forum.freemdict.com/u/moopoint)\
发布日期： [2026 年11 月 3 日 16:35 UTC](https://forum.freemdict.com/t/topic/45445/3 "2026-11-03T16:35:40Z")

</div>

感谢反馈和截图！问题已经找到并修好了。

原因：Encarta 2009 的 CSS 里有一条规则，把所有 `div` 都设成了行内元素（`display: inline`）。插件用来分页的外层容器也是 `div`，被这条规则一起改掉了，所以翻页时右边的页码条在动，内容却一直停在第一页。

新版本 0.2.1 里，插件的分页容器不再使用 `div`，词典自己的 `div` 样式只会作用于词条内容，不会再影响分页。我用你提到的 Encarta 2009 测试过，现在可以正常往下翻页了。

更新方法：打开顶部菜单的「搜索」（放大镜图标）→ 设置 → MDict dictionaries → Updates → Check for updates，点 Update，然后重启 KOReader（安卓上要完全退出再重新打开）。如果开着自动检查，也会自动提示更新。

> **[Release mdict.koplugin 0.2.1 · moopoint-dev/mdict.koplugin](https://github.com/moopoint-dev/mdict.koplugin/releases/tag/v0.2.1)**
>
> Fixed
> 
> Entries could not be paged in dictionaries whose CSS restyles every div, such as Encarta 2009, which makes them all inline: swiping moved the page bar, but the entry stayed on its first page...

更新后如果还有问题，欢迎再发截图。

---

<div class="post-metadata">

作者： ![zgzzx10](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/zgzzx10/32/18623_2.png) [@zgzzx10](https://forum.freemdict.com/u/zgzzx10)\
发布日期： [2026 年11 月 4 日 01:02 UTC](https://forum.freemdict.com/t/topic/45445/4 "2026-11-04T01:02:21Z")

</div>

Encarta修复后没有问题了

再反馈个小问题，这本\*\*[LDELC 朗文当代英语大辞典](https://forum.freemdict.com/t/topic/43539)\*\*

查询的时候左侧的序号显示不全，像是被截去了左侧部分

 ![IMG_7177](https://forumcdn.freemdict.com/uploads/default/original/3X/a/1/a168884a5bd420c1fff4d18ba7d7dcb9227b6b0b.jpeg)

---

<div class="post-metadata">

作者： ![zgzzx10](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/zgzzx10/32/18623_2.png) [@zgzzx10](https://forum.freemdict.com/u/zgzzx10)\
发布日期： [2026 年11 月 4 日 01:39 UTC](https://forum.freemdict.com/t/topic/45445/5 "2026-11-04T01:39:37Z")

</div>

另外求教一个问题，我看到插件设置里面有字体调整选项，这个选项是不能覆盖词典自带CSS里面的字体选项的吗？

像是我使用的[LDELC 朗文当代英语大辞典](https://forum.freemdict.com/t/topic/43539)，我在插件字体设置里面选择的是衬线字体，但是最终显示效果依然是词典自带的无衬线字体效果，需要怎么调整？

---

<div class="post-metadata">

作者： ![moopoint](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/m/7bcc69/32.png) [@moopoint](https://forum.freemdict.com/u/moopoint)\
发布日期： [2026 年11 月 4 日 02:42 UTC](https://forum.freemdict.com/t/topic/45445/6 "2026-11-04T02:42:27Z")

</div>

两个问题都查清楚了，新版本 0.2.3 里都已修好。

**1. LDELC 左侧序号显示不全**

原因：LDELC 的 CSS 把释义序号设成了 `position: absolute; left: -0.2rem`，也就是比正文再往左挪一点，放在正文左边界外面。浏览器里这一点会落在页面默认的边距里，所以看得到；插件分页时是贴着正文左边界切的，序号伸出去的部分就被切掉了（下一页开头的序号还会有一小条露在上一页的右边缘）。

新版本里，横排词条每页左右各留了一点空白（4px，随字号缩放），伸出正文一点的内容（比如这种悬挂的序号）就能完整显示。我用 LDELC（2026.9.18 版）测过 cockpit、run 等词条，序号都完整了。竖排词条不受影响。

**2. 插件字体设置没有盖过词典自带字体**

插件的字体设置本来是可以盖过词典 CSS 里的字体的，你遇到的是一个 bug。

原因：你选的衬线字体应该只有常规体、没有粗体文件，比如 KOReader 自带的 FreeSerif 就只有常规体。LDELC 的词头和英文释义全是粗体，之前的版本遇到“所选字体没有粗体”时，粗体文字会保留词典原来的字体，所以大部分文字还是无衬线，而且粗体还变细了，只有音标这类非粗体文字换成了衬线字体。

新版本里，所选字体没有粗体（或斜体）文件时，粗体、斜体文字也会用这个字体，由系统自动加粗或倾斜（KOReader 排书时也是这样处理的）。如果你选的不是 FreeSerif，麻烦告诉我是哪个字体，我再看看。更新后如果还有问题，欢迎再发截图。

---

<div class="post-metadata">

作者： ![zgzzx10](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/zgzzx10/32/18623_2.png) [@zgzzx10](https://forum.freemdict.com/u/zgzzx10)\
发布日期： [2026 年11 月 4 日 08:17 UTC](https://forum.freemdict.com/t/topic/45445/7 "2026-11-04T08:17:29Z")

</div>

感谢，修复太及时了

这本\*\*[Chambers Dictionary 13e](https://forum.freemdict.com/t/topic/35006)\*\*词典完全不能显示

另外，**[现代汉语规范词典 from macOS](https://forum.freemdict.com/t/topic/36578)** 这本的标题显示错误

 ![Reader_(《大唐狄公案》（1-6套装）) 高罗佩 - 大唐狄公案. 壹-北京联合出版公司 (2018).epub_p657_2026-11-04_155429](https://forumcdn.freemdict.com/uploads/default/original/3X/6/d/6d0f70f00a709d0c73bf3ba4f05bccd78ac285d2.png)

 ![Reader_ James Lovell_ Jeffrey Kluger - Apollo 13 (2006, HMH Books) - libgen.li.epub_p217_2026-11-04_155332](https://forumcdn.freemdict.com/uploads/default/original/3X/1/1/11868f45bf30466b8a3765f48d68606b1d2a3c72.png)

---

<div class="post-metadata">

作者： ![moopoint](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/m/7bcc69/32.png) [@moopoint](https://forum.freemdict.com/u/moopoint)\
发布日期： [2026 年11 月 4 日 17:01 UTC](https://forum.freemdict.com/t/topic/45445/8 "2026-11-04T17:01:17Z")

</div>

感谢反馈！两个问题都查到原因了，新版本 0.2.4 里都已修好。

**1. Chambers Dictionary 13th 完全不显示**

原因：这本词典的 CSS 默认把整个词条隐藏起来（`cb13 {display: none}`），要等词典自带的 cb13.js 运行后才显示；而 cb13.js 是在网页的 DOMContentLoaded 事件里运行的。插件为了查词快，每部词典的页面只加载一次，之后每查一个词只是把词条换进去，这个事件不会再触发，所以 cb13.js 一直没有运行，词条也就一直是隐藏的。

新版本里，每个词条换进去之后，插件会补上词典脚本在等的 DOMContentLoaded 和 load 事件。我用论坛里的 Chambers Dictionary 13th（7z 版）测过 dim 等词条，释义和脚本生成的派生词、短语框都能正常显示了。

**2. 现代汉语规范词典的标题显示错误**

原因：这本词典 MDX 文件头里的标题（Title）不是纯文字，而是 macOS 生成的一整段 HTML 网页，插件之前把它原样当成了标题。

新版本里，标题如果是 HTML，插件会只取出其中的文字，这本会显示成「现代汉语规范词典」，不需要重新扫描词典。

更新后如果还有问题，欢迎再发截图。
