书友会使用指南
这份指南适合第一次使用「英语阅读俱乐部」的同学。你可以把它当作一条完整路线:先配置词汇量和 Anki,再选书、制定阅读计划,最后在阅读中处理单词和短语。
这个工具能帮你做什么
英语原版书最难的地方通常不是“没有毅力”,而是不知道这本书对自己到底难在哪里。
书友会会根据你的词汇水平分析一本英文书,给出:
- 当前词汇覆盖率:你大约能看懂多少词。
- 待记忆词数:读这本书前,哪些词最值得先学。
- 95% 核心词:为了把阅读顺畅度提高到约 95%,建议优先掌握的词。
- 每日阅读计划:按每日词数或章节拆分阅读任务。
- 阅读高亮:正文中直接标出生词、95% 核心词、COCA30000 未收录词和短语。
- Anki 同步:把值得复习的单词、短语和例句送进 Anki。
简单说,它的目标不是让你背完所有生词,而是帮你知道:读这本书之前,最值得先掌握哪些词。
使用前准备
建议先准备好三样东西:
- 一个书友会账号。
- 桌面端 Anki,并安装 AnkiConnect 插件。
- 书友会配套的 Anki 卡牌包:COCA30000、短语、生词本。
如果你只想先体验在线阅读,可以先注册登录并选择一本官方书;如果你要把单词发送到 Anki,请按下面的 Anki 步骤配置。
第一次使用流程
1. 登录或注册
打开 https://books-club.cn,点击右上角「登录」或「注册」。
登录后,右上角会出现账户菜单,里面常用入口有:
- 个人中心:设置词汇等级、阅读按钮、高亮显示、我的词库。
- Anki配置:连接本机 Anki,配置 Deck、Model 和字段。
- 待发送中心:移动端加入的词条,会在这里统一发送到 Anki。
- 个人书库:查看正在阅读、私有图书、图书申请。

2. 设置个人词汇量
进入「个人中心」,先设置你的词汇量基准。系统会用这个基准计算每本书的覆盖率、生词量和阅读建议。
你可以选择两种登记方式:
- 考试等级:如四级、六级等。
- COCA 档位:如 COCA 3000、COCA 5000、COCA 10000 等。
如果不确定,从当前最接近你的水平开始即可。之后在书籍详情页也可以重新选择词汇基准,系统会重新计算这本书的覆盖率和推荐程度。
3. 导入或维护「我的词库」
「我的词库」用于记录你已经掌握或希望长期管理的词。你可以:
- 导入 txt 词表。
- 手动添加单词。
- 删除已经不需要保留的词。
- 在阅读时点击单词后加入词库。
词库越贴近你的真实水平,书籍难度分析越准确。
Anki 配置
Anki 同步依赖桌面端 Anki 和 AnkiConnect。请在需要发送卡片的电脑上完成这一节。
1. 下载并导入配套卡牌
资源位置:夸克网盘和百度网盘中都有配套卡牌。
建议至少导入:
- COCA30000:用于更新已有高频词卡片的例句和出现次数。
- 短语:用于保存阅读中遇到的短语。
- 生词本:用于保存 COCA 外或你想单独积累的生词。

2. 安装 AnkiConnect 插件
打开 Anki,进入「工具」-「插件」-「安装插件」。


输入代码:2055492159

点击确定安装成功。
双击插件


安装后进入插件配置,把 webCorsOriginList 配置为允许书友会网站访问,直接复制下面的代码就可以:
{
"apiKey": null,
"apiLogPath": null,
"ignoreOriginList": [],
"webBindAddress": "127.0.0.1",
"webBindPort": 8765,
"webCorsOriginList": [
"http://localhost",
"https://read.tlpy8.com",
"https://books-club.cn"
]
}配置完成后,一定要重启 Anki。
3. 在网站里连接 Anki
登录网站后,打开「Anki配置」。

点击「测试连接并加载列表」。

连接成功后,网站会读取你 Anki 里的 Deck、Model 和字段列表,并尽量自动填入推荐配置。
重点检查三组配置:
- 主卡片:通常对应
COCA30000Deck 和COCA30000Model。 - 短语卡片:通常对应
短语Deck 和短语Model。 - 生词本:通常对应
生词本Deck 和生词本Model。
确认字段无误后,点击「保存配置」。


保存之后,就可以在阅读页把单词或短语发送到 Anki。
恭喜你🎉,到这里你已经配置成功了,下面就是阅读阶段了
选择一本书开始阅读
1. 从书库选书
进入「全部原版书」,可以按目标浏览:
- 古登堡计划:公开经典原著。
- 当代书:通常需要上传你自己拥有的同名 EPUB 后阅读。
- 考试专区:备考类材料。
点击一本书进入详情页。
2. 看懂书籍详情页
书籍详情页主要看三块:
- 词汇覆盖分析:全书字数、不重复词数、当前覆盖率、待记忆词数、达到 95% 还需词数。
- 阅读推荐程度:根据你的覆盖率判断这本书现在是否适合读。
- 阅读计划:选择按每日词数或按章节阅读,并查看每天的词数、生词数、核心词数。
如果这本书显示「上传后阅读」,说明平台不直接提供正文。你需要上传自己拥有的同名 EPUB,验证通过后即可阅读。
3. 加入正在阅读
打开某一天的阅读内容后,系统会记录你的阅读位置。以后可以从「个人书库」-「正在阅读」继续。
读完当天内容后,点击「完成阅读」,阅读计划会同步更新。
阅读页怎么用
阅读页是日常使用最多的地方。
1. 看高亮
正文里会根据你的设置标出不同类型的内容:
- 非 core95 的不认识词:可以边读边查,不一定都要背。
- 95% 核心词:优先级更高,建议重点处理。
- COCA30000 未收录:可能是专名、低频词或书中特有表达。
- 短语高亮:系统识别出的词组、短语或搭配。
如果觉得高亮太多,可以到「个人中心」-「阅读高亮显示」里关闭部分类型。
2. 使用「译」和「解」
阅读正文旁边可能出现两个快捷按钮:
- 译:生成当前段落或标题的中文翻译。
- 解:解释当前段落的难点、结构或含义。
「译」适合快速确认理解;「解」适合精读时拆句和理解难句。你可以在「个人中心」里设置只显示「译」、只显示「解」,或两个都显示。
3. 点击单词查词
点击正文中的单词,会打开单词弹窗。里面通常包括:
- 这个词在本书出现的次数。
- COCA 词频位置。
- 考试标签。
- 发音。
- 原句和整句翻译。
- 中文释义、英文释义和更多词典信息。

4. 三个单词按钮怎么选
桌面端单词弹窗里常见三个按钮:
发送到COCA
适合 COCA30000 里已经存在的词。
点击后,系统会在你的 COCA 卡片中更新这次阅读的例句,并记录出现次数。适合高频词、熟词新义、你想反复在原句中复习的词。
添加到我的词库
适合你已经认识、或决定以后视为已掌握的词。
加入后,它会进入网站的「我的词库」,后续阅读分析会更贴近你的真实词汇水平。
发送到生词本
适合 COCA 外的词、低频词、专门想整理的生词。
系统会把词典信息、释义、词性、例句等写入你的 Anki「生词本」卡片。
短语怎么处理
阅读页右侧有「学习侧栏」,里面有「短语」和「目录」两个标签。
在「短语」里可以看到当天检测到的短语,包括:
- 短语本身。
- 在正文里的匹配形式。
- 出现次数。
- 例句。
- AI 解释。
如果短语有释义,可以点击「发送到 Anki」。移动端会显示为「加入待发送」,需要之后到桌面端统一发送。
移动端使用
移动端适合阅读、查词、加入待发送和同步进度。

移动端底部常用入口:
- 阅读:查看书单和当前推荐。
- 书架:继续正在阅读的书。
- 我的:登录、会员、词汇本等个人功能。
移动端阅读时可以:
- 调整字号。
- 点击单词查词。
- 把单词加入词汇本。
- 标记当天阅读完成。
- 上传自有 EPUB 解锁需要上传后阅读的书。
什么是「加入待发送」
手机通常不能直接连接你电脑上的 Anki,因为 AnkiConnect 运行在电脑本机的 127.0.0.1:8765。
所以移动端点击「加入待发送」时,系统会先把单词或短语放进网站的待发送队列。等你回到电脑上,打开 Anki 和网站,再进入「待发送中心」统一发送。

待发送中心
进入网站右上角账户菜单,打开「待发送中心」。
这里会按类型分组:
- COCA内:发送后更新 COCA30000 里已有的卡片。
- COCA外:发送到生词本。
- 短语:发送到短语卡片。
你可以切换「待发送」和「已发送」,也可以选择多个词条批量发送。
注意:真正发送到 Anki 时,请确保:
- 正在使用电脑端。
- Anki 已经打开。
- AnkiConnect 插件已经启用。
- 网站「Anki配置」已经保存成功。
会员功能说明
不同账号权益会影响可用功能:
- 免费:浏览官方书库、阅读官方图书、查看基础词典释义、提交会员核销申请。
- VIP:包含免费权益,可使用 AI 翻译、总结、短语语境解释,并管理个人书库。
- SVIP:包含 VIP 权益,可使用 AI 解释,提交私有图书上传分析申请。
购买后进入「会员领取」,填写 B 站订单号或 B 站昵称/UID,也可以上传付款截图。管理员核对后会为当前账号开通权益。
常见问题
点击测试连接失败怎么办?
先检查四件事:
- Anki 是否已经打开。
- AnkiConnect 是否安装并启用。
- 插件配置里是否包含
https://books-club.cn。 - 修改插件配置后是否已经重启 Anki。
为什么手机上不能直接发送到 Anki?
因为 AnkiConnect 只在你的电脑本机运行。手机无法访问电脑本机的 127.0.0.1:8765,所以移动端会先加入待发送队列,再由桌面端统一发送。
发送到COCA失败怎么办?
通常是 Anki 配置没有找到对应卡片。请检查:
- 主卡片 Deck 是否选中
COCA30000。 - 主卡片 Model 是否选中
COCA30000。 - Word 字段是否对应卡片里的单词字段。
- Anki 里是否确实有这个词或它的原型。
如果这个词本来就不是 COCA30000 中的词,可以改用「发送到生词本」。
我应该把所有生词都发到 Anki 吗?
不建议。
优先处理三类词:
- 95% 核心词。
- 在本书反复出现的词。
- 你读到原句时觉得“以后还会用到”的表达。
低频、专名、只在这一页出现一次的词,可以先通过上下文理解,不一定马上制卡。
词汇量设置错了怎么办?
进入「个人中心」重新保存词汇等级,或在书籍详情页点击「词汇基准」重新选择。保存后系统会重新计算覆盖率、生词量和阅读建议。
推荐日常流程
- 打开「个人书库」继续正在阅读的书。
- 先看当天的词数、生词数和核心词数。
- 阅读正文,遇到关键生词再点开处理。
- 对高价值单词用「发送到COCA」或「发送到生词本」。
- 对有价值的短语先点「AI解释」,确认释义后发送到 Anki。
- 读完当天内容后点击「完成阅读」。
- 如果今天用手机加入了词条,晚上回到电脑端打开「待发送中心」批量发送。
这套流程的重点是:少做卡、多读书,把 Anki 用在真正值得复习的词和句子上。
短语牌组修改
<div class="phrase">
{{Phrase}}
</div>
{{#Meaning}}
<div class="section">
<div class="label">Meaning</div>
<div class="content">{{Meaning}}</div>
</div>
{{/Meaning}}
{{#Image}}
<div class="section">
<div class="label">Image</div>
<div class="content imgwrap" id="imgWrapPhrase">
{{Image}}
</div>
</div>
{{/Image}}
{{#Examples}}
<div class="section">
<div class="label">Examples</div>
<ul class="examples">
<li>{{Examples}}</li>
</ul>
</div>
{{/Examples}}
<script>
(function () {
function normalizeUrl(url) {
return (url || "").trim().replace(/["'<>),]+$/g, "");
}
function isLikelyImageUrl(url) {
if (!url) return false;
var cleanUrl = normalizeUrl(url);
if (/\.(png|jpe?g|gif|webp|bmp|svg)(\?[^\s]*)?$/i.test(cleanUrl)) {
return true;
}
try {
var parsed = new URL(cleanUrl, window.location.href);
var host = (parsed.hostname || "").toLowerCase();
var path = (parsed.pathname || "").toLowerCase();
var hintText = host + path + (parsed.search || "").toLowerCase();
if (!/^https?:$/i.test(parsed.protocol)) return false;
if (/\/images?(\/|$|\?)/i.test(path)) return true;
if (/^th\.bing\.com$/i.test(host) && /^\/th\/id\//i.test(path)) return true;
if (/image|img|photo|pic|thumb|thumbnail|media|asset|static|upload|cdn|gstatic|googleusercontent/.test(hintText)) {
return true;
}
} catch (e) {
return false;
}
return false;
}
function createFallbackLink(url) {
var link = document.createElement("a");
link.href = url;
link.target = "_blank";
link.rel = "noopener noreferrer";
link.className = "extlink";
link.textContent = url;
return link;
}
function createImageOrLink(url) {
var cleanUrl = normalizeUrl(url);
if (!cleanUrl) return document.createTextNode("");
if (!isLikelyImageUrl(cleanUrl)) {
return createFallbackLink(cleanUrl);
}
var img = document.createElement("img");
img.src = cleanUrl;
img.alt = "image";
img.loading = "lazy";
img.referrerPolicy = "no-referrer";
img.onerror = function () {
img.replaceWith(createFallbackLink(cleanUrl));
};
return img;
}
function fixMedia(wrapId) {
var wrap = document.getElementById(wrapId);
if (!wrap) return;
var nodes = Array.from(wrap.childNodes);
nodes.forEach(function (node) {
if (node.nodeType !== Node.TEXT_NODE) return;
var text = node.textContent;
if (!text || !text.trim()) return;
var frag = document.createDocumentFragment();
var regex = /https?:\/\/[^\s"'<>]+/ig;
var match;
var lastIndex = 0;
var hasMatch = false;
while ((match = regex.exec(text)) !== null) {
hasMatch = true;
var url = normalizeUrl(match[0]);
frag.appendChild(document.createTextNode(text.slice(lastIndex, match.index)));
frag.appendChild(createImageOrLink(url));
lastIndex = match.index + match[0].length;
}
if (hasMatch) {
frag.appendChild(document.createTextNode(text.slice(lastIndex)));
node.replaceWith(frag);
}
});
var links = Array.from(wrap.querySelectorAll("a[href]"));
links.forEach(function (link) {
var url = normalizeUrl(link.getAttribute("href"));
if (!isLikelyImageUrl(url)) return;
link.replaceWith(createImageOrLink(url));
});
}
fixMedia("imgWrapPhrase");
})();
</script>/* ===== Global ===== */
.card {
font-family:
-apple-system,
BlinkMacSystemFont,
"Segoe UI",
Arial,
"PingFang SC",
"Hiragino Sans GB",
"Microsoft YaHei",
sans-serif;
font-size: 20px;
line-height: 1.65;
color: #1f2933;
background: linear-gradient(180deg, #f7f8fb 0%, #eef1f5 100%);
padding: 26px 18px;
box-sizing: border-box;
}
/* ===== Card Container Feel ===== */
.card > * {
max-width: 720px;
margin-left: auto;
margin-right: auto;
}
/* ===== Phrase ===== */
.phrase {
font-size: 32px;
font-weight: 800;
text-align: center;
margin-bottom: 26px;
color: #111827;
letter-spacing: -0.02em;
line-height: 1.25;
}
/* ===== Sections ===== */
.section {
background: rgba(255, 255, 255, 0.96);
border-radius: 18px;
padding: 18px 20px;
margin-bottom: 18px;
box-shadow:
0 10px 28px rgba(15, 23, 42, 0.08),
0 2px 6px rgba(15, 23, 42, 0.04);
border: 1px solid rgba(226, 232, 240, 0.9);
}
/* ===== Label ===== */
.label {
display: inline-flex;
align-items: center;
font-size: 13px;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
color: #64748b;
margin-bottom: 10px;
}
.label::before {
content: "";
width: 6px;
height: 6px;
border-radius: 999px;
background: #94a3b8;
margin-right: 8px;
}
/* ===== Content ===== */
.content {
font-size: 20px;
color: #243040;
white-space: pre-line;
}
/* ===== Image ===== */
.imgwrap {
margin-top: 10px;
text-align: center;
white-space: normal;
}
.imgwrap img {
display: block;
max-width: 100%;
max-height: 280px;
margin: 8px auto 2px;
border-radius: 16px;
object-fit: contain;
box-shadow: 0 8px 22px rgba(15, 23, 42, 0.14);
}
.extlink {
display: inline-block;
margin-top: 6px;
padding: 8px 10px;
border-radius: 10px;
background: #f1f5f9;
color: #2563eb;
font-size: 14px;
line-height: 1.45;
word-break: break-all;
text-decoration: none;
}
.extlink:hover {
text-decoration: underline;
}
/* ===== Examples ===== */
.examples {
margin: 8px 0 0 0;
padding: 0;
list-style: none;
}
.examples li {
position: relative;
font-size: 19px;
color: #374151;
margin-bottom: 8px;
padding-left: 18px;
}
.examples li::before {
content: "›";
position: absolute;
left: 0;
top: 0;
color: #94a3b8;
font-weight: 700;
}
/* ===== Mobile ===== */
@media (max-width: 480px) {
.card {
padding: 20px 14px;
font-size: 18px;
}
.phrase {
font-size: 28px;
margin-bottom: 22px;
}
.section {
border-radius: 16px;
padding: 16px 17px;
}
.content {
font-size: 18px;
}
.examples li {
font-size: 17px;
}
.imgwrap img {
max-height: 240px;
}
}
/* ===== Dark Mode ===== */
.nightMode .card,
body.nightMode .card {
background: linear-gradient(180deg, #0f1115 0%, #171a21 100%);
color: #e5e7eb;
}
.nightMode .section,
body.nightMode .section {
background: rgba(31, 35, 45, 0.96);
border: 1px solid rgba(75, 85, 99, 0.65);
box-shadow:
0 10px 26px rgba(0, 0, 0, 0.35),
0 1px 4px rgba(0, 0, 0, 0.25);
}
.nightMode .phrase,
body.nightMode .phrase {
color: #f9fafb;
}
.nightMode .label,
body.nightMode .label {
color: #9ca3af;
}
.nightMode .label::before,
body.nightMode .label::before {
background: #6b7280;
}
.nightMode .content,
body.nightMode .content {
color: #e5e7eb;
}
.nightMode .examples li,
body.nightMode .examples li {
color: #d1d5db;
}
.nightMode .examples li::before,
body.nightMode .examples li::before {
color: #6b7280;
}
.nightMode .imgwrap img,
body.nightMode .imgwrap img {
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.45);
}
.nightMode .extlink,
body.nightMode .extlink {
background: #111827;
color: #93c5fd;
}