.lens 指南
.lens 是 LensBench 的镜头数据文件,相当于 Zemax 的 Lens Data Editor 加 System Explorer, 再加上评价函数、多重结构、公差和出图 / 验收设置,只是写成了文本。这一页从零写一个镜头;逐条的语法参考见 .lens 语法参考。
一行一条语句
head 位置参数... key=value ... # 注释- 语句名不区分大小写,参数名也不区分(
R=和r=一样)。 - 位置参数之间用空格或逗号分隔。
- 数字可以带单位:
T=2000um、wave 550nm、field angle 0.5deg。不带单位时按默认:长度 mm、波长 µm、角度 °。 - 写错了不会崩:每个错误都有行列号、错误码和"你是不是想写……",见 诊断码。
- 文件存成 UTF-8(开头带 BOM 也行)。Zemax 的
.zmx不能直接当.lens用,先lb import-zmx x.zmx转成.lens。
第一步:系统设置
title "Singlet"
aperture EPD 10 # 入瞳直径 10 mm;也可以 FNO 5 / NA 0.1 / float(float 要在光阑面写 semi=)
field angle 0, 5 # 两个视场:0° 和 5°
wave F, d*, C # 三个波长,* 标主波长;也可以写数字 0.55* 或 550nm*
ray_aim real # 光线瞄准:off(默认,射向近轴入瞳)/ real(迭代瞄准光阑)/ robust(大视场、广角)不写的话:孔径默认 EPD 10,视场默认轴上,波长默认 d 线,这些都会以 info 提示告诉你;光线瞄准默认 off。 广角、大视场或光阑像差明显的系统用 ray_aim real,例子见参照设计「广角」(桌面端主页 › 参照设计)。
物方远心(显微物镜、投影物镜、机器视觉镜头常用):在 aperture 行末尾加 telecentric,主光线在物方平行于光轴 (Zemax 的 Telecentric Object Space)。要求物距有限、视场用 object_height(或像高类)、孔径用 NA;光线瞄准此时不起作用(与 Zemax 一致):
aperture NA 0.133 telecentric
field object_height 0, 32, 48
surf OBJ T=110.86视场有权重或渐晕因子时,一行只写一个点:
field angle 0
field angle 14 w=2
field angle 20 vcy=0.1视场类型还有 paraxial_image_height(近轴像高)与 real_image_height(实际像高);不在 y 方向的点写成 (x, y), 如 field angle (0, 0), (3, 5)。波长权重写 w=,带权重时一行一个波长:wave 0.55 w=2。
第二步:面
面号就是位置:第一个面 OBJ(0 号),最后一个面 IMA,中间按顺序编号。
surf OBJ T=inf
surf 1 stop R=51.68 T=5 glass=SCHOTT:N-BK7
surf 2 R=-51.68 T=48
surf IMAglass是这个面之后的介质(和 Zemax 一样),不写就是空气。stop标光阑面(也可以把编号写成STO)。- 物面不写 T 时默认
T=inf(物在无穷远)。
玻璃
| 写法 | 含义 |
|---|---|
N-BK7 | 在 catalogs 列出的库里精确查找,按顺序取第一个 |
SCHOTT:N-BK7 | 钉死厂商 |
MIRROR | 反射面 |
model(1.6, 55) | 模型玻璃(nd, vd),色散按 Buchdahl 三项式 |
model(1.6, 55, polynomial) | 模型玻璃,色散按多项式拟合(OpticChat 语料用的模型;只在 0.38–0.75 µm 有定义,超出会报错) |
ideal(1.5) | 无色散理想材料 |
file("main/CaF2/Malitson.yml") | 直接指定内置材料库里的材料文件 |
查找顺序由 catalogs 语句定,默认 catalogs SCHOTT, OHARA, CDGM, HOYA, HIKARI, SUMITA;要改顺序写一行,如 catalogs SCHOTT, CDGM。
内置晶体与通用塑料:下面这些名字可以直接写(与 Zemax MISC / INFRARED 目录的写法相同),也可以钉死写成 BUILTIN:CAF2。 不带厂商时先在 catalogs 的厂商玻璃里精确查找,查不到才用内置的。数据是公有领域的文献值(每个牌号固定一份, 数据来源会写进诊断和证据记录),与 Zemax 自带目录的值可能有细微差别;要和 Zemax 逐位一致,请用 agf 加载同一份目录。
| 写法 | 材料 | 数据来源 | 数据覆盖波段(µm) |
|---|---|---|---|
CAF2 | 氟化钙 | Malitson 1963 | 0.23–9.7 |
BUILTIN:BAF2 | 氟化钡(BAF2 不带厂商时会先命中 CDGM 的同名玻璃) | Malitson 1964 | 0.27–10.3 |
MGF2 | 氟化镁(寻常光) | Dodge 1984 | 0.2–7.0 |
LIF | 氟化锂 | Li 1976 | 0.1–11 |
SAPPHIRE | 蓝宝石(寻常光) | Malitson & Dodge 1972 | 0.2–5.0 |
ZNSE / ZNS | 硒化锌 / 硫化锌 | Connolly 1979 / Debenham 1984 | 0.54–18.2 / 0.41–13 |
GERMANIUM / SILICON | 锗 / 硅(红外) | Burnett 2016 / Salzberg 1957 | 2–14 / 1.36–11 |
SILICA(= F_SILICA) | 熔石英 | Malitson 1965 | 0.21–6.7 |
POLYCARB / PMMA / POLYSTYR | 聚碳酸酯 / 亚克力 / 聚苯乙烯 | Sultanova 2009 | 0.44–1.05 |
厂商玻璃(SCHOTT、OHARA、CDGM、HOYA、HIKARI、SUMITA 等约 1700 个牌号,取自 refractiveindex.info 的公开整理)随软件内置, 不在这张表里;要和 Zemax 逐位一致,同样用 agf 加载同一份目录。厂商塑料(ZEONEX E48R、APEL APL5514ML 等)不内置, 请用 agf 加载厂商的 AGF。
同名牌号出现在多家厂商时(比如 F2 在 SCHOTT、HIKARI、CDGM 都有),会提示你写成 厂商:牌号。 牌号不确定就搜:lb glass "N-SF*" --catalogs SCHOTT。
用厂商官方的 Zemax 玻璃库(AGF):从厂商官网下载 .AGF 文件放到镜头旁边,加一行 agf "SCHOTT.AGF"。厂商名取文件名;AGF 里的牌号优先于内置库,并排在 catalogs 之前查找;支持 Zemax 的全部 13 种色散公式。搜索 AGF:lb glass "N-*" --agf SCHOTT.AGF。
用本机 Zemax 的整个玻璃库:agf 也可以指向一个目录,比如 agf "C:/Users/你/Documents/Zemax/Glasscat"。目录里的每个 .AGF 是一个厂商目录(含停产的老牌号,如 BK7、SK16),按 catalogs 的顺序查找——与 Zemax 的 GCAT 相同,所以从 Zemax 导入的设计用它最容易对上。牌号仍然只精确匹配,不做别名替换。玻璃找不到时,如果本机装了 Zemax,诊断里会提示它的 Glasscat 目录和要加的那一行(只提示,不会自动加载)。
非球面
surf 1 type=evenasph R=40 k=-0.6 a4=2e-5 a6=-3e-8 T=5 glass=SCHOTT:N-BK7系数按幂次命名:a4 就是 r⁴ 项,a6 就是 r⁶ 项。偶次非球面只许偶次,奇次非球面(type=oddasph)任意(最高 a30)。 这样写可以避免"系数表第一项到底是 r² 还是 r⁴"的经典错位。
Zemax 的扩展奇次非球面(Extended Odd Asphere,zmx 的 XOSPHERE)导入成 type=oddasph:系数按归一化半径换算成 aᵢ = Aᵢ / normⁱ, 是同一个面。导出时奇次项超过 r⁸(ODDASPHE 只有 8 个参数)、偶次项超过 r¹⁶ 的非球面写成 XOSPHERE(归一化半径 1)。
托里克面与理想薄透镜
surf 1 type=toroidal R=20 rx=35 k=-0.5 a4=1e-6 T=4 glass=SCHOTT:N-BK7 # 托里克面
surf 1 type=toroidal R=20.2 T=3.8 glass=SCHOTT:N-BK7 # 柱面(rx 不写 = inf)
surf 3 type=paraxial f=50 T=50 # 理想薄透镜,焦距 50
surf 4 type=tilted tany=0.1 T=5 glass=SCHOTT:N-BK7 # 倾斜平面 z = 0.1·y- 托里克面(Zemax Toroidal):
R、k、a2 a4 …都指 YZ 截面的曲线(偶次项),rx是绕平行于 y 轴的旋转半径 (XZ 截面的顶点曲率半径;不写或写 0 / inf 就是柱面,只在 YZ 截面有光焦度)。近轴量与 Seidel 按 YZ 截面算。 - 理想薄透镜(Zemax Paraxial):面本身是平面,只写焦距
f;入射没有像差时任何视场、任何共轭都完善成像,三阶像差为 0。 光程的算法同 Zemax 的 OPD Mode:opd_mode=0(默认)按本视场的固定共轭补光程;opd_mode=1逐条光线积分实际偏折, 入射带像差时更准、慢几十倍(zmx 的 PARM 2;Mode 2 / 3 不支持,导入时按 0)。 不能有 R / k / 非球面系数,不能是 MIRROR。 - 倾斜平面(Zemax Tilted):z = tanx·x + tany·y,只有这个面倾斜、后面的面不受影响(与「坐标断点 + 平面 + 反向坐标断点」等价); 含倾斜平面的系统和坐标断点系统一样按绝对位姿建面,不支持 solve 与厚度 pickup。
- zmx:TOROIDAL 的 PARM 1 是旋转半径(0 = 无穷大)、PARM 2 起是 y² y⁴ … 的系数;PARAXIAL 的 PARM 1 是焦距。 用户自定义面型(USERSURF,依赖 DLL)无法导入。
衍射面(二元面 Binary 2)
surf 1 stop type=binary2 R=24.33 T=2 glass=SCHOTT:N-BK7 norm=10 p2=-443.5 p4=258.6 # 衍射-折射混合透镜- 在偶次非球面基底(
R、k、a2 a4 …)上加相位 Φ = m·Σ pN·ρᴺ(弧度),ρ = r /norm(归一化半径,mm)。 相位项按 ρ 的幂次命名:p2是 ρ² 项(Zemax 的 A1)、p4是 ρ⁴ 项(A2)……,只有偶次。写了相位项就要写norm。 m是衍射级次,不写 = 1。光线按 n′·sinθ′ = n·sinθ + λ/(2π)·∂Φ/∂r 偏折,所以 p2 < 0 是会聚(正光焦度): 近轴光焦度 φ = −λ·m·p2 / (π·norm²),与波长成正比——这就是衍射面「负色散」(阿贝数约 −3.45)可以用来消色差的原因。- 近轴量(EFFL、BFL、近轴 solve)、Seidel(衍射面没有场曲贡献)都计入衍射光焦度;相位项可以当变量:
var p2@1 p4@1。 - 衍射效率按 100 % 计(只追所写的那一级);衍射反射镜(MIRROR)暂不支持。
- zmx:BINARY_2 的 PARM 0 是衍射级次(旧版文件不写,按 1 级导入)、PARM 1–8 是基底 r² … r¹⁶ 项,Extra Data 1 是相位项数、 2 是归一化半径、3 起是 ρ²、ρ⁴ … 的系数;相位项的变量标记导入导出。
衍射光栅
surf 3 type=grating R=-500 T=-250 glass=MIRROR lines=1200/mm m=-1 # 凹面反射光栅,−1 级
surf 2 type=grating T=10 lines=0.6/um m=1 # 透射光栅(600 线/mm)- 标准面(
R、k,可以是MIRROR)上刻线平行于局部 x 轴(要转方向用坐标断点),只在 y 方向偏折: n′·M′ = n·M + m·λ·lines(M 是 y 方向余弦)。0 级就是镜面反射 / 直透;Littrow 角 sinθ = −m·λ·lines/2。 lines必须写单位:1200/mm或1.2/um(Zemax 填的是每 µm 的线数,差 1000 倍,所以不默认补单位)。m不写 = 1。- 光栅的偏折是常量、不是近轴的线性项:近轴量(EFFL、F 数、入瞳出瞳、近轴 solve)与 Seidel 按 0 级(只有基底)算,构建时 给
I-GRATING-PARAXIAL提示;点列、光扇、MTF 等实际光线分析按所写的级次。光谱仪各波长的像点位置用lb ray或点列图看。 - zmx:DGRATING 的 PARM 1 是每 µm 的线数(不随镜头单位换算)、PARM 2 是衍射级次。
solve 与 pickup
surf 6 R=-18.39533 T=solve(marginal_height, 0) # 厚度求解到近轴焦点
surf 5 R=solve(fnum, 4) # 曲率求解到像方 F/4
surf 3 R=pickup(1, scale=-1) # 半径取第 1 面的相反数solve 挂在哪个格子就按 Zemax 的语义解释:面 j 厚度上的 marginal_height 控制的是面 j+1 上的边缘光线高度。 全部种类见 lb help solve。
表面口径与遮拦(挡光)
semi= 只是通光半口径(画图、边厚检查用),不挡光——和 Zemax 的 Semi-Diameter 一样。要让某个面挡光, 写 aperture=,对应 Zemax 面属性里的 Aperture:
surf 4 stop R=20.3 T=4.75 aperture=circular(4.5) # 圆形口径:半径 4.5 之外的光线被挡
surf 5 R=79.7 T=2.95 aperture=circular(1.5, 12.5) # 圆环:(Min Radius, Max Radius),与 Zemax 顺序相同
surf 2 T=0 aperture=obscuration(12) # 圆形遮拦:中心 12 mm 之内被挡(卡塞格林次镜)
surf 7 T=5 aperture=rectangular(3, 2) # 矩形口径:x 半宽 3、y 半宽 2
surf 3 R=-50 T=30 semi=9 aperture=float # 浮动口径:按半口径挡光(semi 固定时按 semi)
surf 1 stop R=50 T=5 aperture=circular(1.5, 12.5, dx=2.25, dy=-3.5) # 口径偏心(Aperture X/Y-Decenter)| 写法 | Zemax | 挡掉哪些光线 |
|---|---|---|
circular(max) / circular(min, max) | Circular Aperture | 落点半径 < min 或 > max |
obscuration(max) / obscuration(min, max) | Circular Obscuration | 落点半径在 [min, max] 之内 |
rectangular(x 半宽, y 半宽) | Rectangular Aperture | |x| > x 半宽 或 |y| > y 半宽 |
float | Floating Aperture | 落点在半口径之外 |
以上加 dx= dy= | Aperture X/Y-Decenter | 口径中心偏到 (dx, dy) |
- 判定在本面局部坐标里做(口径跟着面走,偏心、倾斜的面也一样);长度可带单位(
circular(4500um))。 - 被挡的光线在点列图、MTF、波前、足迹里都不算;布局图里光线画到挡它的面为止,遮拦画成粗黑线,口径比光束大时面画到口径边缘。
- 足迹图画出口径轮廓(点划线)与遮拦(灰色),「口径外」按口径数。
- 自动半口径按不挡光时的光束算(与口径无关)。
- 导入 / 导出 zmx:CLAP / OBSC / SQAP / FLAP / OBDC 一一对应;椭圆口径、矩形遮拦、十字支架等暂不支持(导入时警告)。
坐标断点(折转、倾斜、偏心)
和 Zemax 一样用坐标断点面改变后续面的坐标系:
surf 2 R=-50 T=30
surf 3 type=coordbreak tx=45 T=0 # 坐标系绕 x 转 45°
surf 4 T=0 glass=MIRROR # 镜子在倾斜后的坐标系里
surf 5 type=coordbreak tx=45 T=-15 # 再转 45°;反射后沿 −z 走,厚度为负
surf IMA- 参数:
dxdy(偏心,mm)、txtytz(倾斜,度)、order(0 = 先偏心再依次绕当前 x→y→z 轴倾斜;1 = 先倾斜 z→y→x 再偏心)。 - 坐标断点面本身不追迹光线,介质沿用前一面;不能有半径、玻璃、solve,不能是物面/像面/光阑。
- 含坐标断点的系统暂不支持 solve 和厚度 pickup(用优化代替)。
- 只有平面折转镜时,近轴量和 Seidel 按展开的同轴系统计算;有焦度的面被偏心/倾斜时,近轴量不可用(info 提示), 点列图、光扇、MTF 等实际光线分析照常。完整例子见参照设计「折转镜」。
第三步:变量
var R1..R6 T6 a4@5R/T/K 可以写成 R3、T6、K2;其他参数写成 参数@面号。引用或范围后面可以加上下界,优化时守界: var R1 in 10..100 T6 in 30..50(R、T 是长度,可写单位;半径的界两端要同号)。取消变量用 lb fix。挂了 solve/pickup 的格子不能再当变量; 用 lb set 给某格设 solve 时,会自动取消这一格的变量标记(和 Zemax 一样)。
模型玻璃的折射率与阿贝数也能当变量(Zemax 模型玻璃的 Vary Index / Vary Abbe):面后介质写成 glass=model(nd, vd), 变量写 nd@3、vd@3。优化结果写回成一个 glass=model(…)。没写上下界时 nd 限在 1.40–2.10、vd 限在 15–100 (常见光学玻璃的范围),要别的范围就写 var nd@3 in 1.5..1.8。
评价函数也写在同一个文件里:default spot centroid rings=3(Zemax 的优化向导)、op EFFL target=50mm(MFE 的一行)、 let(中间量)。写法见 评价函数与优化,操作数见 操作数参考(评价函数)。
多重结构(变焦、多组态)
config 3 # 三个组态(Zemax MCE 的三列)
mc T5 24.353, 13.981, 5.753 # 第 5 面厚度在三个组态的值(变焦间隔)
mc T10 6.156, 23.118, 38.638
mc glass@6 N-BK7, N-BK7, N-SF6
mc field@3 20, 14, 7 # 第 3 个视场的 y
mc aperture 10, 12, 14 # 系统孔径的值(类型不变)
mc weight 1, 1, 2 # 组态权重(Zemax CWGT)- 每个组态是同一设计的一份拷贝,
mc行给出与组态 1 不同的参数;surf/field/wave/aperture行上的值就是组态 1 的。mc的第一个值应与它相同(不同时警告 W-MC-BASE,按mc算)。删掉config与mc行,设计就回到组态 1。 - 引用写法同
var:R4T4K4,其他面参数写参数@面号(glass@6semi@3a4@5tx@4…);视场field@2(y)、field_x@2、field_w@2、field_vdy@2…,波长wave@1(可写谱线名)、wave_w@1。全部可控参数见 .lens 语法参考。 - 有 solve / pickup 的参数不能再由
mc控制。由mc控制的 R / T / K / aN 标了var(如var T5),每个组态的值各是一个 变量(变焦间隔的优化);没由mc控制的变量各组态共用。 - 评价函数:
op … config=2只在组态 2 上算(Zemax 的 CONF 行);不写config=的行每个组态都算。default的逐光线行按各组态 自己的视场与波长展开。总评价函数按组态权重(mc weight)合起来;lb merit按组态列出每行与各组态的值,lb optimize各组态一起优化,结果写回 surf 行与 mc 行。改 mc 的单个值用lb mc-set 镜头 T5 2 13.5。 lb check逐个组态检查,组态 2 起多出来的问题前面标「组态 k:」;修改命令只要让任何一个组态多出新错误就拒绝。- Zemax 互通:
lb import-zmx导入 MCE(THIC、CRVT、CONN、GLSS、SDIA、PRAM、APER、YFIE、XFIE、FLWT、FVDX…、WAVE、WLWT、CWGT), 文件的当前组态不是 1 时surf行换成组态 1 的值;还不支持的(IGNR、TEMP / PRES 热分析、非序列操作数……)在提示里计数。lb export-zmx写回。 - 按组态分析与出图:分析命令都接受
--config k(MCP 里是config参数),组态号进证据键,图框里镜头名后标「组态 k/n」; 桌面端状态栏有组态选择框(只在多组态设计时出现)。lb plot 镜头 layout --view "configs=all"把各组态的布局上下排开、 同一 z 比例与原点,变焦间隔怎么移动一眼看出(也可写成view layout configs=all)。 - 验收按组态写:
spec efl target=70mm tol=1% config=2只在组态 2 上验,spec ttl max=60mm config=all每个组态都验, 不写config=的在当前组态上验。lb verify每个(规格, 组态)判一次,每个组态各登记一份证据,见 出图指南「规格与验收」。
公差
tol radius 1..6 ±2fr # 光圈数(Zemax TFRN),按测试波长与通光半口径换成半径;也可写 ±0.05mm(TRAD)或 ±0.1%
tol thick 1..5 ±0.02mm # 厚度(TTHI),后面的面跟着移
tol sdecenter 1..6 ±5um # 单面偏心 x / y(TSDX / TSDY)
tol stilt 1..6 ±0.01deg # 单面倾斜(TSTX / TSTY),绕本面顶点
tol decenter 1..2 ±0.01mm # 元件偏心(TEDX / TEDY):面 1–2 是一个元件
tol tilt 1..2 ±0.02deg # 元件倾斜(TETX / TETY),绕元件第一面顶点
tol stilt 4 -0.01..+0.03deg # 不对称写成 下限..上限
tol index 1, 3, 5 ±0.001 # 面后玻璃折射率偏差(TIND,绝对值,不写单位),各波长同加
tol abbe 1, 3, 5 ±1% # 面后玻璃阿贝数偏差(TABB),保持 n_d、按比例缩放色散
tol test_wave 0.6328um # 光圈数 fr 的测试波长,默认 0.6328 µm(Zemax TWAV)
tol criterion rms_spot # 判据:rms_spot(默认)/ rms_wave / mtf
tol criterion mtf freq=30/mm field=all dir=avg min=0.3 # MTF 判据(见下)
comp T6 # 补偿器;不写 = 像面前那段厚度(后截距);comp none = 不补偿- 有量纲的公差必须写单位(折射率偏差是无量纲的,不写);index / abbe 要求面后有玻璃;逐面类的范围是逐个面,元件类(decenter / tilt)的范围是一个元件。
lb tolerance 镜头 [--out tol.png]:灵敏度分析——每项取上下限,在设计的拷贝上施加(偏心 / 倾斜插坐标断点,后面的面不动), 重新优化补偿器后算判据,列出每项的判据与变化(按影响排序)和均方根合成的估计,--out出龙卷风图。设计本身不动; 分析前 solve / pickup 固化成当前值,对焦交给补偿器。lb tolerance 镜头 --mode montecarlo --trials 200 --seed 1 [--out mc.png]:蒙特卡洛——每次试验所有公差同时随机取值 (正态分布,上下限 = ±2σ,截断在上下限内),补偿后算判据,给均值、标准差与分位数(x% 的试验不超过该值),--out出直方图 + 累计良率曲线。种子相同结果相同。- MTF 判据
tol criterion mtf freq=30/mm [field=all|0–1] [dir=avg|T|S] [min=0.3]:频率必写、带单位(/mm);field写 all(默认)或相对视场 0–1(取最接近的已定义视场,同spec mtf);dir是子午弧矢平均(默认,Zemax MTFA)/ 子午 T / 弧矢 S。口径是衍射 FFT MTF(复色,同lb mtf的默认),判据值 = 所选视场按视场权重的平均,越大越好: 灵敏度报 ΔMTF(负 = 变差),估计 = 名义值 − 均方根合成;蒙特卡洛的分位数读作「x% 的试验不低于该值」,另列各视场的统计,写了min=再给达标率(所选各视场的 MTF 都不低于阈值的试验比例)。补偿器先按 RMS 波前粗调,再按判据本身(平均 MTF)细调。FFT 取样固定(--mtf-sampling,默认 64,各次扰动同一取样;名义设计上取样不足时输出里提示),进证据键。MTF 判据比 RMS 判据慢得多(Cooke 三片式、30 项公差,蒙特卡洛约 0.6 秒一次)。 - tol / comp 不进模型哈希:改公差只让公差分析过期。
第四步(可选):视图规格与验收规格
出图选项和验收目标也写在同一个文件里,能 diff、AI 能写、会话能复现:
view spot rings=8 box=120um # 点列图:8 环采样(取样选项),方框 120 µm(显示选项)
view layout numbers=on fold=on # 布局:标面号、压缩离群的大间隔
spec efl target=50mm tol=1% # 验收:焦距 50 mm ±1%
spec mtf freq=50/mm field=0.7 dir=T min=0.3
spec distortion max=2% # 默认按绝对值;带符号写 signed
pack prescription paraxial layout spot mtf verify conclusions # 报告素材包导出哪些(lb pack)- 有量纲的数值必须写单位(
120um、50/mm、2%、13deg),不写会报错,不会默认补单位。 - view / spec 不改变模型哈希:改它们不会让别的分析过期。
lb verify逐条验收;lb plot出图时把规格画在图上。详见 出图指南。pack写报告素材包导出哪些条目,见 报告素材包。
用命令改,而不是手改
手改文本完全可以,但用命令有三个好处:自动重编号、先看 diff、可撤销。
lb set my.lens 3 R=-25 glass=SCHOTT:N-SF5 --dry-run
lb insert my.lens 2 R=-200 T=1 # 2 号面后插入,后面的面号、var、pickup 自动 +1
lb delete my.lens 3
lb stop my.lens 3
lb system my.lens "aperture FNO 4"
lb vary my.lens R1..R4
lb view-set my.lens spot rings=8 box=100um
lb spec-add my.lens efl target=50mm tol=1%
lb fmt my.lens --force # 规范化排版(会丢 # 注释)编辑只改动必要的字符:改一个半径,diff 里就只有那一个数字在变,注释和对齐都保留。