You may check Therion's system variables easy - write into Command line options field in Compiler window “- -print-environment” and press Compile.

The result should look as:

therion 0.3.7
configuration file: perlovy.thconfig
reading ... done

The INIT path is a place where Therion looks for therion.ini and xtherion.ini. Example is from MacOS X.

  • You may open several files. To choose one to edit you may click on list item in top-right corner of window. There are several other very helpful buttons, check them.
  • You can change the font used in the editor and compiler log window. For example, a smaller font lets you read error messages without scrolling. Try adding the following line to Xtherion.ini
    set xth(gui,efont)  {courier -12}

List of all possible default symbols

To create a graphical list of all default map symbols for your current version of Therion,
EITHER open a command prompt window, navigate to a folder that is in Therions path, and type

Therion --print-symbols

OR enter –print-symbols in the compiler window options text box in XTherion, then click the Compile button.

This will produce a file 'symbols.xtml' in the current folder. See the Chapter 'Running Therion' in The Therion Book.

Creating and editing objects in "Map Editor" window (F2)

  • The name of edited .th2 file and name of active scrap you may find in top border of window.
  • Always check the “object setup area” on right side and “status line” on bottom of it. You may find there any necessary information with help to create object with correct parameters and in correct place.
  • If you press the “Escape” key you leave the “Insert Mode” and switch to “Select mode”. The “Select mode” works in two steps - select - after first click you may check the parameters of object in “Status line” or “File commands” or “object setup area” and - move - after second click you may move with object.
  • If you add line object, you may start to insert new line simple by pressing of Ctrl+L keys, you don't need to escape from “Inserting mode” first.
  • Always check the small yellow tick on first point of line object. It shows the FREE space side of line. It means you should draw walls in counterclockwise direction, the blocks in clockwise direction, pit or chimney in counterclockwise direction, etc. If you made a mistake there is “reverse” option in “Line commands” section.

Checking and erasing empty objects in .th2 files

It is quite easy to accidentally create empty objects while using XTherions Map Editor, in .th2 files. They look generally like this;

line floor-step


area border


In the case of wall lines, they may cause complications generating 3D Loch files.
Use one of these regular expressions (regexp, grep) to search for such empty objects and replace them with empty strings:

^\s*(\w+) (\w+)(\-|)(\w+)\s+end\1


^\s*(\w+) \w+(-?)\w*\s+end\1   

(If you copy and paste these strings, make sure you trim any leading or trailing spaces, else they will not work as intended - the internal spaces are required though)

You can use XTherions Map Editor 'search and select' to find empty objects using these regular expressions, one file at a time, or use your favourite Text Editor to open a whole project worth of files, and remove them all in one find and replace step. If you do it this way, make sure you are using Version Control so that you can review changes made and back out of any unintended changes!

Changing the subtype of line

A wall does not need to be divided into small parts according to subtype. You can use one line of type wall and assign the appropriate subtypes to line points from beginning of line (where the small yellow tick is). The subtype bedrock will return the line wall back to default (solid rock) type.

The symbol may have an attribute subtype. The subtype is very common for line symbol wall. You may use these subtype for the wall: invisible, bedrock (default), sand, clay, pebbles, debris, blocks, ice, underlying, unsurveyed, presumed.

You change the subtype of the point in on the wall in the small black window in Line point control part of control panel. Simple write there subtype xxxx (no dash). This changes the subtype of the wall from that point on, until the end of the line or the subtype of another point is changed.

Imagine you have part of the wall pressumed - there is a wide crawling and you are not able to recognize one of the walls. At first point of missing wall you assign subtype presumed and at the end of missing wall you assign to the point of wall line the subtype bedrock.

You may assign only one subtype for one line point.

Scrap Drawing Tips

Pitch Drawing Tips

Surface Drawing Tips

Using map connections

Using elevations

Drawing Order How to draw symbols over or under an area

For example, allowing sand or rocks under or above the water surface or within sump.

You can draw symbols above or below an area, or even one area above another, but controlling visibility of the underlying symbols requires some care and understanding of how Therion works. There are also built-in limitations to the visibility of symbols that underlie symbols that have a background fill as part of their definition, they are only visible when 'transparency' is set to 'on'. If you view the pdf output with Adobe Acrobat or Reader, even the transparent outputs are displayed opaque (a bug in those applications?). And when you have a better pdf viewer and transparency is on, perhaps a little frustratingly, everything is transparent.

Firstly, as you draw in XTherion;

  • the entity you draw will be placed above the previously selected entity (both in the finished output and within the th2 text file),
  • each entity is drawn above the previously drawn entity,
  • entities that appear first within a scrap are drawn on top of all other entities ie last ones drawn are at the start of the scrap

(that's the same thing said three different ways I think)

Secondly, it's easier to have only one area, and place points or lines above or below it. You can deal with multiple areas in one place, but as alluded to above, it gets confusing to sort out what is visible and by how much.

Thirdly, when resorting to moving area entities up and down in the th2 file with a text editor, always move the border defining the area with the area (helps if you draw a border specifically for each area or collection of areas, this way the defining border will usually appear directly below the area definition in the th2 file if you have drawn in the sequence; border then area.

Fourthly, the first point is a generalised simplification. Therion has three default 'layers' (NOT the layers that appear in the pdf files - these are different) that it places entities on (the drawing order still controls positions within each layer as described in the first point above).
As described in the Therion Book, How the map is put together, the layers are 'default-bottom', 'default' and 'default-top'. 'Default', as you might guess is in the middle. Areas go to the bottom, ceiling-step and chimney go to the top, everything else is somewhere in the middle.

Now if you find that you have not drawn an entity in exactly the right order to get that special effect you were after, there is an over-ride. There are two more 'layers', 'top', and 'bottom' and these are placed by Therion above 'default-top' and below 'default-bottom' respectively. To put an entity in either of these layers, add the option -place top or -place bottom. If using -place for an area it is probably a good idea to use -place for its defining border as well.

Fifthly, transparency and opacity settings come into it, as well as the particular viewer or printer driver you are using, as indicated in the first paragraph above. Everything will be opaque unless you have in your layout

transparency on
opacity 50 #or some other appropriate value 0-100

And just to complicate things a little more, this forum thread explains why defining special transparent colours with custom metapost code will not affect the transparency of elements within the same scrap (5.3.10)

It contains images produced with 'transparency on', but viewed with Adobe, Evince and Foxit Readers. Only the Foxit Reader (Nov 2012) renders the symbols as per the instructions given to Therion (both wrt transparency and symbol pattern fills).

If all else fails you may need to put offending symbols or areas on another scrap and place it under or over the scrap you are working on. I sometimes define scraps without walls, most symbols will then need -clip off (Don't use break if your new scrap has no walls defined v5.3.3)

Avoiding Invisible or Misshapen Scraps in Loch and Google Earth

Over time the pdf outputs have become resilient to many drawing misdemeanour's, and so you can break many of the rules described in the Therion Book, and still get a pretty good (or even perfect) output. But the Loch model and Google Earth map outputs are not yet so versatile (June 2011 version 5.3.8), and often result in missing or miss-drawn pieces of cave passage.
Here are the usual culprits.

Misdemeanour Symptom
* line wall with incorrect 'reverse' status (yellow tick should point inside passage void) Invisible passage. Loch walls appear and vanish as you rotate the model
* line wall with interior passage that does not have '-outline in' option set. Interior of loop is rendered and passage is invisible
* An open passage end has one or more wall ends that curls back into the interior of the passage. Invisible passage
* A scrap has open space along it's length. ie openings left for side passages directly opposite each other break the scrap in half. Only one of the parts of the scrap are rendered
* Scrap is wider than it is long, or has long walls with '-subtype invisible', or
very complicated scraps
These are not necessarily misdemeanours, but I think it might cause the passage to be invisible.
* Passage wall has a loop in it, either because the bezier curve handles have been extended too far, or because the subsequent morphing when scraps join has encouraged a loop to formprobably invisible passage (not verified) Metapost gives a 'scrap outline intersects itself' warning
* Therion cannot handle two consecutive wall:invisible lines joining each other (5.3.9 Nov 2011) Try making the two invisible lines into one long invisible line or make one of them -visibility off insteadPassages have gaps and strange artefacts emanating from them
* A line with -outline out is connected to a line with -outline in Passages have gaps and strange artefacts emanating from them
* Instead of abutting end to end, a pair of line wall overlap each other, the first segment of one line with the last segment of another Loch model contains large spurious artefacts


Beware of survey stations being undefined where they are at the exact same location as another defined station. Can lead to “invalid scrap outline” errors where everything else looks good. Generally won't affect most outputs but Loch complains about these errors and can lead to very long compile times.
It means in one scrap. So first of all check such misplaced stations by this workflow:

- Create new .th2 file,
- insert backgroud sketch,
- create a new scrap,
- add stations,
- add to thconfig file source file.th2,
- export map with -layout-debug on option, or debug on switch in layout section, (see how_do_i_use_debug_mode_in_layout)
- check in exported PDF if there are not strange misplaced stations,
- continue with drawing of scrap itself,
- use debug on frequently to check quality of a drawing .

Moving lines and scraps within drawing area

If you want to rearrange objects in drawing area, you sometimes need to move whole line or entire scrap. To do this, follow these steps:

  1. Select coordinates that define the start of the movement vector. Click ‘shift from’ in ‘Objects’ tool to populate the 'shift from' coordinates boxes. (The easiest way to select coordinates is to right-click a blank space in the drawing area. More precise, but tedious ways, are to create or select an existing point object (or line point), or type coordinates directly into the 'shift from' coordinate boxes).
  2. Select coordinates that define the end (destination) of the movement vector. Click ‘shift to’. (The comments above regarding selecting coordinates apply).
  3. If you did that in the wrong order, click ‘Swap’ to swap the vector coordinates. ‘Swap‘ and ‘Shift object’ works as undo too.
  4. Select the object (point or line or entire scrap) that you want to move. Click ‘Shift object’. (A scrap object needs to be selected using the 'select next scrap' button, or using the Objects tool).
  5. Repeat step 4 until you have moved all the objects that you wish to move.

Joining scraps together

One of Therion's key features is that drawings are created in small pieces - scraps. A scrap is the smallest indivisible part of the drawing that can exported to create an output.
Most maps contain many scraps, and if they don't happen to appear perfectly joined by coincidence, then you should “join” these individual scraps to get Therion to morph them together. There are three ways to do it; fully automatically in *.th2 file, semi-automatically scrap by scrap, and manually line by line (if you must specify exactly which lines and points join). The last two are described in Thbook;

Join commands are put directly into the survey section, not inside any scrap or map definitions - lines are joined independently, ignoring whatever scraps and maps they are defined or included in.

Fully automatic in *.th2 file

If you draw two or more scraps adjacent to each other in your drawing *.th2 file, and make sure the adjacent line wall ends snap to each other, then Therion will automatically morph them, if necessary, to create a perfect join. A morph might be necessary, if for example survey closure or other drawing distortions might tend to separate the scraps you have drawn as touching.

Semi-automatic scrap by scrap

  join scrap1 scrap2 [-count <number of passage (not line) joins for Therion to look for>]

Note that this works using passages defined by lines of “wall” type (even if their “-outline” is set to “none”). It does not join other types of line. It normally expects to find pairs of lines, one on each side of the passage. If there are multiple passages that need to be joined between pairs of scraps, you can normally use the “-count” option to say how many possible passage joins Therion should search for.

Manual line by line

From time to time the semi-automatic way does not work, or you want more refined control. Then you should join each line to the other line (usually, but not only walls) or to a point. Every point on a line has a mark according its sequence from beginning of line (yellow tick). The first one has mark 0, next one 1, etc., last one is mark “end”. So the join command will be:

definition of line1 definition of line2

  join line1:1 line2:end
      or in the other case it could be;
  join line1:0 line2:31
      or if the scraps are within another survey;
  join line1@MiddleEarth:0 line2@MiddleEarth:31

It is quite tedious to determine what the number of line point mark 31 is. There is another way - add to the point an easy to remember mark, such as “john”, “jane”, …

mark point 2 of line1 to john mark point end of line2 to jane

  join line1:john line2:jane
      or if the scraps are within another survey;
  join line1@MiddleEarth:john line2@MiddleEarth:jane

Map with joined lines:

map with joined lines

You may use join command to join line to line or line to point. So if the beginning of a particular passage is between two blocks you may join walls of passage to points of rock-borders. After the morphing the beginning of passage will be still connected to blocks.

The lines (just like maps, scraps, points and stations) are referenced by their ID directly inside their survey - inside a subsurvey, this would be as id@subsurvey (or id@subsurvey.subsurvey for nested subsurveys) - so make sure you have assigned an ID to each line that needs to be joined using the join command.

If you want to join three or more lines and or points, do all the coincident joins in a single command, eg

  join line1:john line2:jane line3:jack line4:jill

For more detail see Therion by Examples, chapter 3 and how_do_i_join_three_scraps_in_a_y-shape

How to export correct extended elevation from zig-zag centerline

Very common problem, when drawing extended elevation of steepy and large passage where centerline is from practical reasons zig-zag and automatic generation of centerline will increase real length of passage.

In Survex and in Therion there could be label no survey in data structure definition command.


  data normal from to compass length clino
  18    18.2  285     7.81  +33.8
  data nosurvey from to
  18.2 18.5
  extend ignore 18.4 18.5
  data normal from to compass length clino
  extend ignore
  18.2  18.3  15     13.72  +23.1 
  18.3  18.4  280    14.27  +23.4
  18.4  18.5  188    11.29  +19.8
  extend left
  18.5  18.6  271    10.16  +28.4
  18    18.1  127    10.20  -26.3 
  18.4  18.8  257    14.45  +32.5
  18.6  18.7  248    15.17  +31.1
  18.6  18.9  261    30.84  +45.3

Command data nosurvey from to means there will be created fake survey shot from station 18.2 to 18.5, but this survey shot will play in extended elevation generation.
To prevent interaction with survey shots from station 18.2 to 18.3, 18.3 to 18.4 and 18.4 to 18.5 there is another command extend ignore what mean those shots will be not included in extended elevation generation.

Final result should be as on images:
map extended
See also Extended Elevations page for comprehensive extended elevation guidance.

How to make map outputs match ISO paper size proportions

from Chris Hayes

ISO paper sizes have an edge length ratio, H:W, of √2:1, or vise versa. However when exporting maps to pdf, Therion makes the pdf exactly match the bounds of the cave, plus any images or legend elements that we might include with the layout. This does not typically match an ISO paper size, or the proportions thereof.

If we want our exported map output to scale nicely to print to a standard paper size (e.g. A4, A3, A1) then we need to cunningly include a map-header and or a map-image element to nudge the size of the pdf 'paper'.

  • Compile a map with map-header 0 100 nw and map-header 100 0 se to get the dimensions, H and W of the pdf, then modify the map-header specification and compile again.
  • For portrait outputs; add / remove delta H = 50*[√(2)*W/H -1] to the y positions
  • For landscape outputs; add / remove delta W = 50*[√(2)*H/W -1] to the x positions
# Example for a portrait output, with modified y positions
map-header 0 109.79986718266315 nw               #place map header in top left corner
map-image 100 -9.79986718266315 se Club_Logo.png #place an image such as club logo in bottom right corner

The output will probably not match an ISO paper size that you have in your printer, but it will be of the correct proportion to be scaled to fit thatISO paper size.

Map-image and custom legendbox

If you customise your legendbox in the tex-map section of your configuration file layout and use


then map-image will not work. To work around this simply rename it as shown below


Multilingual Legend / Legend Formatting

Produce a multilingual legend on your map and format it to display correctly.

use text substitution to achieve this in thconfig file.

text en "area sand"      "sand<br>darat"
text en "area water"     "water<br>danum"
export map …''

This works great except the formatting of the legend is borked. As you will see the text is vertically aligned with the middle of the text against the top of the legend box by default.

To correct this the you need to modify \legendsymbolbox by adding it to the tex section of your thconfig

\advance\legendsymbolht by -\ht\tmpboxb
\advance\legendsymbolht by -\ht\tmpboxb   ##  Add these rows ##
\advance\legendsymbolht by -20pt          ##  Add these rows ##
\advance\legendsymbolht by -1dd
  \advance\tmpdimen by 10pt 
  \divide\tmpdimen by\legendcolumns 
  \advance\tmpdimen by-10pt
\hbox to \tmpdimen{%
     \advance\tmpdimen by -\legendsymbolwd
     \advance\tmpdimen by -10pt
     \hsize=\tmpdimen\rightskip=0pt plus \tmpdimen minus 0pt\relax\the\legendtextsize #2\vskip1dd}\hss}%

The code above taken from thTMPDIR\data.tex was modified as shown to produce the desired effect. You might need to tweak this to your needs.

Changing \legendsymbolbox will also affect your altitude legend if you are using color map-fg altitude. To correct this you need this code:

#\setbox\xxx=\hbox to 36bp{\PL{q #1 #2 #3 rg 0 0 36 24 re f Q}\hfil}%
\setbox\xxx=\hbox to 125bp{\PL{q #1 #2 #3 rg 0 0 360 224 re f Q}\hfil}%

you can see from the comments the parts you need to change to get your desired result

Hiding particular symbols from legend

Sometimes you might want to hide just one particular symbol from the legend.
This is as simple as setting the legend text for the symbol to an empty string, “”
This is done within the thconfig file. eg

text en "line border:visible" ""
text en "line border:temporary" ""
text en "line border:presumed" ""

With this example, none of these borders will appear in the legend, even if these lines are used in the drawing.

Small spreadsheet to help create Atlas page layouts © Bruce Mutton 2008. On entering 7 input variables, (paper size, margins, navigator etc) you can copy and paste the required 12 variables into your Therion layout in a single operation.

Atlas Layout Parameter Calculator

Small spreadsheet as an example of one way to find out and record rgb parameters required to create colours in Therion © Bruce Mutton 2008.


A useful resource found (for Therion users) by Martin Sluka…

Color Brewer choose colour schemes to represent sequential, diverging or qualitative data. Copy and paste the edfinition into your Therion layout.

Qualitative or diverging might be good for differentiating related caves in the same map (can users of Therion control this? - don't think we can yet). Any of the schemes might be good for differentiating particular sets of symbols like water from floor sediments to archaeological, organic, rigging or route finding features.

  symbol-colo[u]r <point/line/area/group/special> <symbol-type> <colour>
  # see Therion Book section on layout, pg 51 for 5.3.11

More information here

Take care that the final colour will strictly depend on setup (calibration) of your screen, system, application and printer or data projector!!!

There is map to data converter program on Compass software page

Comment from Graham Mullan:
That program is part of Larry Fish's “Compass” suite. It is perfectly safe to use. The one thing to remember is that its output is a Compass data file which means that whatever you think you did when using it, it will automatically convert all lengths to decimal feet. This is not an issue just as long as you remember it. I've used it a number of times, but only on small caves or mines, so I've had little problem editing the output into a therion or survex file by hand - and remembering to add the line “tape units feet” to it.
It looks, last version is able to work in meters too:
Setup of Map2Dat

MapToDat Converter

It runs only on Windows, but under Wine without problems too.

Sometimes you might have a Therion map that has been drawn based on image of a cave sketch that was scanned at say 300 dpi. If you need to reduce that image size later on to say 100 dpi you rescale the image to be 3 times smaller. But now your Therion map does not match with the background image anymore! You need to divide nearly all the pixel values in the th2 map by 3 times - but not all values. I do this with a little Python program e.g. ./ oldmap.th2 3.0 > newmap.th2. It probably only works for some th2 files as it only tests for a few cases. Use with care. zipped

   symbol-hide point wall-altitude
  • tips.txt
  • Last modified: 8 days ago
  • by brucemutton