Sobre el proyecto
El crate `math-to-speech` es una biblioteca de Rust diseñada para convertir expresiones matemáticas de LaTeX en texto inglés hablado natural. A diferencia de los sistemas de texto a voz de propósito general que leen los glifos renderizados literalmente (a menudo ignorando la semántica matemática), esta herramienta analiza la estructura subyacente de la fórmula para generar frases como las diría un humano en voz alta. Por ejemplo, `x^2` se convierte en "x al cuadrado", `\frac{\pi}{2}` se convierte en "pi sobre 2" y `\sqrt{2}` se convierte en "la raíz cuadrada de 2".
### Características clave
* **Análisis semántico**: Utiliza `mitex-parser` para analizar el AST de LaTeX, lo que garantiza que la salida refleje el significado matemático en lugar de solo secuencias de caracteres.
* **Manejo de paréntesis contextual**: Distingue entre la aplicación de funciones y el agrupamiento. `x(t)` se pronuncia como "x de t", mientras que `[a, b]` se pronuncia como "a, b". También diferencia la notación de tiempo continuo (`x(t)`) de la notación de índice discreto (`x[n]` → "x en el índice n").
* **Manejo estricto de errores**: Devuelve un `Err` para comandos no reconocidos o construcciones no admitidas en lugar de adivinar. Esto permite que los llamadores implementen estrategias de respaldo (por ejemplo, leer LaTeX sin procesar o usar un marcador de posición) sin arriesgarse a una mala interpretación del significado de la fórmula.
* **Subconjunto LaTeX coherente**: Apunta al mismo subconjunto LaTeX que el crate `math-render`, lo que permite que los documentos se representen visualmente y se expresen audiblemente a partir de la misma fuente sin divergencia en la sintaxis admitida.
### Construcciones admitidas
La versión actual admite:
* Fracciones (`\frac`)
* Raíces cuadradas (`\sqrt`)
* Subíndices y superíndices (incluidos casos especiales como `^2` → "al cuadrado", `^3` → "al cubo")
* Sumas, productos e integrales (como frases de prefijo)
* Letras griegas y símbolos/relaciones comunes (por ejemplo, `\alpha \leq \beta` → "alfa menor o igual a beta")
* Funciones nombradas (`\sin`, `\cos`, `\log`, etc.) cuando se usan con argumentos entre paréntesis
* Entornos de texto y mathrm (`\text{...}`, `\mathrm{...}`)
### Limitaciones
El proyecto está en una etapa temprana. Actualmente no admite:
* Matrices
* Ecuaciones alineadas o de varias líneas
* Casos y definiciones por partes
* Llamadas a funciones desnudas sin paréntesis (por ejemplo, `\sin x` se pronuncia como "sine x" en lugar de "sine de x")
### Uso
```rust
use math_to_speech::speak;
fn main() {
match speak(r"\frac{\pi}{2}") {
Ok(phrase) => println!("{}", phrase), // Salida: pi sobre 2
Err(e) => eprintln!("Error: {}", e),
}
}
```
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.