# @evenrealities/pretext 中文文档

规范地址：https://npmcn.com/package/%40evenrealities/pretext/

版本：0\.1\.4
npm 元数据更新时间：2026-04-16T12:33:09.232Z
中文译文更新时间：2026-11-14T01:02:12.197Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40evenrealities/pretext
原文对照：https://npmcn.com/package/%40evenrealities/pretext/?lang=original

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：681 kB，4 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2026-04-09T07:54:50.018Z
- 最新版本发布：2026-04-16T12:33:09.068Z
- 近 30 天下载量：128566（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：4（近 12 个月 4 个）

## 中文简介

Even Realities G2 眼镜的像素精确字体测量库

## 安装

```sh
npm install @evenrealities/pretext
```

也可以使用：`pnpm add @evenrealities/pretext`、`yarn add @evenrealities/pretext`、`bun add @evenrealities/pretext`

## README

# @ everyreality/ pretext

像素精确字体测量库 [乃至真实 G2](https://www.evenrealities.com/) 智能眼镜(EvenHub specially). 预测精确的文本布局尺寸与眼镜固件中使用的LVGL渲染引擎相匹配,因此可以精确地大小UI容器而无需猜测. 灵感来自 [借口](https://github.com/chenglou/pretext)。 。 。 .

> **说明:** 在多数情况下,测量方法都经过人工比较和对照实际的眼镜渲染进行核实,但在预测与固件输出不同的情况下,边缘情况可能存在. 特别是,对于固件字体中不存在的字符,结果可能取消,因为固件和这个库在某些情况下可能会不同处理缺失的格来克.

## 特征

-   **文字测量** ——多行布局预测并用词包
-   **克宁语** ——使用固件精确公式的每个字符配对调整
-   **宽字符支持** ——拉丁语,西里尔语,希腊语,CJK (中文,日语,朝鲜语),Bopomofo

## 安装

```bash
npm install @evenrealities/pretext
```

## API 密码

### `getTextWidth(text: string): number`

返回字符串的单行像素宽度,并应用克宁.

```ts
import { getTextWidth } from '@evenrealities/pretext';

const width = getTextWidth('Hello, world!');
// => 79 (pixels)
```

### `measureTextWrap(text: string, maxWidth: number): MeasureTextResult`

测量给定像素宽度范围内多行文字布局. 处理空格和连字符的字包, CJK 边界断开, 清晰的新线, 以及不存在断开机会时的硬断开.

`maxWidth` 应该是 **内部内容宽度** ——如果你的容器有垫子或边框,在呼叫前减去. 回来的 `height` 是纯文本高; 添加自己的粘贴/边框以获得最后容器大小.

```ts
import { measureTextWrap } from '@evenrealities/pretext';

const result = measureTextWrap('The quick brown fox jumps over the lazy dog', 200);
// => {
//   lineCount: 2,
//   height: 54,        // lineCount * 27 (line height)
//   lineWidths: [192, 96]
// }

// With padding + border:
const pad = 8, border = 2;
const inner = 300 - 2 * (pad + border);  // 280px available for text
const m = measureTextWrap('Hello world', inner);
const containerHeight = m.height + 2 * (pad + border);
```

**参数:**

| 参数 | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| `text` | `string` | —— 说 | 要测量的字符串 |
| `maxWidth` | `number` | —— 说 | 文本以像素为单位的现有宽度( subtract dadding/ border first) |

**返回类型 :**

| 外地 | 类型 | 说明 |
| --- | --- | --- |
| `lineCount` | `number` | 包装后行数 |
| `height` | `number` | 文字高度( 以像素计 )`lineCount * 27`(中文(简体) ) |
| `lineWidths` | `number[]` | 每行像素宽度 |

### `pxTruncate(text: string, maxPx: number): string`

将字符串切入像素预算, 附加 `'...'` 如果需要的话。 返回已匹配的原始字符串。 使用二进制搜索来高效地安装,并且是代码-意识(不会像emoji那样打破代对).

```ts
import { pxTruncate } from '@evenrealities/pretext';

const truncated = pxTruncate('Hello, world!', 50);
// => 'Hell...'
```

### `getAdvW(cp: number): number`

返回 1/16px 单位中一个代码点的原始提前宽度(无克宁,无四舍五入)。 遵循字体倒转链: eurroster - > eurroster crylgrek - > cn. 主要用于调试或构建自定义测量逻辑.

## 显示引用

G2眼镜有一个 **576 x 288 像素** lVGL 提供的显示,固定行高为 **27px (英语)**。 。 。 .

## 如何运作

库内嵌从G2固件中使用的LVGL C字体文件中提取出字体度量衡. 它复制了固件的文本塑造管道:

1.  **格莱弗搜索** ——通过三相倒转链(拉丁语->西里尔语/希腊语->CJK)解决每个代码点
2.  **克宁语** 使用固件公式应用配对调整: `(kern_value * kern_scale) >> 4`
3.  **每格氏圆形** ——每个前置宽度被四舍五入到像素上(`(adv + kern + 8) >> 4`),与LVGL的行为完全匹配
4.  **换行** 空格、连字符和CJK边界断开,硬断开作为倒入

注:如果固件字体的度量衡发生变化,则必须更新此库以匹配.

## 更改日志

### 0.1.4 (中文(简体) )

-   添加 Emoji 字体

### 1.1.3 国家

-   **断开 :** 删除 `containerPadding` 参数来自 `measureTextWrap`函数现在测量纯正文本——调用者应从中减去平板字/边框 `maxWidth` 在回电前再加回去 `height`。这避免了内部处理地标但边界宽度不连贯的情况.
-   **断开 :** 删除 `measureList`。它的逻辑是微不足道的(项目计分×40px,加上基本宽度比较),呼叫者可以与 `getTextWidth`。 。 。 .

### 0.1.2 (中文(简体) )

-   首次公开发布 `getTextWidth`, (中文(简体) ), `measureTextWrap`, (中文(简体) ), `pxTruncate`, (中文(简体) ), `measureList`,以及 `getAdvW`。 。 。 .

## 常见问题

### @evenrealities/pretext 是什么？

Even Realities G2 眼镜的像素精确字体测量库

### 如何安装 @evenrealities/pretext？

在项目目录运行 npm install @evenrealities/pretext，或使用 pnpm add / yarn add / bun add。

### @evenrealities/pretext 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @evenrealities/pretext 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @evenrealities/pretext 可以商用吗？

@evenrealities/pretext 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @evenrealities/pretext 的下载量有多少？

根据 npm 官方下载统计，@evenrealities/pretext 在 2026/10/14 – 2026/11/12 这 30 天内被下载 128,566 次，日均约 4,286 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @evenrealities/pretext 还在维护吗？

最新版本 0\.1\.4 发布于 2026/04/16（6 个月前）；至今共发布 4 个版本，其中过去 12 个月发布了 4 个；首次发布于 2026/04/09。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

