# SwiftMath Missing Features - Implementation Status This document lists LaTeX features that are **not yet implemented** in SwiftMath, based on comprehensive testing against the LaTeX Mathematics reference. ## Summary - **Total Features Tested**: 12 - **Fully Implemented**: 7 (58%) - **Partially Implemented**: 0 (0%) - **Not Implemented**: 5 (42%) --- ## HIGH PRIORITY Features (Not Implemented) ### 1. ✅ `\displaystyle` and `\textstyle` - **IMPLEMENTED** **Status**: ✅ Working **Description**: Commands to force display or text style rendering within expressions **Test Results**: All tests passed - `\displaystyle \sum_{i=1}^{n} x_i` - ✅ Works - `\textstyle \int_{0}^{\infty} f(x) dx` - ✅ Works - Inline displaystyle fractions - ✅ Works --- ### 2. ❌ `\middle` - Delimiter in Middle of Expression **Status**: ❌ Not Implemented **Error**: `Invalid command \middle` **Description**: Used with `\left` and `\right` to add delimiters in the middle of expressions **Examples**: ```latex \left( \frac{a}{b} \middle| \frac{c}{d} \right) \left\{ x \middle\| y \right\} ``` **Use Case**: Set notation, conditional expressions, piecewise functions with multiple sections --- ### 3. ✅ `\substack` - Multi-line Limits and Subscripts - **IMPLEMENTED** **Status**: ✅ Working **Description**: Creates multi-line subscripts and limits for operators **Test Results**: All tests passed - `\substack{a \\ b}` - ✅ Works - `\sum_{\substack{0 \le i \le m \\ 0 < j < n}} P(i,j)` - ✅ Works (nested in subscript) - `\prod_{\substack{p \text{ prime} \\ p < 100}} p` - ✅ Works (nested in subscript) - `\substack{\frac{a}{b} \\ c}` - ✅ Works (with nested commands) **Use Case**: Complex summation/product limits, constrained expressions **Implementation**: Uses `buildInternal(true)` pattern, handles implicit tables created by `\\` within braces. --- ### 4. ❌ Manual Delimiter Sizing: `\big`, `\Big`, `\bigg`, `\Bigg` **Status**: ❌ Not Implemented **Error**: `Invalid command \big` **Description**: Manually control delimiter sizes (4 levels beyond normal) **Examples**: ```latex \big( x \big) % slightly larger \Big[ y \Big] % larger \bigg\{ z \bigg\} % even larger \Bigg| w \Bigg| % largest ``` **Use Case**: Fine control over delimiter appearance, nested expressions --- ### 5. ❌ Spacing Commands: `\,`, `\:`, `\;`, `\!` **Status**: ❌ Partially Not Implemented **Error**: `Invalid command \:` (and likely others) **Description**: Fine-tuned horizontal spacing control | Command | Description | Width | |---------|-------------|-------| | `\,` | Thin space | 3/18 em | | `\:` | Medium space | 4/18 em | | `\;` | Thick space | 5/18 em | | `\!` | Negative thin space | -3/18 em | **Examples**: ```latex a\,b % thin space \int\!\!\!\int f(x,y) dx dy % tight double integral x \, y \: z \; w % mixed spacing ``` **Use Case**: Fine typography control, integral notation, custom spacing --- ## MEDIUM PRIORITY Features ### 6. ✅ Multiple Integral Symbols: `\iint`, `\iiint`, `\iiiint` - **IMPLEMENTED** **Status**: ✅ Working **Description**: Special symbols for double, triple, and quadruple integrals **Test Results**: All tests passed - `\iint f(x,y) dx dy` - ✅ Works (double integral) - `\iiint f(x,y,z) dx dy dz` - ✅ Works (triple integral) - `\iiiint f(w,x,y,z) dw dx dy dz` - ✅ Works (quadruple integral) - `\iint_{D} f(x,y) dA` - ✅ Works (with subscript limits) **Use Case**: Multivariable calculus, surface and volume integrals **Implementation**: Added U+2A0C (quadruple integral) Unicode character to operator definitions. --- ### 7. ✅ `\cfrac` - Continued Fractions - **IMPLEMENTED** **Status**: ✅ Working **Description**: Optimized layout for continued fractions **Test Results**: All tests passed - Simple `\cfrac{1}{2}` - ✅ Works - Nested continued fractions - ✅ Works --- ### 7b. ✅ `\dfrac` and `\tfrac` - Display/Text Style Fractions - **IMPLEMENTED** **Status**: ✅ Working **Description**: Fractions with forced display or text style **Test Results**: All tests passed - `\dfrac{1}{2}` - ✅ Works (display-style fraction) - `\tfrac{a}{b}` - ✅ Works (text-style fraction) - `y'=-\dfrac{2}{x^{3}}` - ✅ Works (complex expression) - Nested `\dfrac` and `\tfrac` - ✅ Works **Use Case**: - `\dfrac` forces display style (larger, more readable fractions) - `\tfrac` forces text style (smaller, inline fractions) - Useful when you want consistent fraction appearance regardless of context **Implementation**: Prepends style atoms to numerator and denominator to force rendering style. --- ### 8. ❌ `\boldsymbol` - Bold Greek Letters **Status**: ❌ Not Implemented **Error**: `Invalid command \boldsymbol` **Description**: Creates bold Greek letters (whereas `\mathbf` doesn't work for Greek) **Examples**: ```latex \boldsymbol{\alpha} % bold alpha \boldsymbol{\beta} % bold beta \boldsymbol{\Gamma} % bold Gamma \mathbf{x} + \boldsymbol{\mu} % mix Roman and Greek bold ``` **Use Case**: Vectors with Greek symbols, bold emphasis for Greek letters --- ### 9. ✅ Starred Matrix Environments: `pmatrix*`, `bmatrix*`, etc. - **IMPLEMENTED** **Status**: ✅ Working **Description**: Matrix environments with optional column alignment **Test Results**: All tests passed - `\begin{pmatrix*}[r] 1 & 2 \\ 3 & 4 \end{pmatrix*}` - ✅ Works (right align) - `\begin{bmatrix*}[l] a & b \\ c & d \end{bmatrix*}` - ✅ Works (left align) - `\begin{vmatrix*}[c] x & y \\ z & w \end{vmatrix*}` - ✅ Works (center align) - `\begin{matrix*}[r] 10 & 20 \\ 30 & 40 \end{matrix*}` - ✅ Works (no delimiters) **Alignment Options**: `[r]` = right, `[l]` = left, `[c]` = center **Use Case**: Financial tables, aligned numerical data in matrices **Implementation**: Added `readOptionalAlignment()` function, modified `readString()` to accept asterisks, applies alignment to all columns. --- ### 10. ✅ `\smallmatrix` Environment - **IMPLEMENTED** **Status**: ✅ Working **Description**: Compact matrix for inline use (smaller than regular matrices) **Test Results**: All tests passed - `\left( \begin{smallmatrix} a & b \\ c & d \end{smallmatrix} \right)` - ✅ Works (with delimiters) - `A = \left( \begin{smallmatrix} 1 & 0 \\ 0 & 1 \end{smallmatrix} \right)` - ✅ Works (identity matrix) - `\begin{smallmatrix} x \\ y \end{smallmatrix}` - ✅ Works (column vector) **Use Case**: Inline matrices, transformation matrices in text, compact notation **Implementation**: Uses `.script` style for smaller font size, tighter column spacing (6 vs 18), no built-in delimiters. --- ## Implementation Priority Recommendations ### Remaining High Priority Features 1. **Spacing commands** (`\,`, `\:`, `\;`, `\!`) - Used in almost all advanced math 2. **Manual delimiter sizing** (`\big`, etc.) - Common in published mathematics 3. **`\middle`** - Useful for conditional notation ### Remaining Medium Priority Features 4. **`\boldsymbol`** - Important for vector notation with Greek letters --- ## Testing Coverage All tests use the `MTMathListBuilder.build(fromString:error:)` API and automatically skip with `XCTSkip` when features are not implemented. **Test File**: `Tests/SwiftMathTests/MTMathListBuilderTests.swift` **Test Functions**: - `testDisplayStyle()` - ✅ Passed (IMPLEMENTED) - `testMiddleDelimiter()` - ⏭️ Skipped (not implemented) - `testSubstack()` - ✅ Passed (IMPLEMENTED) - `testManualDelimiterSizing()` - ⏭️ Skipped (not implemented) - `testSpacingCommands()` - ⏭️ Skipped (not implemented) - `testMultipleIntegrals()` - ✅ Passed (IMPLEMENTED) - `testContinuedFractions()` - ✅ Passed (IMPLEMENTED) - `testBoldsymbol()` - ⏭️ Skipped (not implemented) - `testStarredMatrices()` - ✅ Passed (IMPLEMENTED) - `testSmallMatrix()` - ✅ Passed (IMPLEMENTED) --- ## Notes for Future Implementation ### For `\middle`: - Needs integration with existing `\left...\right` delimiter pairing system - Should support all delimiter types that work with `\left` and `\right` ### For Manual Sizing (`\big`, etc.): - Needs 4 size levels beyond normal - Each size approximately 1.2x the previous - Should work with all delimiter types ### For Spacing Commands: - Need to insert proper `MTMathSpace` atoms - Different space types: positive (`\,`, `\:`, `\;`) and negative (`\!`) - Some might already be partially implemented ### For `\boldsymbol`: - Needs access to bold math font variants - Should work with both Greek and other symbols - Different from `\mathbf` (which changes font family) --- *Generated: 2025-10-01* *SwiftMath Version: Based on iosMath v0.9.5* *Last Updated: 2025-10-01 - Implemented 4 major features: \substack, \smallmatrix, starred matrices, \iiiint*