Lacan.js:把拉康的图式变成能动手的档案
Lacan.js:把拉康的图式变成能动手的档案
拉康的图式不是用来「看」的——至少不只在纸上看。
🔗 在线体验:https://bilbillm.github.io/Lacan.js/
🔗 源码仓库:https://github.com/bilbillm/Lacan.js
拉康在研讨班里画了很多图:Schema L、Schema R、Schema I、欲望图(Graph of Desire)、四种话语的矩阵……这些图被印进书里、被引用在各种论文里,但它们几乎总是以同一种方式出现——一张静止的黑白示意图,旁边配着一段解释。
问题在于,拉康的图是「动」的。Schema L 里的两组箭头在两条轴线之间交换,话语矩阵的行会整排旋转,欲望图在四个阶段里一层一层往上叠。静态的图只能截取一个瞬间,就像用一张照片教人打太极。
所以我把它们做成了一个交互网站,叫 Lacan.js:一个面向公众与拉康理论学习者的交互式精神分析图式档案。这篇文章是它的项目介绍。
它是做什么的
网站收录了 14 个理论入口,分为三组:
- 核心图式:Schema L、Schema R、Schema I、四阶段欲望图
- 扩展构造:五种话语、性化公式、光学模型、主体拓扑、RSI
- 相关谱系:Pinto、Baudouin、Benvenuto、Eros–Thanatos、Santini–Cousquer
此外还有两条谱系线:一条是精神分析发展史的时间线,十个事件档案从 1885 年一路排到 1990 年;另一条是弗洛伊德、克莱因、拉康、温尼科特、比昂与多尔多六位分析家的交互谱系。
每个理论入口都有中英文说明、简短的出处,以及一个与理论本身对应的专属交互。图不是配图——交互就是图式的一部分。
为什么是交互的
举两个例子。
Schema L 画的是「无意识是他者的话语」。它只有四个位置——主体 S、自我 a′、大他者 A 和小他者 a——以及两条轴线。纸上的图永远是死的:线段交叉成一个 Z 形,看五分钟也说不出它「动」在哪里。但在 Lacan.js 里,你可以选中任意两个位置,观察两组箭头如何切换方向。当「主体的无意识话语穿过大他者」这句话终于有了可以操作的形状,「穿过」这个词才第一次落到实处。
欲望图更极端。它在研讨班里被画了很多遍,每一版都在旧图之上再叠一层。网站把它的四个阶段拆开,你可以从第一阶段一路切到第四阶段,看着符号层一层一层长出来——而不是一上来就面对一整张密不透风的网。
四种话语则是矩阵的旋转:主人话语、大学话语、分析家话语与歇斯底里话语,四个位置、四个术语,每旋转四分之一圈就换一套关系。静止的表格会丢掉「旋转」这个动作,而旋转恰恰是话语理论的核心。
其余入口也各有各的玩法:性化公式可以切换男性侧与女性侧,光学模型可以调整观察者的位置,RSI 与波罗米结则可以直接点亮符号界、想象界与实在界。它们做的是同一件事:把理论里动态的、关于位置的那一面,还给它。
视觉与交互上的一些决定
网站长得很像一份「档案」:纸张底色、印刷排版、朱红与钴蓝两个强调色,卡片是方角而不是圆润的玻璃拟态。这套视觉是从「理论档案」这个意象出发的——图式本来就是研讨会记录里被反复勾画、批注的东西。
默认亮色,暗色主题完整且可持久化;中英文一键切换,偏好存在本地。键盘导航和焦点管理是标配,动效也尊重 prefers-reduced-motion——系统开启减弱动效时,视差、平滑滚动和 SVG 描线动画会被去掉,但最终状态保持完整。
技术上的选择
技术栈是 React 19 + TypeScript 5.9 + Vite 7 + Tailwind CSS 4,动效交给 Framer Motion,图标用 Lucide。整站没有路由,是一个语义化的滚动长页:首屏 → 理论档案集 → 时间线 → 波罗米结 → 页尾。
想特别说的是两点。
第一,14 个可视化全部是代码原生 SVG。不是把历史图片的扫描件塞进页面,而是用组件把每条线、每个节点重新画了一遍——这样它们才可能被选中、被拖拽、被动画。历史图片作为参考与出处保留在仓库里。
第二,性能是被当成预算来做的。所有可视化懒加载,首屏 gzip 预算 140 kB;E2E 覆盖全部面板、扩展交互、导航、持久化、时间线、波罗米结、移动端与减弱动效;性能采样要求 p95 帧间隔不超过 34ms。推到主分支后 CI 会依次跑 lint、构建与 Playwright,再把 dist 发布到 GitHub Pages。
做得比较慢的地方
最慢的不是画 SVG,是核对。每个图式的节点名称、箭头方向、术语的原文与通行译名,都要回到原著和译本里对一遍。Schema R 的标注、欲望图每一层的符号,错一个位置,交互再顺滑也是错的。
其次是双语。中英文说明不是机翻,而是两套独立的文案。图式术语在两种语言里各有各的坑——大他者与小他者在英文里是 Other 与 other 的区分,在中文里则要交代清楚「他者」与「小他者」的距离。
最后是克制。一个理论页面其实能塞很多花活,但动效一旦盖过理论本身,就变成装饰了。这个项目里我删掉的交互比留下的多——删除比添加难,这大概是最深的体会。
写在最后
拉康说,「Je suis là où je ne pense pas」——我在我不在之处存在。Schema L 把这句话画成了两条交叉的线。
我做的只是把纸上的线换成屏幕上的线,让它们可以被选中、被拖动、被旋转。如果读者愿意把它当作第一张地图,而不是最后一张,那就够了。
项目以 MIT 协议开源,代码在 GitHub 上,任何问题都欢迎开 issue。
- 标题: Lacan.js:把拉康的图式变成能动手的档案
- 作者: 路灯下的陌生人
- 创建于 : 2026-07-31 12:00:00
- 更新于 : 2026-07-31 12:00:00
- 链接: https://bilbillm.github.io/2026/07/31/lacan-js/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。