help-gnu-emacs
[Top][All Lists]

Emacs figure-HOWTO: from Linux VT to LaTeX (with no fuss), including scr

 From: Emanuel Berg Subject: Emacs figure-HOWTO: from Linux VT to LaTeX (with no fuss), including screenshots, and more Date: Mon, 30 Mar 2015 00:50:40 +0200 User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.4 (gnu/linux)

                          0.

This tutorial describes how to get image figures from
the ASCII drawings (and sometimes Unicode ditto) that
you produce with industrial ease in Emacs.

The reasoning is: Emacs already looks good. You have
made sure of it. So when you want to export the
figure, or import it somewhere else, why not make it
look exactly as it already is? Ironically, Emacs has
thus become a nice WYSIWYG editor :)

If you have drawn a bunch of such figures, you will
have encountered the problem how to get them into for
example a LaTeX generated PDF or an HTML web page.
There are many ways of including them *as text*, but
that always comes with surprises and side-effects,
which (for once) actually *are* undesirable! ;)

If you have had this problem several times... - wait,
you mean to say you *never* had this problem?
What's wrong with you?! Anyway, here is how to do it
from an Emacs instance that runs in a Linux VT.

All data, and pictures, as well as this document, can
be found at

http://user.it.uu.se/~embe8573/figure

Now let's begin...

1.

Draw the figure. Here is an example figure with ASCII
as well as Unicode chars. (As a parenthesis, to turn
ASCII figures into Unicode, use ascii-art-to-unicode
which is in ELPA.)

critical      best-effort
┌───────────┬───────────┐
│ ↑ group 1 │           │
CPU time │ ·         │           │
interference │ ·         │   BE SW   │
│ ·         │           │
│ ↓ group n │           │
└───────────┴───────────┘
←·················
DRAM interference

Put the figure in the top left corner so it will be
easy to determine the crop parameter values later on.

Note: Throughout this tutorial, check out the current
stage of transformation by inspecting the images
linked between curly brackets - like this, for the
above figure:

{ http://user.it.uu.se/~embe8573/figure/isolation.txt }

2.

Make a screenshot of the current VT with fbgrab(1).
Here is an Elisp wrapper. Enter "isolation" as the
name - the PNG extension (.png) is appended by
default, and for good reason: that's exactly what
it is.

(defun dump (file)
(interactive "s Description: ")
(message nil)
(shell-command (format "fbgrab ~/%s.png" file)))

{ http://user.it.uu.se/~embe8573/figure/isolation.png }

3.

Now compute the width and height in pixels. The size
of a single char is often specified in pixels, like
this - "widthxheight" - e.g.

FONTSIZE="12x24"

to be found in the file

/etc/default/console-setup

If not, find out some other way.

Second, count the number of chars that the figure
covers in x and y, or width and height. This can be
done by moving point to the outskirts of the figure,
mode line.

Now compute the width and height of your figure in
pixels by multiplying the number of chars required
with the dimensions of a single char:

pixel width  = 40 chars * 12 pixels/char = 480 pixels
pixel height = 10 lines * 24 pixels/line = 240 pixels

To crop the picture, in the shell, do:

mogrify -crop 480x240+0+0 -negate -monochrome isolation.png

Or, to create a new file, so to keep the old:

convert [same settings as above] isolation.png isolation-figure.png

'-negate' inverts the colors, then '-monochrome' turns
everything into a black and white image - suitable to
be included in PDF documents and the like. The order
of the operations are important!

{ http://user.it.uu.se/~embe8573/figure/isolation-figure.png }

5.

We're done! Put isolation-figure.png in the right
place. Now we have the figure to be included in HTML
web pages, LaTeX PDFs, and so on. To conclude, as an
example, in LaTeX, it can be included like this:

\index{isolation \emph{fig.}} % optional stuff
\vspace{\baselineskip}
\begin{center}
\includegraphics[width=1.0\textwidth]{figures/isolation-figure.png}
\textbf{Isolate us! Resource sharing interference.}
\end{center}

{ http://user.it.uu.se/~embe8573/figure/isolation.pdf }

--
underground experts united
http://user.it.uu.se/~embe8573