formatUtils.js (1489B)
1 import { getHCF, simplifyFraction } from './mathsUtils' 2 3 export function formatVec(arr) { 4 return `\\bigl(\\begin{smallmatrix}${arr.join('\\\\')}\\end{smallmatrix}\\bigr)` 5 } 6 7 export function formatCoefficient(value, { absoluteString=null, showPlus=false, showOne=true, showZero=true, suffix='' } = { }) { 8 if (!showZero && value == 0) return ''; 9 absoluteString ??= Math.abs(value); 10 const plus = showPlus ? '+' : ''; 11 const sign = value < 0 ? '-' : plus; 12 showOne || value == 1 && (absoluteString = ''); 13 return sign + absoluteString + (suffix ?? ''); 14 } 15 16 export function formatFraction(num, denom, { simplify=false, showPlus=false, showOne=true, showZero=true, suffix='' } = { }) { 17 simplify && ([num, denom] = simplifyFraction(num, denom)); 18 const absoluteString = denom == 1 ? null : `\\frac{${Math.abs(num)}}{${denom}}`; 19 return formatCoefficient(num / denom, { absoluteString: absoluteString, showPlus: showPlus, showOne: showOne, showZero: showZero, suffix: suffix }); 20 } 21 22 export function formatLine(line) { 23 if (line.b == 0) return `x = ${formatFraction(-line.c, line.a, { showPlus: false, showOne: true, showZero: true, simplify: true })}`; 24 let mxTerm = formatFraction(-line.a, line.b, { showPlus: false, showOne: false, showZero: false, simplify: true, suffix: 'x' }) 25 const cTerm = formatFraction(-line.c, line.b, { showPlus: false, showOne: true, showZero: false, simplify: true }) 26 if (!mxTerm && !cTerm) { 27 mxTerm = '0' 28 } 29 return 'y = ' + mxTerm + cTerm 30 }