本帖最后由 独行者 于 2020-8-3 09:34 编辑 9 z$ x% x' U3 X8 F( c
4 R2 R& q% f( y& e7 X
储备知识MDX 规范词条由三部分组成: 词条关键字:作为词条索引。 词典 HMTL:词条内容。 分隔符 </>:分割每个词条。 3 r4 }% {3 Y3 ?7 [/ m
注意: </> 后面不允许有任何空行。 HMTL 允许换行,也可以不换行。 8 d4 p& S- I# J5 G
例子: - Antarctica
3 F+ C' L( R/ ^" n - <link href="styles_cb.css" rel="stylesheet"/><script src="scripts_cb.js"></script><div>南极洲</div>
9 a2 L! j& W. I' d; B0 k - </>
复制代码 . @7 A8 P! ~. N9 M6 l
+ Y* j( s* G* ~8 e$ w/ E+ J
词典 HMTL格式# y! i* x. k# N! M5 H& U
和标准的 HTML 几乎一样,不过这里去掉了 <html>、<head> 和 <body> 标签的包裹,另外增加了一些 mdict 自有的标记和格式。 下面介绍资源的引入,关于路径问题,请阅读下面的资源部分。 & ~3 T8 u2 L2 ^ ~) b
引入 css 和 js 文件' r' [8 S0 f: l
$ G# H5 \0 c4 W9 B) h" P- <link href="styles_cb.css" rel="stylesheet"/><script src="scripts_cb.js"></script><div>南极洲</div>
复制代码
9 V: E; D6 q! e4 i引入音频( P$ Z( g" I. y! J* q# v' I
/ q: Y! v5 t7 W/ L* |- <a href="sound://sound_file.mp3">keyword</a>
复制代码 $ r3 c% e9 ?/ r# T- Z3 R2 b
引入图片) ?8 p4 W+ _5 B+ G* b
格式一: - <img src="file://abc.gif">
复制代码
0 J# o4 k# A, n* B格式二: file:// 可以省略
1 @( P! W# ^' ]: b7 Z* S* L$ S跳转
2 n3 W1 F! b, i7 F7 u: z两种形式: 资源' G- D; S0 O9 [. ]9 i
HTML 中引入资源文件时根目录为 mdx 所在目录。
/ r3 R, {/ h& n3 V8 Z6 E* c4 j$ } 存放
$ g& s2 v# {8 w! O _' M优先级裸露的资源文件 > mdd 中的资源文件。
/ C) l, H* p' V4 k 5 f8 h n$ w3 K
词典软件
# `/ N2 |7 i3 S4 q1 j3 u8 C
% P' D5 c1 L9 ^MDict作为官方词典软件,却是体验最差的。基本的功能都有,这里只谈缺点: 使用的 IE 浏览器,不支持许多新的 Web 规范,导致某些人制作的词典排版错乱,甚至某些引入了 JS 文件的词典直接弹窗报错。 音频只支持 SPX 格式,这是当年为了节省空间的产物,因为当年 MDict 的主要活跃在 Windows Mobile 上,那时的存储卡不便宜。但是如今已经不建议使用,因为音质太差,推荐使用 MP3 或 AAC 格式。即便是该作者开发的 iOS 版本 Mdict,同样也只支持 SPX 格式,这个很让人不解。 功能太弱,交互设计很差。
! h7 }% u9 L- D# ]# y- ~# d e# ^ GoldenDict毛子开发的词典软件,起初不支持 MDict,好在在开源社区的努力下后来支持了。 优点: 因为是 Qt 编写,使用的 Webkit 浏览器,支持的 Web 标准虽然不是最新,但是大部分的词典都能正常显示。 支持 MP3 音频,就这一点就值得推荐。 方便地导出 HMTL。 漂亮的界面,可以自定义软件界面样式,还有很棒的交互设计。 支持全文检索、支持词典排序、支持自定义在线词典、支持复制取词,还有大量优点,请自行探索。
$ o5 n4 ]& x8 S/ N e) @ T- @* r; o
存在的问题: 欧路词典集合了上述 GoldenDict 的部分优点还有以下优点: 界面更加现代化,更友好。 支持单词同步和收藏。 支持单词复习。 PC 端取词功能很强。 iOS 上最强词典。 7 G L1 Z m' X/ t
缺点: 只能从网页或手机版导入单词表,但网页版导入经常出现导入失败或者导入数量不一致的问题,手机上又不支持词组或带有符号的单词导入。 同步功能存在 BUG,偶尔出现同步数量不一致,需要注销重新登录才正常。 最严重的 BUG,同时存在于 PC 端和手机端。 因为不同的词典可能会使用相同的标签和样式,如果直接载入,会干扰其他的词典样式。因此欧路和 GoldenDict 的做法是重写 CSS,给不同的词典的 HTML 加上一个独立 id,在每个样式名前面加上 id 编号,但问题在于有的作者的 CSS 中存在中文,为避免浏览器以 ANSI 编码读取,因此在 CSS 头部加上了 @charset "utf-8";, GoldenDict 能正确处理它,但脑残的欧路词典就不能正确处理,它会忽略第一个 CSS 样式,没有加上 id 名,如果第一个样式名是 body,则会影响到所有词典的排版,这是我们不希望看到的。
: d- w4 c$ [: a7 ~% U7 u+ \
4 H+ \( s" a* W0 L! _' J$ d% l 如原始 CSS - @charset "utf-8";
2 r) o- ~( a$ Z -
! K# l& R- L% k4 A) X8 o8 H - body {
" a" w( n7 M c! T; I \' n* G - margin: 2em;. C8 w7 z/ t1 b3 p" z, b8 j, B C
- }. B+ X6 Q# d' i( T( z. f
- ( [; H4 N" h) o$ _/ f
- a:hover {
( I8 J8 ~) d8 e' }' c - color: #4372b6;
8 h) {8 l$ e- e7 A2 L- n; a; A2 r3 u - text-decoration: underline
& s6 M, V+ _" N# v* b - }
复制代码
) a6 v) u: k; m$ z# r; w: FGoldenDict 会解析为 - @charset "utf-8";
: F& k H' g2 [+ t% ?3 G8 e2 {+ X G+ u) \
" P6 L* R( @' L- #gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict body {
m" m- R0 a! I! k2 t - margin: 2em;
2 T B: W1 r- D$ Y3 a - }
- \/ O% v: n" G) z6 H
$ r9 R d' v. K- #gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict a:hover {/ E/ f k8 t& y9 z
- color: #4372b6;5 j- \* N* p# `& r2 b- h. I7 E
- text-decoration: underline
2 A4 o' t ^# H) i - }
复制代码
0 L' [8 `* o( w- G而欧路词典解析如下,body 前面没有加上 #ID224342347child,进而影响到全局的 body 标签。 - @charset "utf-8"; - N0 C+ x$ i* _! X6 |
- , }9 r, T* G1 S g
- body{$ m5 z# {8 i( F5 z2 d3 Q
- margin: 2em;
! j& @! x' @. }" p6 `7 @ - } - @( Z* C0 t3 b+ z) m
- # ^+ F) a) w% ~( _+ d4 @# y5 O, c
- #ID224342347child a:hover {
& W% D' A& s4 V6 n! a% y - color: #4372b6;
1 _/ f/ a9 S# J7 T( m! ^) k - text-decoration: underline7 `0 @& B+ @/ E' ^! u @( [* P/ e
- }
复制代码
6 m7 j& d$ F% H: `这就是为什么许多人用欧路词典排版混乱的原因,这个 BUG 我已经反馈了,不知道会不会改,反正我之前提过好多建议,该公司都没采纳,这个 BUG 我看也未必会修复。 因此我的建议是删掉 @charset "utf-8";,因为欧路词典和 GoldenDict 本身就是以 UTF-8 打开的,无需再多此一举。增加了反而会导致欧路词典解析出错。 8 b" \8 V7 z* I
制作工具制作步骤获取数据源:可以是自己编纂的,也可以是其他格式的词典,还可以从网站抓取。 按照 mdx 的规则清洗数据:上面提到的 mdx 规范。 用 MDXBuilder 3.0 Beta2 转成 mdx。 , m# T9 d0 S1 t6 \2 N8 {
配置 Source:即词典原始数据文本路径,扩展名随意。 Target:目标词典文件路径,扩展名必须为 mdx。 Sytle:留空,这个用不到。 Data:资源数据路径,有就填,没有就不填。注意了,资源数据一定要存放到一个单独的文件夹 xx 中,不要直接全部分散在 mdx 目录下,而且这个 xx 文件夹并不会打包到 mdd 中,它会作为 mdd 资源数据的根目录。 Options:
8 v3 j7 C- F8 `' d; q% C; BOriginal:一定要选 Mdict(Compact HTML),这种格式就是我们上面提到的规范。 Encoding:为避免乱码,必须选 UTF-8(Unicode)。 Title:词典标题,可以被欧路词典读取到。 Description:词典描述,支持 HTML 标签,不过支持十分有限,词典软件可以读取到。 未提到的其他选项不管。 / W- Q" Q+ X. a( {0 l% j9 w
; A( o6 \: x! a! y$ a0 T, p 制作技巧
# |1 c5 B2 j' V. |
+ x5 ~2 ?3 @7 M- `* P! \8 ^8 |. z5 Q e8 f
3 i+ X) F/ F6 Z
|