{"id":13539414,"url":"https://github.com/crowdagger/crowbook","last_synced_at":"2025-04-14T05:15:46.948Z","repository":{"id":4180259,"uuid":"51974422","full_name":"crowdagger/crowbook","owner":"crowdagger","description":"Converts books written in Markdown to HTML, LaTeX/PDF and EPUB","archived":false,"fork":false,"pushed_at":"2024-11-18T20:47:53.000Z","size":14574,"stargazers_count":753,"open_issues_count":25,"forks_count":38,"subscribers_count":18,"default_branch":"main","last_synced_at":"2025-04-14T05:14:55.463Z","etag":null,"topics":["book","epub","html","latex","markdown","pdf","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/crowdagger.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"Roadmap.md","authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"lise_henry"}},"created_at":"2016-02-18T03:02:59.000Z","updated_at":"2025-03-19T19:05:21.000Z","dependencies_parsed_at":"2024-03-18T20:24:04.189Z","dependency_job_id":"8d5edab5-f1e4-4379-a255-8e6e58746ec5","html_url":"https://github.com/crowdagger/crowbook","commit_stats":{"total_commits":1755,"total_committers":21,"mean_commits":83.57142857142857,"dds":0.05242165242165242,"last_synced_commit":"83ab6d56820a31f54da25603cfb70dad9363e852"},"previous_names":["crowdagger/crowbook","lise-henry/crowbook"],"tags_count":35,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crowdagger%2Fcrowbook","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crowdagger%2Fcrowbook/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crowdagger%2Fcrowbook/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crowdagger%2Fcrowbook/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/crowdagger","download_url":"https://codeload.github.com/crowdagger/crowbook/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248824693,"owners_count":21167345,"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":["book","epub","html","latex","markdown","pdf","rust"],"created_at":"2024-08-01T09:01:25.399Z","updated_at":"2025-04-14T05:15:46.532Z","avatar_url":"https://github.com/crowdagger.png","language":"Rust","readme":"# Crowbook\n\nCrowbook's aim is to allow you to write a book in Markdown without worrying about formatting or typography, and let the program generate HTML, PDF and EPUB output for you.\nIts focus is novels and fiction, and the default settings should (hopefully) generate readable books with correct typography without requiring you to worry about it.\n\n## Example\n\nTo see what Crowbook's output looks like, you can read the Crowbook guide rendered in\n[HTML](http://crowdagger.github.io/crowbook/book/book.html),\n[PDF](http://crowdagger.github.io/crowbook/book/book.pdf)\nor\n[EPUB](http://crowdagger.github.io/crowbook/book/book.epub).\n\n## Installing\n\nThere are two ways to install Crowbook:\neither using precompiled binaries, or compiling it using `cargo`.\n\n### Binaries\n\nSee\n[the releases page](https://github.com/crowdagger/crowbook/releases)\nto download a precompiled binary for your architecture.\nJust extract the archive and run `crowbook`\n(or `crowbook.exe` on Windows).\nYou might also want to copy the binary somewhere in your `PATH` for later usage.\n\n\n### Using Cargo\n\n[Cargo](https://crates.io/)\nis\nthe package manager for\n[Rust](https://www.rust-lang.org/).\nYou can\n[install it here](https://www.rust-lang.org/downloads.html).\nOnce that is done:\n\n```bash\n$ cargo install crowbook\n```\n\nwill automatically download the latest `crowbook` release on\n[crates.io](https://crates.io/crates/crowbook),\ncompile it, and install it on your system.\n\n\u003e Some dependencies also require building C libraries;\n\u003e you might thus also need to install a C compiler and `make`/`cmake` build tools.\n\n## Dependencies\n\nWhile there should be, strictly speaking, no real dependencies to be able to run Crowbook (it is published as a statically compiled binary), \nPDF rendering requires a working installation of LaTeX (preferably `xelatex`).\n\n## Quick tour\n\nThe simplest command is:\n\n```bash\n$ crowbook \u003cBOOK\u003e\n```\n\nwhere `BOOK` is a configuration file.\nCrowbook will parse this file and generate HTML, EPUB, and/or PDF output formats, according to the settings in the configuration file.\n\nTo create a new book, assuming you have a list of Markdown files, you can generate a template configuration file with the `--create` argument:\n\n```bash\n$ crowbook my.book --create chapter_*.md\n```\n\nThis will generate a default `my.book` file, which you'll need to complete.\nThis configuration file contains some metadata, options, and lists the Markdown files.\n\nFor short books containing only a single Markdown file, it is possible to embed some metadata at the beginning of the file and use the `--single` or `-s` option to run `crowbook` directly on this Markdown file and avoid creating a separate book configuration file:\n\n```bash\n$ crowbook -s text.md\n```\n\nFor more information, see the chapters on\n[the arguments supported by `crowbook`](guide/01_arguments.md)\nand on\n[the configuration file](guide/02_config.md).\n\n## Current features\n\n### Output formats\n\nCrowbook supports HTML, PDF and EPUB (either version 2 or 3) as output formats.\nSee the Crowbook User Guide  rendered in\n[HTML](http://crowdagger.github.io/crowbook/book/book.html),\n[EPUB](http://crowdagger.github.io/crowbook/book/book.epub)\nand\n[PDF](http://crowdagger.github.io/crowbook/book.pdf).\n\n### Input format\n\nCrowbook uses\n[pulldown-cmark](https://crates.io/crates/pulldown-cmark)\nand thus should support most of\n[CommonMark Markdown](http://commonmark.org/).\nInline HTML, however, is not implemented, and probably won't be, as the goal is to have books that can also be generated in PDF (and maybe ODT).\n\n### Typographic \"cleaning\"\n\nMaybe the most specific \"feature\" of Crowbook is that it does its best to \"clean\" the input text before rendering it.\nBy default, it removes superfluous spaces and tries to use curly quotes.\nIf the  book's language is set to french, it also tries to respect french typography by replacing spaces with non-breaking ones when it is appropriate (e.g. before '?', '!', ';' or ':').\n\n\u003e Please\n\u003e [open an issue](https://github.com/crowdagger/crowbook/issues/new)\n\u003e describing typographic rules if you want them to be implemented for other languages.\n\n### Links handling\n\nCrowbook tries to correctly translate local links in the input Markdown files:\ne.g. if you have a link to a Markdown file that is part of your book, it will be transformed into a link inside the document.\n\n### Inline YAML blocks\n\nCrowbook supports inline YAML blocks:\n\n```yaml\n---\nauthor: Me\ntitle: My title\n---\n```\n\nThis is mostly useful when Crowbook is run with the `--single` argument (receiving a single Markdown file instead of a book configuration file), for short texts that only contain one \"chapter\".\n\n### Customization\n\nWhile the default settings will hopefully generate something that should look \"good enough\", it is possible to customize the output, essentially by providing different\n[templates](guide/04_templates.md).\n\n### Bugs\n\nSee the\n[issue tracker on GitHub](https://github.com/crowdagger/crowbook/issues).\n\n## Contributors\n\n\u003c!-- readme: contributors -start --\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/crowdagger\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/1961791?v=4\" width=\"100;\" alt=\"crowdagger\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eLizzie Crowdagger\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/stefan0xC\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/509385?v=4\" width=\"100;\" alt=\"stefan0xC\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eStefan Melmuk\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/hirschenberger\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/1053180?v=4\" width=\"100;\" alt=\"hirschenberger\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eFalco Hirschenberger\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/d0whc3r\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/1378986?v=4\" width=\"100;\" alt=\"d0whc3r\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eD0wHc3r\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/jrappen\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/8577450?v=4\" width=\"100;\" alt=\"jrappen\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eJohannes Rappen\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/dkotrada\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/698296?v=4\" width=\"100;\" alt=\"dkotrada\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eAlfa\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/hfiguiere\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/114441?v=4\" width=\"100;\" alt=\"hfiguiere\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eHubert Figuière\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/ar1ocker\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/109543340?v=4\" width=\"100;\" alt=\"ar1ocker\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eAr1oc\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/twirrim\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/59949?v=4\" width=\"100;\" alt=\"twirrim\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eTwirrim\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/sigurdsvela\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/5571884?v=4\" width=\"100;\" alt=\"sigurdsvela\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eSigurd Svela\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/mgeisler\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/89623?v=4\" width=\"100;\" alt=\"mgeisler\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eMartin Geisler\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/kianmeng\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/134518?v=4\" width=\"100;\" alt=\"kianmeng\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eKian-Meng Ang\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/cuviper\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/36186?v=4\" width=\"100;\" alt=\"cuviper\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eJosh Stone\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/Geobert\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/72570?v=4\" width=\"100;\" alt=\"Geobert\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eGeobert Quach\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/steffahn\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/3986214?v=4\" width=\"100;\" alt=\"steffahn\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eFrank Steffahn\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/Dylan-DPC\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/99973273?v=4\" width=\"100;\" alt=\"Dylan-DPC\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eDylan DPC\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/dvalter\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/38795282?v=4\" width=\"100;\" alt=\"dvalter\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eDmitry Valter\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\u003c!-- readme: contributors -end --\u003e\n\n## Acknowledgements\n\nBesides the\n[Rust](https://www.rust-lang.org/)\ncompiler and standard library, Crowbook uses the following libraries:\n[pulldown-cmark](https://crates.io/crates/pulldown-cmark),\n[yaml-rust](https://crates.io/crates/yaml-rust),\n[mustache](https://crates.io/crates/mustache),\n[clap](https://github.com/kbknapp/clap-rs),\n[chrono](https://crates.io/crates/chrono),\n[uuid](https://crates.io/crates/uuid),\n[mime_guess](https://crates.io/crates/mime_guess),\n[crossbeam](https://crates.io/crates/crossbeam),\n[walkdir](https://crates.io/crates/walkdir),\n[rustc-serialize](https://crates.io/crates/rustc-serialize),\n[caribon](https://crates.io/crates/caribon),\n[hyper](https://crates.io/crates/hyper),\n[url](https://crates.io/crates/url),\n[lazy_static](https://crates.io/crates/lazy_static),\n[regex](https://crates.io/crates/regex),\n[term](https://crates.io/crates/term),\n[numerals](https://crates.io/crates/numerals),\n[syntect](https://crates.io/crates/syntect).\n\nIt can also embed\n[Highlight.js](https://highlightjs.org/)\nin HTML output to enable syntax highlighting for code blocks.\n\nIt also uses configuration files from\n[rust-everywhere](https://github.com/japaric/rust-everywhere)\nto use\n[Travis](https://travis-ci.org/)\nand\n[Appveyor](http://www.appveyor.com/)\nto generate binaries for various platforms on each release.\n\nWhile Crowbook directly doesn't use them, there was also inspiration from\n[Pandoc](http://pandoc.org/)\nand\n[mdBook](https://github.com/azerupi/mdBook).\n\nAlso, the\n[W3C HTML validator](https://validator.w3.org/)\nand the\n[IDPF EPUB validator](http://validator.idpf.org/)\nproved to be very useful during development and testing.\n\n## ChangeLog\n\nSee [ChangeLog](ChangeLog.md).\n\n## Contributing\n\nSee [how you can contribute to Crowbook](guide/08_contributing.md).\n\nIf you find this project useful, you can also support its author by\n[making a Paypal donation](https://www.paypal.me/crowdagger).\n\n## Library\n\nWhile the main purpose of Crowbook is to be run as a standalone program, the code is written as a library, so if you want to build on it you can use it as such.\nYou can look at the generated documentation on\n[docs.rs](https://docs.rs/releases/search?query=crowbook).\n\nNote that, in order to facilitate code reuse, some features have been split to separate libraries:\n\n* [epub-builder](https://github.com/crowdagger/epub-builder)\n  makes it easier to generate EPUB files.\n* [crowbook-text-processing](https://github.com/crowdagger/crowbook-text-processing/)\n  contains all the \"typographic\" functions (smart quotes, handling of non-breaking spaces in french, ...).\n\n## License\n\nCrowbook is free software:\nyou can redistribute it and/or modify it under the terms of the GNU Lesser General Public License (LGPL), version 2.1 or (at your option) any later version.\nSee\n[LICENSE](LICENSE.md)\nfor more information.\n\nCrowbook's logo is licensed under the\n[Creative Commons Attribution 4.0 International license](https://creativecommons.org/licenses/by/4.0/deed.en),\nbased on the\n[Rust logo](https://commons.wikimedia.org/wiki/File:Rust_programming_language_black_logo.svg)\nby Mozilla Corporation.\n\nCrowbook includes binary (minified) CSS and Javascript files from\n[Highlight.js](https://highlightjs.org/),\nwritten by Ivan Sagalaev, see\n[license](https://raw.githubusercontent.com/crowdagger/crowbook/master/templates/highlight/LICENSE)\n","funding_links":["https://github.com/sponsors/lise_henry","https://www.paypal.me/crowdagger"],"categories":["Rust","网站生成与排版"],"sub_categories":["电子书"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrowdagger%2Fcrowbook","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrowdagger%2Fcrowbook","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrowdagger%2Fcrowbook/lists"}