Linux Setup Notes

name and address
created oct 23, 2009; updated oct 30, 2009

Inkscape problems, annoyances and tricks

Since the demise of Skencil, which was arguably the best drawing program available for Linux, Inkscape has become the default. On the plus side, I have never had Inkscape crash. On the minus side, Inkscape is typical of Linux drawing programs in its inability to save drawings in standard formats, such as Adobe Illustrator (.ai). This is a particular problem for Inkscape because, being a Python program, Inkscape is liable to stop working at any time. That's because Python is constantly changing, often making existing software inoperative. That is what happened to Skencil.

Alternative vector illustration packages

There is also a new program called Xara, which was originally a Windows program but has now been ported to Linux. Xara has some nice features lacking in Inkscape, but as of October 2009 it's not yet stable enough to use. In Windows, the two biggest programs are CorelDraw and Adobe Illustrator.

A replacement for skencil called sk1 as of version 0.9.1pre compiles cleanly but doesn't run , giving the message: Cannot find Python binding for LittleCMS!.

Inkscape Bugs

  1. Can't set arrow head to same color of line or curve.
    Solution: Click on the curve to select it, then select the following from the menus. Effects - modify path - adjust markers to match stroke
    Arrow head not matching arrow in Inkscape

    It will say
    Inkscape has received additional data from the script executed. The script did not return an error, but this may indicate the results will not be as expected.
    Followed by one of these two messages:
    /usr/share/inkscape/extensions/markers_strokepaint.py:31: FutureWarning: The behavior of this method will change in future versions. Use specific 'len(elem)' or 'elem is not None' test instead.
    or
    The fantastic lxml wrapper for libxml2 is required by inkex.py and therefore this extension. Please download and install the latest version from <http://cheeseshop.python.org/pypi/lxml/>, or install it through your package manager by a command like: sudo apt-get install python-lxml
    The first message means it worked. A big annoyance is that you have to do this every time you create a line with an arrowhead.
    The second message means it didn't work. Give them credit for trying to tell us what the problem is and how to fix it. Unfortunately, the message is wrong, as the computer already had python-lxml installed.
  2. Funny-looking arrowheads. The arrowhead cannot be resized independently of the arrow body, so lines with arrows generally look bad (see image at right; no solution yet).
  3. Can't draw lines or text when Inkscape is maximized. If the Inkscape window is maximized, as soon as you add any text labels, it becomes impossible to change the width of a line, or to add arrow heads to a line. The arrow menus are grayed out and the width selector has no effect.
    Solution: Don't do that. Yes, I know this is not helpful.
  4. The ability to draw lines suddenly stops working at random times. The arrowhead menus are grayed out, and changing the width no longer works. This is identical to what happens if the window is maximized.
    Solution: The only solution is to quit and re-start the program.
  5. Can't export drawings in a format readable by other programs. Exporting a drawing from Inkscape to Adobe Illustrator is problematic. If the user saves a drawing in .svg format, all Bezier curves and lines in the drawing are missing when it's imported into AI. As for exporting in .ai format, occasionally it works, but usually Inkscape creates an invalid file that cannot be read by AI or any other program, including Inkscape itself. Sometimes, Inkscape displays the following error:
    GPL Ghostscript 8.62: Unrecoverable error, exit code 1 
    In this situation, the user at least is informed that there might be a problem and their work might not have been properly saved. Usually, however, there is no warning.

    Solution: The Inkscape developers have decided to drop .ai compatibility, suggesting that users use PDF instead. Unfortunately, PDF is not a viable option. When the drawing is exported as a PDF and imported into AI, text labels are difficult to edit because each character is a separate object. Similarly, curves and arrowheads are separate objects and need to be re-drawn if you change the curve. If you will need to access your drawings in the future, or share them with other users, the only solution is to create them in Adobe Illustrator.

    Xara is unable to either read or write .ai, .sk, or .svg files, preferring its own apparently undocumented .xar format.

Inkscape annoyances

  1. It is very difficult to compile, so there is no chance of the end-user being able to fix bugs. If you run into a problem, you're stuck, because the odds of a pre-compiled Linux program running on any given system are very small. This seems to be a particular problem with Python programs.
  2. Text labels have two different colors (outline and fill), so it's a pain to create colored text.
  3. There are no global default colors, so each object has to be colored individually. Sometimes the previous color, line thickness, etc. are retained until changed, and sometimes not. Text and graphic elements such as lines all use the same settings, so if you want different settings for them, you have to write the settings down and tediously re-enter them each time.
  4. No tear-off menus.
  5. Doesn't save a drawing in current directory.
  6. Inkscape can't read .ai files created by skencil. Therefore, if you have a lot of .sk files, the best upgrade path is to Illustrator instead of Inkscape, because Adobe Illustrator can read Skencil's .ai files. Inkscape can read Skencil's .svg files, but embedded images are lost.

Inkscape tricks

  1. Greek letters To make greek letters, type Ctrl-U followed by the Unicode hexadecimal code. For example:
    ^U 03B1 = alpha (α)
  2. Exporting a drawing Do not use "Export Bitmap" to get an image of the drawing. The result will be of very poor quality, with jagged edges caused by a lack of anti-aliasing. Use "Save as" and export as PostScript or PDF.

    Do not save it in EPS format, either: with EPS, the Bounding Box is often set incorrectly, making the file useless. Although it might print correctly, other software will read the incorrect Bounding Box and chop off part of the image.

    Save the image as a plain PostScript, making sure all the checkboxes in the dialogs are checked; otherwise, if your drawing contains text labels, they will be missing from the image.

    Then use ps2gif, ps2tiff, or ps2pdf to convert it to the desired format. It's usually necessary to create a custom converter because the default ones (at least in Suse) give very poor results.

    Here is the ps2gif that I use. It was adapted from the ps2gif that comes with Suse 11.0.
    #! /bin/sh
    # ps2gif: convert ps file to Gif
    #
    resolution=200
    quantcmd="cat"
    transcmd="-transparent #ffffff "
    antialiasing=""
    #
    usage() {
      echo "Usage:" 1>&2
      echo "  ps2gif [ -res RESOLUTION ] [ -notrans ] psfile.ps" 1>&2
      echo " " 1>&2
      exit 1
    }
    
    [ $# -lt 1 ] && usage
    
    while [ $# -gt 0 ]; do
      case $1 in
        -quant)
          quantcmd="ppmquant 50"
          ;;
        -notrans)
          transcmd=""
          ;;
        -antialiasing)
          antialiasing="-dTextAlphaBits=4 -dGraphicsAlphaBits=4"
          ;;
        -res)
          shift
          if [ $# -eq 0 ]; then
            echo "ps2gif: no resolution specified" 1>&2
            exit 1
          fi
          resolution=$1
          ;;
        -*)
          usage;;
        *)
          fig=$1
      esac
      shift
    done
    
    gif=`echo $fig | sed -e 's/\.[^\.]*$/.gif/'`
    
    antialiasing="-dTextAlphaBits=4 -dGraphicsAlphaBits=4"
    echo antialiasing=$antialiasing
    cat $fig \
    | gs -q -dNOPAUSE -r$resolution $antialiasing -sDEVICE=ppm -sOutputFile=- - \
    | pnmquant 256 \
    | pnmcrop | $quantcmd | ppmtogif -interlace $transcmd > $gif
    
    echo "Done"
    
    Here is the ps2tiff that I use. Ps2tiff is better because it doesn't quantize the image down to 256 colors.
    #!/bin/sh
    # ps2tiff  Convert PS to 24bit TIFF 
    resolution=400
    quantcmd="cat"
    transcmd="-transparent #ffffff "
    antialiasing="-dTextAlphaBits=4 -dGraphicsAlphaBits=4"
    
    GS_EXECUTABLE=gs
    gs="`dirname $0`/$GS_EXECUTABLE"
    if test ! -x "$gs"; then
    	gs="$GS_EXECUTABLE"
    fi
    GS_EXECUTABLE=gs
    
    OPTIONS=""
    while true
    do
    	case "$1" in
    	-?*) OPTIONS="$OPTIONS $1" ;;
    	*)  break ;;
    	esac
    	shift
    done
    
    if [ $# -eq 2 ] 
    then
        outfile=$2
    elif [ $# -eq 1 ]
    then
        outfile=`basename "$1" \.ps`.tif
    else
        echo "Usage: `basename $0` [-dASCII85EncodePages=false] [-dLanguageLevel=1|2|3] input.ps [output.tif]" 1>&2
        exit 1
    fi
    
    # Doing an initial 'save' helps keep fonts from being flushed between pages.
    # We have to include the options twice because -I only takes effect if it
    # appears before other options.
    exec "$GS_EXECUTABLE" $OPTIONS -q -dNOPAUSE -r$resolution $antialiasing -dBATCH -dSAFER -sDEVICE=tiff24nc "-sOutputFile=$outfile" $OPTIONS -c save pop -f "$1"
    

Back