# InkSlides

`inkslides` generates a PDF presentation out of an inkscape SVG
document. The order of slides and visibility of content is determined
by the layer structure of the SVG. 

## Installation

Clone the repository somewhere and type

```
> python setup.py install
```

## Requirements

This program has the following requirements:

  * Linux (currently)
  * inkscape
  * Python >= 2.7
  * python-lxml (or python2-lxml)
  * Any one of: PyPDF2, ghostscript (comes with TeXLive), pdfunite

## Usage

### SVG layer structure

`inkslides` decides, what to include in the presentation, by looking at the 
layer structure of the SVG file. A layer is included if it is a sublayer of 
any other layer. When it contains another level of layers, i.e., sublayers 
of sublayers, these are included one by one while their siblings are still 
visible. For example, consider this layer structure:

```
Polar bears
  Why polar bears are cool
    Argument 3
    Argument 2
    Argument 1
  Weaknesses of polar bears
Title
  Welcome
```

This would result in a PDF with the following slides, where each line contains 
the visible layers on one page.

```
Title,Welcome
Polar bears,Weaknesses of polar bears
Polar bears,Why polar bears are cool,Argument 1
Polar bears,Why polar bears are cool,Argument 1,Argument 2
Polar bears,Why polar bears are cool,Argument 1,Argument 2,Argument 3
```

As you can see, the layers in the third level of the layer tree are treated as 
frames, where the previous slides stay visible. If there are no sublayers of 
sublayers, we end up with a simple slide without any frames.

### Text directives

#### import layers 

To reuse common layers you can, in any layer (except `root`), import 
other layers by defining a text element whose first line starts with `#import#`. 
The subsequent lines should contain the name of layers to be imported. For 
example:

```
#import#
Argument 3
Weaknesses of polar bears
```

would make the two layers `Argument 3` and `Weaknesses of polar bears` visible,
regardless of where in the presentation we are right now. 

If any of the layers in an `#import#` block is prefixed with a `-` (minus) sign, 
it won't be imported but rather _deleted_ from the current layer list. This is 
particularly useful for the `#master'` block (see below).

#### master layers

`inkslides` searches for a text element starting with `#master#`. The syntax is 
similar to the `#import#` structure. All layers you list in the master block are 
visible on every single slide of your presentation. You may disable them by an 
`#import#` directive with one of the master layers prefixed with a `-`. Note, 
that the master block can appear _anywhere_ in your SVG file. 

If multiple `#master#` blocks are found globally, or multiple `#import#` blocks 
are present in one layer, the first one is chosen and the others are ignored. 

### compile the presentation

```
> inkslides example.svg
```

If you pass the parameter `-t, --temp`, then no temporary files are
kept by `inkslides`. This slows down the compilation but may help during 
development or debugging.

In addition, you can give the `-w, --watch` parameter. If it is 
present, the program keeps running and watches the input SVG file for 
changes. If changes are detected, the presentation is automatically recompiled.

Try not to embed images but link them to reduce file sizes.

To compress the output PDF files, you may use ghostcript. For example:

```
> gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dDownsampleColorImages=true -dColorImageResolution=150 -dCompatibilityLevel=1.4 -sOutputFile=$output $input

```

## Acknowledgements

The idea and many concepts of this script are taken from 
[inkscapeslide](https://github.com/abourget/inkscapeslide).

## Modified

  * Johannes Graeter: added slide enumeration
  * Johannes Graeter: added structuring by layers