服务:Spring Boot 3.2 + docx4j 8.3.9,POST /api/v3/server_office_file/file/parse
接受 .docx,返回 HTML(公式 → LaTeX,图片 → RustFS 外链)
公式支持三类来源:
- OMML(Word 2007+ 公式) → Python omml_mathml2latex
- MathType OLE 对象 → Ruby mathtype2mathml → MathML → LaTeX
- Word EQ 域(老教辅主力) → EqToLatexUtil(本次新增)
本次改动:
1. 新增 java-svc/.../core/EqToLatexUtil.java:
移植自 jby backend-services office-core,EQ 语法 → LaTeX
(\f→\dfrac、\r→\sqrt、\i→\int/\sum/\prod、\s→^{}/_{}、\b→\left\right、
\a→array、\x→\boxed/\overline、\o\al 堆叠、圈码、化学符号、极限、连等式)
品牌标记 JBYU* → WPU*,与采集端一致
2. CtoMathFinder:接上 EQ 分支(原为 not-ported 桩),域代码经
EqToLatexUtil.convert 转 LaTeX 写入 eqLatexMap(WPEQNUM 占位符)
3. WordParseUtil.dealPlaceholder:EQ 的 LaTeX 同样加 \( \) 包裹
(原先因 WPEQNUM 例外不加包裹,前端/MathJax 不渲染)
修前症状:教辅 Word 里分式/方程组/上下标整段丢失(如 {−1/3, 1} 变成 {-,1})
修后实测:46 份教辅 2908 处 EQ 域全部还原,公式总数 2954 处、零未包裹残留
安全:application.yml(含 RustFS 密钥)不入库,提供 application.yml.example;
OssService 的 @Value 默认密钥已清空
64 lines
2.1 KiB
Python
64 lines
2.1 KiB
Python
"""
|
||
Common unit definitions for chemistry, physics, and mathematics.
|
||
|
||
Contains:
|
||
- COMMON_UNITS: Set of common units that should be formatted as \\mathrm{unit}
|
||
Includes: chemistry units, SI base units, SI derived units, non-SI units,
|
||
angular units, time units, concentration units, biological units
|
||
"""
|
||
|
||
# Common units that should be formatted as ~\mathrm{unit}~ (with preceding and trailing space)
|
||
COMMON_UNITS = {
|
||
# Chemistry units
|
||
'mol', 'M', 'mM', 'µM', 'nM', 'pM', 'pH', 'pOH', 'atm', 'bar', 'Torr', 'eq',
|
||
'aq', 'sol', 'ppm', 'ppb', 'vol', 'wt',
|
||
|
||
# SI base units
|
||
'kg', 'g', 'mg', 'µg', 'ng', 'pg', 'ton', 'tonne',
|
||
'm', 'km', 'cm', 'mm', 'µm', 'nm', 'pm', 'Å',
|
||
's', 'ms', 'µs', 'ns', 'ps', 'min', 'h', 'hr', 'day',
|
||
'A', 'mA', 'µA', 'nA', 'pA',
|
||
'K', 'mK', 'µK', 'nK',
|
||
'cd', 'lm', 'lx',
|
||
|
||
# SI derived units
|
||
'Hz', 'kHz', 'MHz', 'GHz', 'THz',
|
||
'N', 'kN', 'MN', 'µN', 'nN', 'pN',
|
||
'Pa', 'kPa', 'MPa', 'GPa', 'hPa', 'mbar',
|
||
'J', 'kJ', 'MJ', 'µJ', 'nJ', 'pJ', 'mJ',
|
||
'W', 'kW', 'MW', 'GW', 'mW', 'µW', 'nW', 'pW',
|
||
'C', 'mC', 'µC', 'nC', 'pC',
|
||
'V', 'kV', 'MV', 'mV', 'µV', 'nV',
|
||
'F', 'mF', 'µF', 'nF', 'pF',
|
||
'Ω', 'kΩ', 'MΩ', 'GΩ', 'mΩ', 'µΩ',
|
||
'S', 'mS', 'µS', 'nS',
|
||
'Wb', 'mWb', 'µWb', 'nWb',
|
||
'T', 'mT', 'µT', 'nT', 'pT',
|
||
'H', 'mH', 'µH', 'nH', 'pH',
|
||
|
||
# Common non-SI units
|
||
'L', 'mL', 'µL', 'nL', 'pL', 'dL', 'cL',
|
||
'°C', '°F', '°K', 'celsius', 'fahrenheit', 'kelvin',
|
||
'eV', 'keV', 'MeV', 'GeV', 'TeV', 'meV', 'µeV',
|
||
'cal', 'kcal', 'Cal',
|
||
'Bq', 'kBq', 'MBq', 'GBq', 'mBq',
|
||
'Gy', 'mGy', 'µGy', 'kGy',
|
||
'Sv', 'mSv', 'µSv', 'kSv',
|
||
|
||
# Angular units
|
||
'rad', 'mrad', 'µrad', 'sr',
|
||
'deg', 'arcmin', 'arcsec',
|
||
|
||
# Time units
|
||
'ms', 'µs', 'ns', 'ps', 'fs', 'as',
|
||
'year', 'yr', 'month', 'week', 'day', 'hr', 'min',
|
||
|
||
# Concentration and biological units
|
||
'IU', 'U', 'unit', 'units', 'Da', 'kDa', 'MDa',
|
||
'bp', 'kbp', 'Mbp', 'kb', 'Mb', 'Gb',
|
||
'rpm', 'rps', 'Hz', 'cps',
|
||
|
||
# Physics constants (when used as units)
|
||
'c', 'h', 'ħ', 'kB', 'NA', 'R', 'σ', 'ε₀', 'μ₀',
|
||
}
|