Project

texas

0.0
No commit activity in last 3 years
No release in over 3 years
A tool for creating LaTex files from ERb templates and processing them into PDF format.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

 Project Readme

Texas

Build Status Code Climate Gem Version

Description

Texas provides an easy way to create PDFs from LaTeX documents using ERB templates.

It does this by compiling *.tex.erb templates to *.tex files and then running pdflatex to turn the compiled templates into a PDF file.

Installation

Install Texas at the command prompt if you haven’t yet:

$ gem install texas

Usage

New project

At the command prompt, create a new Texas project:

$ texas --new test_project

where “myapp” is the application name.

Change directory to myapp and run texas:

$ cd test_project
$ texas

Run with --help or -h for options.

Project structure

In the above sample a folder named test_project is created. It contains the basic texas skeleton with a sample template:

test_project/
  bin/
  contents/
    contents.tex.erb
  lib/
    helpers/
      document_helper.rb
    init.rb
  .texasrc

Let's see what we got here:

  • bin/ All the compiled PDFs will be placed in this folder
  • contents/ All templates go here.
  • lib/ Custom ruby code can be placed here. init.rb will be loaded automatically.
  • .texasrc This is the configuration file for your Texas project.

Texas will compile the contents/contents.tex.erb template by default, but you can specify any other template via the command line.

For example, if your contents/ directory looks like this:

contents/
  chapter-1.tex.erb
  chapter-2.tex.erb
  chapter-3.tex.erb
  contents.tex.erb

you can compile the chapter-1 template separately by running

$ texas contents/chapter-1

After compiling, Texas will copy the resulting PDF to the bin folder and open it. The PDF file is named according to the compiled template, i.e. contents.pdf by default, chapter-1.pdf in above example.

ERB Templates

Templates are stored in the contents folder. They are plain ERB templates and used to generate TeX output.

Open contents/contents.tex.erb and see the very first line:

This is a sample <%= b "TeX" %> document.

This ERB will result in

This is a sample \textbf{TeX} document.

Rendering other templates

You can divide your TeX project into as many templates as you like and render any other template through the render method.

<%= render :template => "some_template" %>

Or by shorthand:

<%= render :some_template %>

This will look for a template with the basename some_template and any of the supported extensions:

some_template.tex
some_template.tex.erb
some_template.md
some_template.md.erb

The render method looks in the template's path and a path with the basename of the current template.

The following example illustrates this:

Given this directory structure

contents/
  goals/
    primary.tex.erb
    secondary.tex.erb
  goals.tex.erb
  contents.tex.erb

this would be a valid project:

# contents.tex.erb

<%= render :goals %>

# goals.tex.erb

<%= render :primary %>
<%= render :secondary %>

The goals template is found, because it lives in the same directory as the template rendering it. The primary and secondary templates are found, because they live in a directory called like the template placing the render-call ("goals").

If you want to render multiple templates, you can provide them via the :templates option:

# contents.tex.erb

<%= render :templates => ["goals/primary", "goals/secondary"] %>

Or you can provide a glob:

# contents.tex.erb

<%= render :glob => "goals/*" %>

Both of the above examples result in the same rendered contents.tex as the original example.

Configuration

Basics

Every Texas project has its own .texasrc, a YAML configuration file.

The sample .texasrc that comes with every new project is a good starting point to unterstand the concept:

# Texas config file
# =================

document:
  author: "Your Name"
  title: "Document Title"

# The document hash is intended to store information relevant to your
# templates:
#
# You can add anything you want here, like
#
# status: Draft
# 
# and then access it in your templates via
#
#   <%= document.status %>
#

# You can execute commands before and after the PDF is compiled,
# and alter the commands executed by Texas to compile and open the
# generated PDF:
#
# script:
#   before: "# this run before anything else"
#   compile: 'pdflatex -halt-on-error "<%= File.basename(build.master_file) %>"'
#   after: "# this is run after the pdf compilation"
#   open: 'evince "<%= build.dest_file %>"'
#

Document

The default document: section looks like this:

document:
  author: "Your Name"
  title: "Document Title"

It is intended to store information relevant to your document, i.e. to your templates.

document:
  author: "John Doe"
  title: "Some descriptive title"
  created_at: "2013-01-01"
  status: "First Draft"

You can access these values in your templates via the document object:

<%= document.author %> -- <%= document.title %> (<%= document.status %>)

This would compile to:

John Doe -- Some descriptive title (First Draft)

Running scripts

In the script: section (commented by default) you can add shell commands that are run by Texas:

  • before: This command will run before everything else.
  • compile: Texas will run this command in the build_path to compile the PDF.
  • after: This command will run after the PDF is compiled.
  • open: Texas will run this command to open the generated PDF.

The commented examples in the .texasrc shown above are the default commands that are run.

As you can see from the defaults, the use of ERB tags is supported.

Advanced usage

Using --watch

You can conveniently let Texas watch your project's contents and have it rebuild the PDF after changes are made.

Start Texas with the --watch switch:

$ texas --watch

Now, when you edit any template, Texas will recompile your PDF and you can reload it in your PDF viewer (some, like Evince, reload the PDF automatically).

Merge configuration

Suppose you have the following configuration in your texasrc:

document:
  author: "John Doe"
  title: "Some descriptive title"
  show_secrets: false
draft:
  document:
    show_secrets: true

If you run Texas with the --merge-config or -m switch you can specify a root-level key that will be merged with the general config:

$ texas -m draft

The resulting configuration after the merge would be:

document:
  author: "John Doe"
  title: "Some descriptive title"
  show_secrets: true

You can implement conditions in your templates that rely on values from the configuration:

<% if document.show_secrets %>
  [ some info for your eyes only ]
<% end %>

This way, you can easily compile your document in "draft mode" via the -m command line switch.

Another example would be to use the -m switch to "publish" a final version of your PDF. Take the following example:

document:
  # [... snip ...]
final:
  script:
    after: 'mv <%= build.dest_file %> <%= build.root %>/bin/final.pdf'
    open: 'evince "<%= build.root %>/bin/final.pdf"'

Now, if we run texas -m final, the generated PDF file will be renamed final.pdf (and that file will be opened). This way, final.pdf would always be the last version of your document compiled using texas -m final.

Using custom helpers

In lib/document_helper.rb you can define your own helper methods.

Example:

module DocumentHelper
  def current_date
    Time.now.strftime("%a, %Y-%m-%d")
  end
end

Texas::Template.register_helper DocumentHelper

Now you can use that method in your templates:

Created: <%= current_date %>

To generate

Created: Tue, 2013-04-16

Extending Texas for a project

Since lib/init.rb is required by texas before the build process begins, you can extend its modules and classes in any way that Ruby permits.

License

Released under the MIT License. See the LICENSE file for further details.