ps-anc, for nice charts

[ The Latest | Version 8 | Handling PostScript files | The start of an FAQ! | Arabic/Hebrew support | about LifeLines ]

About ps-anc

This LifeLines report program produces ancestor or descendant charts with adjustable levels of individual detail. A chart can span multiple pages. Ancestor charts can include siblings and halfsiblings. The charts are rendered as PostScript files, suitable for printing on most laser printers; even old ones with level 1 PostScript language interpreters. There exist free PostScript viewers and PDF converters for Mac, Windows, and Unix platforms. Recent modifications include additional chart types: drop line (direct descendants only), combination (ancestors and descendants of a marriage/union), and cousins (ancestors and descendants of the parents of a married couple).

In all these charts, each generation occupies one column. To the left is the older generation, and to the right is the younger generation, though this can be reversed through a program option. Bold lines are used to indicate direct relations to the main individual or family in a chart. Thin lines are for indirect relations, and pale thin lines are for relations by marriage or other social bond.

The cousins chart shows the ancestors and descendants of a person's grandparents without any crossing lines. There's a trick though. The 1st parent is made to be last and the 2nd parent is made to be first in their respective sibling orders. That allows the parents to be next to each other so that they can be connected without crossing over any of their siblings.

The Latest

Modifications, Ideas, and Challenges

Ps-anc9 is still several enhancements away. But interim versions are kept in usable form and are available for download here. Some images of chart possibilities are shown on this page to draw attention to major enhancements.

Please notify me of anyone else is working on changes to ps-anc so that I can post that information here and possibly merge those changes into one new version. This way we might avoid duplication of effort and speed up progress.

Additions to test/customize:
External file conversions.
  (example of a button to open a new window; uses JavaScript)

Interim Versions:

Full change log -- may including upcoming changes

'To Do' list and Known Issues

ps-anc8.86a.ll, 9 Jul 2004
  • Fixed the accidental addition of "(default)" to some font names which were supposed to go in font choices seen in a list.
  • Changed the name of paper size 11x17 (inches), based on GhostScript's usage, to "11x17". [Still haven't successfully tested this on a wide laser printer though.] "Ledger" seems to be just for the landscape orientation of this size.
ps-anc8.86.ll, 4 Jul 2004
  • Added some options under choices for: font encoding, date format, paper sizes.
  • Thanks to Patrick Texier for pointing out that I had forgotten to enable font reencoding for some recently added chart element fonts.
  • Thanks to Jonathan Sailor for pointing out that there was a problem when a cousins chart with missing grandparents encountered the attempt to include database keys along with the person info that is included in the PostScript output. Now a '-' is provided as the key for a "blank" person. Keys are included in case anyone ever wants to inspect the PostScript output in trying to trackdown a problem. They can be forced to show by setting the 'show_keys' variable to true in the PostScript output.
ps-anc8.85.ll, 14 Nov 2003
  • Individuals' names and information may be in different fonts.
  • Added option to print second names for individuals as information.
  • The combination of being able to print two name variants in different fonts allows for those variants to be shown in separate languages, perhaps with different alphabets -- such as those with Roman, Cyrillic, or Semitic roots -- on the same chart.
  • Support added for printing characters of specific fonts in right-to-left direction, such as fonts for Arabic or Hebrew. Special treatment is necessary when the characters have positive 'widths'. For examples and fonts for Arabic and Hebrew, see the Arabic/Hebrew support page.
  • Added a variable to the PostScript output called 'tweak' to provide an easy means of shifting chart content up (positive) or down (negative) the page in points units (1/72 inch). Editing the PostScript output is necessary change the value.
ps-anc8.83.ll, 23 May 2003
  • Fixed a positioning dilema in combo charts, by making it possible for an ancestor branch to be nudged closer to its first descendant branch.
  • Added patrilinear/matrilinear/all option for drop line chart.
  • Added option to omit parenthesized text from names in output.
ps-anc8.82.ll, 31 Oct 2002
  • Added ISO-Latin-2 as a font reencoding choice.
  • Added translation of special characters sent to PostScript strings.
  • Fixed a problem where many people showed with a trailing space in the name -- due to incorrect assumption that they had a suffix-type title.
ps-anc8.81.ll, 9 Oct 2002
  • Made the combo chart only require one pass over the data.
  • Added a user option to override automatic generation of a chart title.
Data: rugrats.ged
ps-anc8.80.ll, 26 Sep, 2002
  • place name abbreviation can now work in addresses
  • added access to external file conversion (like ps2pdf)
  • fixed a spacing problem in the cousins chart
  • added an option to show non-birth branches in thin-blue to indicate that they are not blood relatives of the root of a chart. This is similar to spouses in a descendant chart -- only now, adopted, foster, or sealed child-to-parent connections may be shown.
ps-anc8zt1.ll, 16 Jul 2002
  • implemented Paul Buckley's idea for chart type selection via list with better descriptions
  • fixed a few cases of uninitialized variables
ps-anc8zt.ll, 11 Jul 2002
shorten.lllib (an optional file to support abbreviation in PLACes)
  • added option for place component abbreviation (see comments in files)
  • fixed problem with half sibling ancestor 'side branches' causing ancestor branches to slip down the page in combo and cousins chart.
  • revised (current) address (ADDR) and former residence (RESI.ADDR or RESI.PLAC) handling. Note: GEDCOM doesn't explicitly name ADDR nodes as a person attribute, but it is a legal GEDCOM tag. See "func residence(" in the program for comments.
  • both ancestor and descendant branches may now grow up the page when necessary -- this avoids the creation of gaps between other parts of branches because later parts are 'bumping into' an artificial top boundary

Recently:
  • Margin-like functionality added to Adaptive and EPSF page-size choices. This allows for user-controlled white space around the entire chart when the paper dimensions are not specified.
  • Example by way of special chart type of how to achieve multiple charts on the same layout.
  • Rewritten descendant chart routine based on branch-up and branch-down routines.
  • New chart type: cousins -- shows the ancestors and descendants of parents and grandparents of a family (and any additional spouses of the parent couple).
  • New chart type: combo -- shows both ancestors and descendants of a married couple (and any additional spouses of that couple).
  • User option to set the bold factor for lines to direct relatives.
  • Made a new descendant chart routine that employs two other new routines: branch_up and branch_down. Branching up is now done without introducing unnecessary extra space between branches.
  • Ability to include addresses and other contact information with an individual's information.
  • Ancestor and descendant branches now handle missing parent as a person with spaces for a name, no information, and that does not block itself as a duplicate.
  • New chart type: drop line -- shows only direct descendants.
    The descendant chart no longer uses drop line-style when a spouse is mising.
  • Option for manual feed request specific to either PS Level 1 or PS Level 2.
  • Prints burial information.
  • Completed rough draft of 'cousins' chart.
See scorchin' samples below.

Hot new feature:
Cousins chart!
Now it's possible to show the ancestors of a family, their descendants, and the descendants of their aunts and uncles. This is achieved through a change in order of the mother and father among their respective siblings.
Using my wife's maternal grandparents (Edith Snyder and Clifford Sweesy) here's a cousins chart example in PDF or PS. In this example I chose a small number of generations for ancestors and descendants simply to keep it on as few pages as possible. It was made using the cousins chart from ps-anc8z3.ll, 31 March 2001.

Known problems needing investigation or fixing in the interim version:
  • When the chart is figured, each person's information is assumed to be displayed at a certain maximum font size. Along the bottom of the chart, the person's information that goes the lowest (assuming maximum font size) determines the extent of the chart. Since the maximum scale of the font may be reduced by the PostScript code at print time (to fit info within generation bounds), and because different paper sizes may be used, we run into a space problem at the bottom of the chart. When the font size is not at its maximum, a different person may actually reach the farthest down the page. To catch this, and adjust the bottom of the chart to avoid blank space, it will be necessary to equip the PostScript output with the ability to determine who is going to reach the farthest, taking font-size adjustments into account.

Major enhancements since version 8:
  • PostScript output made to work on PS Level 1 printers.

  • Page size selection and selection of media from printer is allowed. This has been tested on an HP LaserJet 4si and a Apple LaserWriter 4/600.

  • Implemented flagging of duplicate individuals so that additional appearances on the chart can have dashed horizontal lines.
    Also, implemented the optional truncation of a duplicate individual's ancestors to save room on a chart.

  • Noticed vertical line dashing not being done on lines connecting duplicate parents -- turns out it was because, in PostScript, "2 setlinecap" doesn't just cap the ends of a dashed line, but it caps the dashes too! This can completely fill in the gaps between dashes. To work around, line ends had to be extended manually to emulate the end-of-line capping.

  • Once and for all, the ISO Latin 1 encoding has been separated from the partial IBM PC Extended Character Set encoding and both made optional. In the past there had been a tug-of-war between the two encodings as each new version of ps-anc came out.

    To view the character set being used by an output file of ps-anc, insert evtable.ps just before the last line (%%EOF) in the PostScript file output. You can also comment out the "print-a-page" and "showpage" lines that are the last lines of the output file which produce a chart if you're only interested in the character-set table. This is what I used to verify the reencodings.

    An improved character set chart is presented here. It has been made so that filling out a 8.5" x 11" page is possible (with parameters to adapt to other page sizes). Wider boxes provide room to jot notes about how to produce characters through keyboard combinations. For instance, to produce o-slash in Mac OS X, type opt-"o" (if using Terminal, set the display encoding in 'Window Settings...' to be ISO Latin 1)

    To view the ISO Latin-1 character set, check out reencLatin1.ps | reencLatin1.pdf (pdf was made with ghostscript) (using Preview in OS X to view the pdf, the only difference noted was that the currency symbol was changed to a Euro and Preview in OS X seems to drop out 0 width lines -- so it's better to view the .pdf file with Acrobat or simply print the .ps file)

    To view the ISO Latin-2 character set, check out reencLatin2.ps | reencLatin2.pdf In the Times-Roman font (ghostscript's NimbusRomNo9L-Regu or n021003l.*) The T and t with cedilla appear with comma-accent instead. This might since the Romanian preference is for the comma-accent and there might be no other languages that use these with a cedilla. Also, the L, l, t, and d with caron (upside-down circumflex) have a superscripted comma instead -- this I can't explain.

    What makes these encodings special are the characters that appear in the positions after 160 (octal 240 or hex A0).

  • Ancestor charts can now include the ancestors of half-siblings, with half-siblings equally spaced between spouses.

    In order to check out the positioning of half-siblings between the stepparents, you may need help in finding individuals in your database who had 3 or more families, each with children. So here's a specially written program to do just that: spchk.ll


  • Scorchin'! Mixed ancestor/descendant chart, or Combination Chart
    For a family, show the ancestors of the parents as well as the descendants of the children.

    The combo. chart is also able to handle a target family with no children (as for an upcoming-marriage chart) which is equivalent to setting a descendant depth limit of 1, which cuts off the descendant generations.

    View samples in PostScript and PDF formats made with ps-anc8zq.ll, 27 Sep 2001.

Interim samples:
  • There is a sample from ps-anc8i.ll in PDF, PS, and GIF formats on the samples page. The chart is of my ancestors. The new feature was ancestors of stepparents.

  • A sample from ps-anc8k.ll in PDF format is on the samples page too. The chart is Ancestors of Elijah Toadvine. The new feature is the use of dashed lines on duplicates.

  • Hot! Including a chart in LaTeX document is now possible. Here's an example ps | pdf made using `psfig' in conjunction with LaTeX. Here's the LaTeX file and the included PostScript file which conforms to the EPSF standard.

Ideas/fixes that will probably not make it into the next version:
  • Automatically determine the minimum number of pages for optimum chart appearance, i.e. to avoid making text too small to read -or- to avoid "wasted space"
  • Make the size of text specific to different generations, allowing names to fill out their generation's width when there's vertical space to accomodate the larger text. This might be impossible or undesirable.
  • Make lines of text skip past page breaks. The length of a chart isn't known until the data collection is complete. Border, title, and label also affect the positions of the lines of data. Also, only the PostScript program can have easy access to font measurements. So, it seems that in the PostScript file is the natural place to implement page-break skipping by lines of text.

    I believe that to implement this for the PostScript output would require reserving a margin equal to 1/2 of "name_height" on one side of each horizontal page break.

Version 8

View samples produced with ps-anc8.

Downloading

Download ps-anc8.ll (79,330 bytes) (right-click or control-click to force download)
Here's the same file stored in a zip or gz compressed form.

New as of version 8

Version 8 of ps-anc is my contribution to an already existing program series. New in version 8 were some new options controling chart content, and the ability to require a margin in the PostScript rendering of the chart. This was deemed necessary to prevent the conversion to PDF from having a zero margin, which would not print well.

Most changes were to fix problems in versions prior to 8, some of which were: half sibling lines not connecting with their parent, names too wide in some charts when generations were wide, extra vertical space being inserted between ancestral branches, and the small chart label colliding with the bigger chart title.

Internationalization

The main focus seems to have been on supporting the west European characters. Web pages giving details on ISO 8859-1 (Latin1) and more...

A bit of history...

An ECS encoding scheme (used with DOS computers) had been used in ps-anc, at about version 6. This fouled the attempt at ISO 8859-1 compatibility]

A message posted to Lines-L showed some changes to ps-anc8 to change the language of the prompts to French. It also switched to ISO-8859-1 "Latin 1" character encoding. 8 April 1998 message

Another message showed how to just fix the problem of showing umlauts, and probably other international characters, using only part of the "French" modification. 14 April 1998
This fixed a problem someone was having with an accented 'e' appearing correctly once, but as an o-slash elsewhere in the same name. Another person reported that this fixed the same problem when accented characters appear in bold face.

Another message shows how to reencode the bold font to ISO-8859-1. 28 April 1998

All these attempts at making the PostScript output use the ISO 8859-1 character set have been assimilated or replaced in newer versions of ps-anc. To view a table of the ISO 8859-1 character set, print this file: reenc.ps on a PostScript printer or open it in a PostScript viewer, such as GhostView. Alternatively, reenc.pdf (300dpi) may be used with any PDF viewer.


PS to PDF

Please see my readers page for PostScript & PDF viewing info.

To convert the output to PDF format there are these options:

Be aware that the PDF file you make might not use the same font you originally specified, and viewed, in the PostScript file. For instance, if you specified Zapf-Chancery-Medium-Italic as the main font for a chart, it might look fine when printed, or even when viewed with GhostView (which uses descent approximations of the font for viewing on a monitor). However, your PDF conversion program, not having access to the real PostScript font, will substitute something else and subsequent printing from the PDF file will not have text that looks like Zapf-Chancery-Medium-Italic, or if an appoximation is used, it may appear jagged.

On-line PostScript/PDF References:


[ Back to the Top | Robert's LifeLines page | Robert's Genealogy Page ]
This page is currently at http://www.math.clemson.edu/~rsimms/genealogy/ll/ps-anc/