Многоꙮтех

Build Status Gem Version License: MIT

Code Climate Test Coverage Inline docs Issue Count

Многоꙮтех (mnogootex) is a utility that parallelizes compilation of a LaTeX document using different classes and offers a meaningfully filtered output.

The motivating use case is maintaining a single preamble while submitting a paper to many journals using their outdated or crummy document classes.

Installation

The only requirement is Ruby (>=2.3).

To install многоꙮтех execute

gem install mnogootex

To install mnogoo (strongly recommended shell integration) add this to your shell profile

[ -s "$(mnogootex mnogoo)" ] && . "$(mnogootex mnogoo)"

Quick start

Set up your LaTeX project as usual - let's say its main file is ~/project/main.tex and contains \documentclass{...}.

Create a configuration file ~/project/.mnogootex.yml containing the list of document classes you want to compile your project against:

jobs:
  - scrartcl
  - article
  - book

Run mnogootex go ~/project/main.tex and enjoy the technicolor:

Demo TTY GIF

Usage

In essence, Многоꙮтех

  1. takes the source directory of a project,
  2. clones it into target directories (one for each job),
  3. applies a different source code transformation to each one and then
  4. attempts to compile them.

Its convenience lies in the fact that it

  • automates the setup process,
  • parallelizes compilation,
  • filters and colour codes the infamous waterfall logs and
  • allows you to easily navigate through targets/source folders.

Многоꙮтех can be invoked from commandline in two ways: mnogootex and mnogoo. The latter is more powerful and requires an extra installation step.

Commands listed below can be passed to both unless otherwise stated.

Commands

NOTATION: [FOO] means that FOO is optional while FOO ... means one or more FOOs.

help [COMMAND]

Prints the help for COMMAND (or all commands if none is given).

mnogoo

Prints the location of the mnogoo shell integration script. Useful only for its installation.

go [JOB ...] [MAIN]

Run given compilation JOBs for the MAIN document.

If no JOB list is given then all of them are run. They are deduced from the configuration.

If no MAIN document is given then it's deduced from either your current working directory or the configuration.

dir [JOB] [MAIN]

Print JOB's temporary directory for the MAIN document.

If no JOB is given then it prints the source directory.

If no MAIN document is given then it's deduced from either your current working directory or the configuration.

cd [JOB] [MAIN]

NOTE: recognized by mnogoo only.

Checks into JOB's temporary directory for the MAIN document.

If no JOB is given then it checks into the source directory.

If no MAIN document is given then it's deduced from either your current working directory or the configuration.

clobber

Deletes all temporary files. Useful to free up some space from time to time.

pdf [JOB ...] [MAIN]

Print JOB's output PDF path for the MAIN document.

If no JOB list is given then all their output PDFs paths are printed. They are deduced from the configuration.

If no MAIN document is given then it's deduced from either your current working directory or the configuration.

open [JOB ...] [MAIN]

NOTE: recognized by mnogoo only.

Open JOB's output PDF for the MAIN document with your default viewer.

If no JOB list is given then all their output PDFs are opened. They are deduced from the configuration.

If no MAIN document is given then it's deduced from either your current working directory or the configuration.

Configuration

Многоꙮтех is configured through YAML files named .mnogootex.yml put into your projects' root directory.

When loads a configuration it also looks up for .mnogootex.yml files in all parent directories to merge then together (from the shallowest to the deepest path). This means that e.g. you can keep a configuration file in your home folder and use it as a global configuration for all you projects, while overwriting only specific options in the configuration files of each one.

Многоꙮтех currently accepts only two options.

spinner

This option is a string whose characters are the frames used to animate the spinners for the command line interface.

# Default value:
spinner: ⣾⣽⣻⢿⡿⣟⣯⣷

commandline

This option is an array of the components for the commandline used to compile documents.

# Default value:
commandline:
  - latexmk
  - -pdf
  - --interaction=nonstopmode

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/paolobrasolin/mnogootex. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

License

The gem is available as open source under the terms of the MIT License.

Code of Conduct

Everyone interacting in the многоꙮтех project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.