puToTex function

String puToTex(
  1. String input
)

Converts the argument of \pu (a physical quantity) to TeX: 123 kJ/mol → 123\,\mathrm{kJ}/\mathrm{mol}, 1.2e3 m/s → 1.2\cdot 10^{3}\,\mathrm{m}/\mathrm{s}.

Implementation

String puToTex(String input) {
  final m = RegExp(
    r'^\s*([-+−]?\d+(?:[.,]\d+)?(?:\(\d+\))?)(?:\s*(?:[eE]|\*\s*10\^|×\s*10\^)\s*([-+−]?\d+))?',
  ).firstMatch(input);
  if (m == null) return _units(input.trim());
  final b = StringBuffer(m[1]!.replaceAll(',', '{,}'));
  if (m[2] != null) b.write('\\cdot 10^{${m[2]}}');
  final rest = input.substring(m.end).trim();
  if (rest.isNotEmpty) b.write('\\,${_units(rest)}');
  return b.toString();
}