{"id":22071612,"url":"https://github.com/xymostech/xymostex","last_synced_at":"2025-03-15T15:07:11.690Z","repository":{"id":139303193,"uuid":"167308935","full_name":"xymostech/XymosTeX","owner":"xymostech","description":"A re-implementation of TeX in Rust to help me understand how it works and to eventually provide a debugging interface","archived":false,"fork":false,"pushed_at":"2024-09-12T02:55:21.000Z","size":596,"stargazers_count":104,"open_issues_count":0,"forks_count":3,"subscribers_count":15,"default_branch":"main","last_synced_at":"2025-02-28T00:13:41.862Z","etag":null,"topics":["parsing","rust","tex"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xymostech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-01-24T05:30:09.000Z","updated_at":"2024-12-21T20:18:30.000Z","dependencies_parsed_at":"2024-02-09T20:24:59.378Z","dependency_job_id":"1f281091-882f-43f8-8531-a73739802234","html_url":"https://github.com/xymostech/XymosTeX","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xymostech%2FXymosTeX","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xymostech%2FXymosTeX/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xymostech%2FXymosTeX/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xymostech%2FXymosTeX/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xymostech","download_url":"https://codeload.github.com/xymostech/XymosTeX/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243746200,"owners_count":20341203,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["parsing","rust","tex"],"created_at":"2024-11-30T20:32:57.475Z","updated_at":"2025-03-15T15:07:11.673Z","avatar_url":"https://github.com/xymostech.png","language":"Rust","readme":"# XymosTeX [![Build Status](https://travis-ci.com/xymostech/XymosTeX.svg?branch=master)](https://travis-ci.com/xymostech/XymosTeX) [![Coverage Status](https://coveralls.io/repos/github/xymostech/XymosTeX/badge.svg?branch=master)](https://coveralls.io/github/xymostech/XymosTeX?branch=master)\n\nThis project is an attempt to build an implementation of TeX in Rust. The overall goals of this project are:\n\n1. Be a complete TeX implementation (see [more info about the goals](goals.md) for a detailed discussion of what this means)\n2. Personally, to learn more intrinsically how TeX works by reading the TeXbook and trying things instead of by just reading the TeX source\n3. Allow for better debugging of TeX (especially w.r.t. macro expansion) to provide helpful information for other TeX-like projects like [KaTeX](https://github.com/KaTeX/KaTeX).\n\n## Status\n\nCurrently, XymosTeX has reached the point where is it Turing complete (that is, it implements things like macro expansion, conditionals, assignments), can interpret basic horizontal and vertical boxes, can interpret basic math experssions, and can generate a DVI file with the result.\n\nThe next body of work will be performing paragraph breaking and page breaking.\n\n## Trying it\n\nBecause XymosTeX is under development, the best way to try it is to clone the repo and build it from in there.\n\nXymosTeX produces [DVI files](https://en.wikipedia.org/wiki/Device_independent_file_format) as output, so something like dvipdf from another TeX system is needed to actually view the result.\n\n```\n$ git clone https://github.com/xymostech/XymosTeX.git\n$ cd XymosTeX\n$ cargo run\n\\def\\hello #1{Hello, #1!}\n\\hello{World}\n\\end\n$ dvipdf texput.dvi\n$ open texput.pdf\n```\n\n![Image of Hello World!](readme-images/hello-world.png)\n\nOne fun and impressive thing that XymosTeX can do is calculate primes for you:\n\n```\n$ cargo run --release \u003c examples/primes.tex\n$ dvipdf texput.dvi\n$ open texput.pdf\n```\n\n![Image of the first 10 primes](readme-images/primes.png)\n\nXymosTeX can also render some math expressions, with a little help defining the\nsymbols:\n\n```\n$ cargo run --release \u003c examples/basicmath.tex\n$ dvipdf texput.dvi\n$ open texput.pdf\n```\n\n![Image of the pythagorean theorem, a squared plus b squared equals c squared, and Euler's Identity, e raised to the power of i times pi plus 1 equals 0](readme-images/math.png)\n\n## Contributing\n\nI'm not currently taking feature contributions to XymosTeX since the goal is really for me to learn how TeX works for myself. However, since I am a Rust newbie, I am welcome to feedback about my Rust style and any suggestions about how to improve the code or repo structure.\n\n## License\n\nXymosTeX is licensed under the [MIT License](LICENSE)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxymostech%2Fxymostex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxymostech%2Fxymostex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxymostech%2Fxymostex/lists"}