The configuration file ====================== If you want to use Crowbook for your book, this configuration file is all you'll have to add (assuming you already have the book in Markdown files; if you don't, you'll also have to write a book first, but that's besides the scope of this document). The format is not very complicated. This is an example of it: ``` # metadata author: Joan Doe title: Some book lang: en output.html: some_book.html # list of chapters - preface.md + chapter_1.md + chapter_2.md + chapter_3.md + chapter_4.md - epilogue.md ``` Basically, it is divided in two parts: * a list of options, under the form `key: value`, following YAML syntax. * a list of Markdown files. Lines starting with the `#` characters are comments and are discarded. The list of files ----------------- There are various options to include a markdown file. * `+ file_name.md` includes a numbered chapter. * `- file_name.md` includes an unnumbered chapter. * `! file_name.md` includes a chapter whose title won't be displayed (except in the table of contents); this is useful for e.g. including a copyright at the beginning or the book, or for short stories where there is only one chapter. * `42. file_name.md` specifies the number for a chapter. So a typical usage might look like this: ``` ! copyright.md - preface.md # We want first chapter to be Chapter 0 because we are programmers! 0. chapter_0.md # Next chapters can be numbered automatically + chapter_1.md + chapter_2.md ... ``` There are two important things to note: 1. you must *not* use quotes around the file names. 2. the path of these files are relative to the directory where your config file is, *not* to the directory where you are when running `crowbook`. E.g. you can run `crowbook books/my_trilogy/first_book/config.book` without being in the book's directory. Also note that you don't have to specify a title. This is because the title of the chapter is inferred from the Markdown document. To go back to our previous example: ``` + chapter_1.md ``` does not specify a chapter title, because it will read it directly in `chapter_1.md`, e.g.: ```markdown The day I was born ================== ... ``` You should have one and only one level-one header (i.e. chapter title) in each markdown file. If you have more than one, Crowbook will print a warning and treat it as another chapter (numbered according to the scheme specified for including the file). It might however mess the table of contents in some cases (e.g. for Epub). If you do *not* have a level-1 header in a markdown file: * if it is a numbered chapter, Crowbook will infer a chapter name from the numbering scheme; * if it is not numbered, chapter's title will default to the empty string and won't be displayed in the TOC. Crowbook options ---------------- The first part of the configuration file is dedicated to pass options to Crowbook. This is [YAML syntax](https://en.wikipedia.org/wiki/YAML), so each line should be of the form `key: value`. Note that in most cases you don't have to put string in quotes, e.g.: ``` title: My title ``` It is however possible (and sometimes necessary to escape some characters) to use quotes around strings: ``` title: "My title!" ``` It is possible to use multiline strings with `>-` and then indenting the lines that are part of the string: ``` title: >- A long title author: Joan Doe ``` will set `title` to `"A long title"`. See [block literals in YAML](https://en.wikipedia.org/wiki/YAML#Block_literals) for more information on the various way to insert multiline strings (which mostly change the way newlines will or won't be inserted). Here is the complete list of options, with a short description. The usage of some of them is detailed later on. ### Metadata ### - **`author`** - **type**: string - **default value**: `Anonymous` - The author of the book - **`title`** - **type**: string - **default value**: `Untitled` - The title of the book - **`lang`** - **type**: string - **default value**: `en` - The language of the book - **`subject`** - **type**: string - **default value**: `not set` - Subject of the book (used for EPUB metadata) - **`description`** - **type**: string - **default value**: `not set` - Description of the book (used for EPUB metadata) - **`cover`** - **type**: path - **default value**: `not set` - File name of the cover of the book ### Output options ### - **`output.epub`** - **type**: path - **default value**: `not set` - Output file name for EPUB rendering - **`output.html`** - **type**: path - **default value**: `not set` - Output file name for HTML rendering - **`output.tex`** - **type**: path - **default value**: `not set` - Output file name for LaTeX rendering - **`output.pdf`** - **type**: path - **default value**: `not set` - Output file name for PDF rendering - **`output.odt`** - **type**: path - **default value**: `not set` - Output file name for ODT rendering ### Misc options ### - **`zip.command`** - **type**: string - **default value**: `zip` - Command to use to zip files (for EPUB/ODT) - **`numbering`** - **type**: integer - **default value**: `1` - The maximum heading levels to number (0: no numbering, 1: only chapters, ..., 6: all) - **`display_toc`** - **type**: boolean - **default value**: `false` - If true, display a table of content in the document - **`toc_name`** - **type**: string - **default value**: `Table of contents` - Name of the table of contents if toc is displayed in line - **`autoclean`** - **type**: boolean - **default value**: `true` - Toggles cleaning of input markdown (not used for LaTeX) - **`verbose`** - **type**: boolean - **default value**: `false` - If set to true, print warnings in Markdown processing - **`side_notes`** - **type**: boolean - **default value**: `false` - Display footnotes as side notes in HTML/Epub - **`temp_dir`** - **type**: path - **default value**: `` - Path where to create a temporary directory (default: uses result from Rust's std::env::temp_dir()) - **`numbering_template`** - **type**: string - **default value**: `"{{number}}. {{title}}"` - Format of numbered titles - **`nb_char`** - **type**: char - **default value**: `' '` - The non-breaking character to use for autoclean when lang is set to fr ### HTML options ### - **`html.template`** - **type**: path - **default value**: `not set` - Path of an HTML template - **`html.css`** - **type**: path - **default value**: `not set` - Path of a stylesheet to use with HTML rendering ### EPUB options ### - **`epub.version`** - **type**: integer - **default value**: `2` - The EPUB version to generate - **`epub.css`** - **type**: path - **default value**: `not set` - Path of a stylesheet to use with EPUB rendering - **`epub.template`** - **type**: path - **default value**: `not set` - Path of an epub template for chapter ### LaTeX options ### - **`tex.links_as_footnotes`** - **type**: boolean - **default value**: `true` - If set to true, will add foontotes to URL of links in LaTeX/PDF output - **`tex.command`** - **type**: string - **default value**: `pdflatex` - LaTeX flavour to use for generating PDF - **`tex.template`** - **type**: path - **default value**: `not set` - Path of a LaTeX template file Note that these options have a type, which in most case should be pretty straightforward (a boolean can be `true` or `false`, an integer must be composed a number, a string is, well, any string). The `path` type might puzzle you a bit, but it's equivalent a string, except Crowbook will consider it relatively to the book file. ### Output options ### These options specify which files to generate. You must at least set one of this option, or Crowbook won't do anything. Recall that all file paths are relative to the directory where the config file is, not to the one where you run `crowbook`. So if you set ``` output.epub = foo.epub ``` and runs ```bash $ crowbook some/dir/config.book ``` `foo.epub` will be generated in `some/dir`, not in your current directory. Crowbook will try to generate each of the `output.xxx` files that are specified. That means that you'll have to set at least one of those if you want a call to ``` $ crowbook my.book ``` to generate anything. (It's still possible to generate a specific format, and only this one, by using the `--to` argument on the command line). Note that some formats depend on some commands being installed on your system. Most notably, Crowbook depends on LaTeX (`pdflatex` by default, though you can specify the command to use with `tex.command`) to generate a PDF file, so PDF rendering won't work if it is not installed on your system. Crowbook also uses the `zip` command to generate the EPUB and ODT, files. ### Generic options for rendering ### #### numbering #### An integer that represents the maximum level of numbering for your book. E.g., `1` will only number chapters, while `2` will number chapters, sections, but not anything below that. `6` is the maximum level and turns numbering on for all headers. **default**: `1` #### numbering_template #### A string that will be used for chapter titles. You can use `{{number}}` and `{{title}}` in this string, e.g.: ``` numbering_template: "Chapter {{number}} {{title}}" ``` Note that: * in this case, quoting is necessary because `{` and `}` have special meaning in YAML; * this string won't be used for unnumbered chapters; * this string isn't currently used by LaTeX, either. #### autoclean #### This option cleans a bit the input markdown. With the default implementation, it only removes consecutive spaces, which has not real impact (they are ignored anyway both by HTML viewers and by LaTeX). However, if `lang` is set to `fr`, it also tries to add non-breaking spaces in front (or after) characters like '?', '!', ';' to respect french typography.