diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/pstab/manual.pst |
Initial commit
Diffstat (limited to 'support/pstab/manual.pst')
-rw-r--r-- | support/pstab/manual.pst | 948 |
1 files changed, 948 insertions, 0 deletions
diff --git a/support/pstab/manual.pst b/support/pstab/manual.pst new file mode 100644 index 0000000000..f7ea908598 --- /dev/null +++ b/support/pstab/manual.pst @@ -0,0 +1,948 @@ +NewDoc Centred +(PStab v2.0 +A system for typesetting tablature. +(c) 1994 Brian Ewins. + +Contents) +NewStyle Text +( +Introduction +Writing PStab files +The Verbatim Style +The Centred Style +The Verses Style +The ChordPro Style +The Chords Style +The Guitar Tablature Style +The ASCIItab Style +Getting Control of The Layout +Writing Tablature Styles +Writing General Styles +Copyrights & Copylefts +About the Author +) +NewStyle Centred +(Introduction: +or +Zen and the Art of Programming) +NewStyle Text +( +For me, there are some things you must obey when writing \ +a program: +*It must be original. +Well, that rules out most shareware stuff. +*It must be backwards compatible. +Hello, Microsoft? +*It must be portable. +*If it needs a manual, it sucks. +Hello, Microsoft (again)? + +I have attempted in this program to address all these \ +questions. I've certainly never seen anything like this \ +program before, and it can make sense of ChordPro, and \ +ASCII'd tablature. \ +I chose to write it in PS and not in TeX because some \ +people out there don't have TeX, and I didn't write it \ +in C because some people don't have compilers. However, \ +almost everyone has access to a PS printer, and anyone \ +can get hold of GhostScript for free to view this stuff. \ +In fact, I didn't know PS at all before I wrote this, \ +which shows how seriously I took the choice of language. \ +As for the manual. Well, this is more of an ideal than \ +something you can ever manage to stick to. I did put \ +a lot of thought into the syntax for entering tab, chords, \ +etc, and hopefully this shows through in ease of use. \ +And now, with a tinge of regret, the manual. +) +NewStyle Centred +(Writing PStab files) +NewStyle Text +( +This is the manual for PStab, a program for typesetting tablature. \ +PStab is very flexible, and it's not limited to having only one \ +guitar, or to using guitar tab instead of, say, bass tab. It can also \ +typeset words of songs in a nice way, and is backwards compatible \ +with ChordPro, and can even make ASCII tablature look nice for \ +printing too. As an example of how flexible this program is: \ +since this manual contains many examples of \ +PStab's output, it seemed only natural to use PStab to typeset it, \ +and PStab was up to the task ! O.K. so TeX it ain't, but if you can \ +read this, then you can use PStab --- the program is written in \ +PostScript, and so is more portable than most. +), +(PStab is designed somewhat along the line of LaTeX, for those who \ +are familiar with that system.That is to say, there is a core system \ +for typesetting, on top of which you layer 'styles' which use \ +the core functions, to hide the intimate workings of the program \ +from the end user. Since the commands that you 'see' depend on which \ +style you are using, you should read the sections on each style to \ +learn how they work. To make this easy, they all follow pretty much \ +the same design. +), +(Firstly, though, I should describe how to write the bare bones of \ +a PStab document. Here is a small document: +) +NewStyle +(GetPageMargins +/LeftMargin 1 inch smaller +/RightMargin 1 inch smaller +/TopMargin 1 inch smaller +/BottomMargin 1 inch smaller +0.1 setlinewidth +NewDoc +\(Hello World\) +EndDoc) +NewStyle Text +( +What does this do? GetPageMargins is a command to find out the \ +size of page your printer uses. You don't have to tell PStab that \ +you've got A4 instead of US Letter, or any other size, it figures \ +it out for itself. You must use this command, to give values to \ +the margins. The next step was to move the margins in a bit. They're \ +only a couple of mm in on my printer, so output would look ugly if \ +I left them as they were. If you want to have them some other distance \ +than 1 inch in from the page edge, change the 1 to something else. \ +PostScript doesn't 'know' inches, or 'smaller', I put those in the \ +program to make this easier to understand. 'setlinewidth' is a \ +PostScript command to change the width of lines it draws. \ +The 0.1 sets it to be 1/720 of an inch. Next, I used NewDoc and \ +EndDoc. These set up the program to expect PStab, and clean up \ +afterwards. Notice that Hello World is enclosed in brackets. + +To print this '.pst' file, you attatch it to the end of the \ +program, and send the whole thing to the printer. The end of \ +the program in this case would be at the comment saying \ +'DOCUMENT SETUP'. However, you are the only person ever \ +likely to want to adjust your page margins, so '.pst' documents \ +will commonly start with a 'NewDoc' command, and should be \ +tagged on to the program after the 'DOCUMENT' comment. If you \ +look at this file with an editor, this should all become \ +clear, since the manual itself is tagged on in this way. + +The example described above \ +gets displayed at the top left of a page in the default style, \ +which looks like this: +) +NewStyle Verbatim +(Hello World) +NewStyle Text +( +This style, which I use in the manual to indicate what you should \ +type, is called Verbatim. It performs simple linebreaking on plain text.\ +In fact, all of the text in this manual uses this style, with the font \ +changed to make the difference between the text and examples clear. \ +How do you change styles then ? Here is an example: +) +NewStyle +(NewStyle Verbatim) +NewStyle Text +( +This cleans up after the last style used, and changes to Verbatim.\ +Generally, you replace Verbatim by the name of the style you want to \ +use. There are seven styles distributed with this program, but I expect \ +others to make up their own for particular documents, just as I did \ +to make the text you're reading appear in this font. I will describe \ +how to write a style towards the end of this document. + +Now I'll go on to describe all of the distributed styles individually. +) +NewStyle Centred +(The Verbatim Style) +NewStyle Text +( +Commands to begin Style: +) +NewStyle +(NewDoc +NewDoc Verbatim +NewStyle +NewStyle Verbatim) +NewStyle Text +( +Any of these commands start up the Verbatim style. \ +Note however that you only use the NewDoc command at \ +the start of a PStab file: repeated use without an \ +accompanying EndDoc will cause an error. The NewStyle \ +command cleans up whats left at the end of each section \ +of a style, and then starts up in the new one. I have \ +put an identical 'commands' section at the start of each \ +style decription, the comments in this paragraph apply \ +to all of them. + +The Verbatim style is the is the default, since it displays \ +plain text acceptably. Here is an example of its use: +) +NewStyle +((Hello \\\(),(I break lines wherever I see a comma outside), +(the brackets ( and ), or at a newline +in the input, or), +(I break very very very very very very very very very\\ + very very very very very very very very very very very\\ + very very very very very very very very very very very\\ + very very very very very very very very very very very\\ + very very very very very very very very very very very\\ + long lines up if I have to.), +(the last piece of text has no comma after it.)) +NewStyle Text +( +Which displays like this: +) +NewStyle +(Hello \(),(I break lines wherever I see a comma outside), +(the brackets ( and ), or at a newline +in the input, or), +(I break very very very very very very very very very\ + very very very very very very very very very very very\ + very very very very very very very very very very very\ + very very very very very very very very very very very\ + very very very very very very very very very very very\ + long lines up if I have to.), +(the last piece of text has no comma after it.) +NewStyle Text +( +Note the use of backslashes to protect unpaired brackets,\ +while paired brackets are OK. Backslashes also prevent automatic \ +line breaks at newlines in the input, in the styles which do that. \ +The backslash character itself is also has to be protected \ +by a backslash. For more about character escapes, as these \ +are called, you should read 'The PostScript Language Tutorial \ +and CookBook' by Adobe Systems Inc. You shouldn't need to \ +know these for normal use of the program. +) +NewStyle Centred +(The Centred Style) +NewStyle Text +( +Commands to begin Style: +) +NewStyle +(NewDoc Centred +NewStyle Centred) +NewStyle Text +( +This is the style which produced the title at the top of this \ +page. It's very similar to the Verbatim style. Here is an \ +example of its use : +) +NewStyle +((Hello),(I break lines wherever I see a comma outside), +(the brackets ( and ), or at a newline +in the input, or), +(I break very very very very very very very very very\\ + very very very very very very very very very very very\\ + very very very very very very very very very very very\\ + very very very very very very very very very very very\\ + very very very very very very very very very very very\\ + long lines up if I have to.), +(the last piece of text has no comma after it.)) +NewStyle Text +( +Which displays like this: +) +NewStyle Centred +(Hello),(I break lines wherever I see a comma outside), +(the brackets ( and ), or at a newline +in the input, or), +(I break very very very very very very very very very\ + very very very very very very very very very very very\ + very very very very very very very very very very very\ + very very very very very very very very very very very\ + very very very very very very very very very very very\ + long lines up if I have to.), +(the last piece of text has no comma after it.) +NewStyle Text +( +I'm kinda pleased with the linebreaking algorithm here, \ +it uses up very little in terms of memory. Not that anyone \ +out there really cares about this - do you ? +) +NewStyle Centred +(The Verses Style) +NewStyle Text +( +Commands to begin Style: +) +NewStyle +(NewDoc Verses +NewStyle Verses) +NewStyle Text +( +This style is for printing the verses of songs. It tries to place as \ +many verses as it can alongside each other, and if placing the next \ +would go across the right margin, it moves down to the next available \ +space before printing it. Each verse is contained between a single \ +pair of brackets. Here is an example of its use: +) +NewStyle +(I print verses in a row, +The next line gets put down below, +Mumble mumble rhymes with grow +Done this verse, now on we go!), +(I print verses in a row, +The next line gets put down below, +Mumble mumble rhymes with grow +Done this verse, now on we go! +This ones longer than the rest, +To put my linebreaks to the test. +Where's the next line? yes, you've guessed, +I print it in the place that's best!), +(I print verses in a row, +The next line gets put down below, +Mumble mumble rhymes with grow +Done this verse, now on we go!), +(I print verses in a row, +The next line gets put down below, +Mumble mumble rhymes with grow +Done this verse, now on we go!) +NewStyle Text +( +Which generates this: +) +NewStyle Verses +(I print verses in a row, +The next line gets put down below, +Mumble mumble rhymes with grow +Done this verse, now on we go!), +(I print verses in a row, +The next line gets put down below, +Mumble mumble rhymes with grow +Done this verse, now on we go! +This ones longer than the rest, +To put my linebreaks to the test. +Where's the next line? yes, you've guessed, +I print it in the place that's best!), +(I print verses in a row, +The next line gets put down below, +Mumble mumble rhymes with grow +Done this verse, now on we go!), +(I print verses in a row, +The next line gets put down below, +Mumble mumble rhymes with grow +Done this verse, now on we go!) +NewStyle Centred +(The ChordPro Style) +NewStyle Text +( +Commands to begin Style: +) +NewStyle +(NewDoc ChordPro +NewStyle ChordPro) +NewStyle Text +( +This style is meant to reproduce the output of the ChordPro program \ +directly from chordpro files. If you're not familiar with that \ +program, basically the idea is that you type the text of the \ +song with chord names in square brackets at the point where \ +you change chord. The program's main function is to place \ +these chord names above the text at that position, as you \ +would see in many guitar books. Here's an example: +) +NewStyle +(({title:The Manual Song} +{st:No-one has yet claimed responsibility} +[D]I print verses [A7]in a [D]row, +The next line gets put [A7]down be[D]low, +Mumble mumble [A7]rhymes with [D]grow [G][G#][A][Bb][C][D] +Done this verse, now [A7susX]on we [quietly]go! + +{c:chorus} + +[D]The second verse is [A7]like the [D]first, +The music poor, the [A7]verse is [D]worse, +I wrote this since [A7]I'd get [D]sued, +If I used real songs. [A7]This'll [D]do. +)) +NewStyle Text +( +Which generates this: +) +NewStyle ChordPro +({title:The Manual Song} +{st:No-one has yet claimed responsibility} +[D]I print verses [A7]in a [D]row, +The next line gets put [A7]down be[D]low, +Mumble mumble [A7]rhymes with [D]grow [G][G#][A][Bb][C][D] +Done this verse, now [A7susX]on we [quietly]go! + +{c:chorus} + +[D]The second verse is [A7]like the [D]first, +The music poor, the [A7]verse is [D]worse, +I wrote this since [A7]I'd get [D]sued, +If I used real songs. [A7]This'll [D]do. +) +NewStyle Text +( +Note how the chord placing is done properly, but other \ +commands are ignored. Whole ChordPro files can be encapsulated \ +this way, and printed without using ChordPro at all. \ +PStab does not automatically generate a chord table, as \ +ChordPro does, even though I could support this. There are very \ +good reasons for not doing so, \ +to do with printer memory, but none for reproducing this \ +feature, other than laziness on your part, I guess. + +The style also spaces out the run of chords \ +in the first verse properly, which is there to \ +show you how you're supposed to type sharps and \ +flats. The line after this shows that you can put \ +anything above the text, not just chords. +) +NewStyle Centred +(The Chords Style) +NewStyle Text +( +Commands to begin Style: +) +NewStyle +(NewDoc Chords +NewStyle Chords) +NewStyle Text +( +This style prints chord diagrams. It knows all of the chords that \ +ChordPro did, over 130 of them. There were a couple of mistakes in \ +the table in that program, which I corrected, but there may be more \ +that I haven't spotted that are still wrong. Here's the example: +) +NewStyle +((A#m),(Bbm),(N),(N) [ 5 6 7 5 ], (Asus2) [ -1 [7 3] [7 4] [6 4] 0 0]) +NewStyle Text +( +Which displays like this: +) +NewStyle Chords +(A#m),(Bbm),(N),(dunno) [ 5 6 7 5 ], (Asus2) [ -1 [7 3] [7 4] [6 4] 0 0] +NewStyle Text +( +The first two are examples of chords that PStab knows, with \ +showing how to type sharps and flats. The third is a name that \ +ChordPro doesn't know, which produces a blank, labelled, chord. \ +I think this is more useful than not displaying anything. \ +The last two are examples of specifying a chord: you just type \ +the frets that are to be used, from left to right. Note that they \ +don't have to be guitar chords! The program is intended to be \ +independent of which instrument you use it for. Notice in the \ +final example, I specified which fingers I wanted to hold down \ +certain strings with. Finally, the order matters: you must give \ +the name of the chord before the fingering, if you give both. +) +NewStyle Centred +(The Guitar Tablature Style) +NewStyle Text +( +Commands to begin Style: +) +NewStyle +(NewDoc Guitar Tablature +NewStyle Guitar Tablature) +NewStyle Text +( +Go on, admit it, you flicked straight to this page, right? \ +This is \(a\) style for setting out tablature. The Tablature \ +engine is in fact a general engine capable of printing \ +for multiple instruments, adding lyrics, comments, and \ +symbols, etc. This page actually describes a substyle I \ +wrote as an example. A substyle provides information \ +about which lines contain text, and which are frets, \ +and also what each of these are called. + +This particular substyle -Guitar- describes a line of text called \ +'chord', 6 rows of frets called 'e,B,G,D,A,E' in that order, \ +and a row of text called 'lyric'. Ok, now for some examples: +) +NewStyle Guitar Tablature +(E 0 D 2 {lyric:see how a note run is typed}, E 3,4,5,6), +(E 0 A 2 D 2 {lyric:here's a picking pattern}, E,A,D,E,D,A), +(E 0 A 2 D 2 {lyric:watch me justify this}, E,A,D,E,D,A), +(E 0 A 2 D 2 {lyric:at 12 point it happened there}, E,A,D,E,D,A), +({lyric:heres some symbols} D {tie},{up},{down},{vib}), +({harm} {lyric:harmonic},\(3\){tie} {lyric:bend},2), +({chord:hammer on} {h},{lyric:pull off} {p}), +({0}{lyric:fingering},{1},{2},{3},{4}) +NewStyle Text +( +That was generated from this: +) +NewStyle +((E 0 D 2 {lyric:see how a note run is typed}, E 3,4,5,6), +(E 0 A 2 D 2 {lyric:here's a picking pattern}, E,A,D,E,D,A), +(E 0 A 2 D 2 {lyric:watch me justify this}, E,A,D,E,D,A), +(E 0 A 2 D 2 {lyric:at 12 point it happened there}, E,A,D,E,D,A), +({lyric:heres some symbols} D {tie},{up},{down},{vib}), +({harm} {lyric:harmonic},\(3\){tie} {lyric:bend},2), +({chord:hammer on} {h},{lyric:pull off} {p}), +({0}{lyric:fingering},{1},{2},{3},{4})) +NewStyle Text +( +The main things to notice here, are: +* Bars of tablature are in brackets. The program can \ +only break lines at the end of bars. It is actually possible \ +to write a system which can optionally break anywhere, but \ +it is much more complicated. +* Columns of tablature (notes which are played simultaneously) \ +are separated by commas. +* Text rows and tablature rows align separately. This means \ +that song lyrics can run under several columns of tab. Unfortunately, \ +it also means that a long lyric followed by a column with a chord in \ +it will leave a big gap in the tab. I know how to fix this, but it \ +makes writing styles less idiot-proof. If I can think of a good way \ +of doing it, it may eventually appear in another release. Don't hold \ +your breath though, because it would probably involve changing how \ +you write styles, and other people will probably have written their \ +own by then. +* lyrics, chords, etc are written in the column in which they begin. +* PStab 'remembers' the last thing you played on each string, \ +and also the last string you picked. This is to allow easy \ +entry of note runs (you don't have to keep saying the string) \ +and picking patterns (you don't have to keep sying the notes). +* PStab interprets anything that isn't the name of a string, +or a 'special command' (something in curly brackets) as an object \ +to be written on a string - which is why the (3) worked. You +could even write text in the tab this way. +* if a special command does not include a colon, then it's some \ +mark to be placed on a string. (the ties, harmonics, etc). Some \ +of the marks I use are non-standard, but they are a compromise \ +between what I should print, and what can be programmed easily. +* tie marks and slide marks stretch to fill the gap between notes \ +if this changes. + +If you use this syntax, the main advantages are that PStab \ +can align lyrics and chords, and place nice-looking marks \ +in the music. However, if you're lazy and have some ASCII'd \ +tablature you want to prettify, PStab has ways of dealing with \ +that too. This is described in the next section. +) +NewStyle Centred +(The ASCIItab Style) +NewStyle Text +( +Commands to begin Style: +) +NewStyle +(NewDoc ASCIItab +NewStyle ASCIItab) +NewStyle Text +( +I promised I'd do this in this release, and here it is. I have \ +provided a way of defining a Tablature substyle which \ +uses the ASCIIparser instead if the StdParser (the Guitar substyle \ +in the last section used the StdParser). The ASCIIparser takes \ +several rows of text and assumes they are all tab - it doesn't care \ +how many rows there are, as long as it's been told beforehand. It +then strips out all the minus signs and tries to recognise when objects \ +are lined up in columns. This is difficult, espescially to do quickly \ +as this program must, and there are a few cases where you can make \ +the algorithm do odd things. None of them crash the program, or stop \ +it recognising bar lines - it makes bar lines where it sees a column +of pipe symbols ( aka logical OR signs ). In fact, a bit after \ +I wrote that piece of code, I found I could easily alter it so \ +that it actually split into lines where it thought there was a bar line, \ +and consequently would break lines better. This works so well, \ +that I can see my own format being redundant (even though it \ +does look nicer, people will always prefer to send ASCII tab). \ +The ASCIItab style I have written to demostrate this assumes that it's \ +looking at guitar tablature-ie 6 rows of text at a time. Heres an \ +example which shows off its capabilities, and its weaknesses: +) +NewStyle ASCIItab +(E ||--0-2-|-3---2-0-----0-2-|---------0-------|-----------------| +B ||------|---------4-------|-0---2-4-----3-1-|-0---------------| +G ||@-----|-----------------|-----------------|-----2-0-----0-2-| +D ||@-----|-----------------|-----------------|---------4-------| +A ||------|-----0---2---0---|-----------------|-----0---2---0---| +E ||--3-2-|-0---------------|-3---2---0---2---|-3---------------|), + +(|--0--2-|- +|-------|- +|-------|- +|-------|- +|-------|- +|--3--2-|-), +(|---------------0---| +|-4---0---(0)-----0-| +|-------------------| +|-------------------| +|-2-----3--2--0-----| +|---------------4---|), +(|---------------0---|-----------------|-----------------|------------------| +|-4---0---(0)-----0-|-1---3---0---1---|-----------------|------------------| +|-------------------|-------2-------0-|-2---4-----------|------------------| +|-------------------|---2-4-----1-2---|-------4-5---4-2-|-1---2-4-5---4--2-| +|-2-----3--2--0-----|-0---------------|---4-6-------0---|-2---0---2--(2)---| +|---------------4---|---------3-------|-2-------0-------|------------------|), +(|---------------0---| +|-4---0---(0)-----0-| +|-------------------| +|-------------------| +|-2-----3--2--0-----| +|---------------4---|) +NewStyle Text +( +Which was generated from this source: +) +NewStyle +((E ||--0-2-|-3---2-0-----0-2-|---------0-------|-----------------| +B ||------|---------4-------|-0---2-4-----3-1-|-0---------------| +G ||@-----|-----------------|-----------------|-----2-0-----0-2-| +D ||@-----|-----------------|-----------------|---------4-------| +A ||------|-----0---2---0---|-----------------|-----0---2---0---| +E ||--3-2-|-0---------------|-3---2---0---2---|-3---------------|), + +(|--0--2-|- +|-------|- +|-------|- +|-------|- +|-------|- +|--3--2-|-), +(|---------------0---| +|-4---0---(0)-----0-| +|-------------------| +|-------------------| +|-2-----3--2--0-----| +|---------------4---|), +(|---------------0---|-----------------|-----------------|------------------| +|-4---0---(0)-----0-|-1---3---0---1---|-----------------|------------------| +|-------------------|-------2-------0-|-2---4-----------|------------------| +|-------------------|---2-4-----1-2---|-------4-5---4-2-|-1---2-4-5---4--2-| +|-2-----3--2--0-----|-0---------------|---4-6-------0---|-2---0---2--(2)---| +|---------------4---|---------3-------|-2-------0-------|------------------|), +(|---------------0---| +|-4---0---(0)-----0-| +|-------------------| +|-------------------| +|-2-----3--2--0-----| +|---------------4---|)) +NewStyle Text +( +Note that each set of 6 rows is enclosed by brackets. You must do this. \ +It is possible to interpret whole chunks of text and find the tab - \ +even to the extent that you wouldn't need to say how many lines to \ +expect, and so that it would handle lyrics. \ +However, that is beyond the scope of this program. + +Now we play spot the deliberate mistakes. There are 6. Firstly, the \ +tuning in the first line wasn't reproduced: the algorithm is to ignore \ +everything up to the first column of minus signs, so that bar lines \ +don't get displayed. Note that it ignored the 'at' symbols that \ +were intended to denote a repeat for precisely the same reason. \ +In the next line, there is an unfinished empty bar. The program \ +ignores empty bars (part of the algorithm accidentally generates \ +lots of these, so this is necessary). Finally, all of the \ +bracketed numbers appeared in the wrong place. This is because the \ +bracket sticks out over the left edge of the column of things it \ +is supposed to align with. The program decides that the object \ +with the bracket, and the one without the bracket, are in fact \ +in different coulumns, and displays them that way. + +All in all, this does a really good job of printing ASCII'd tab, and \ +the things that cause the errors can be easily corrected by you. \ +I think this ought to be enough to satisfy most people. + +Incidentally, parts of this tab were from a piece by Bach, tabbed \ +by Michael S. Zraly. Unlike Woodward & Bernstein, I always name \ +my sources ! +) +NewStyle Centred +(Getting Control of The Layout) +NewStyle Text +( +You don't have to read this. it contains optional info on \ +generating page breaks and changing fonts. + +How to generate a page break: there is no way for me to safely \ +do this, generally, while preserving the current style. Instead, \ +I have written a command which basically ends the current document, \ +and starts again. As an example of how this works, if we were \ +in the Verses style and wanted a page break, we would write: +) +NewStyle +(PageBreak Verses) +NewStyle Text +( +Which generates the required page break, and puts us back into \ +the verses style. Of course, you can actually change to any style \ +at this point - typically you would say 'PageBreak Centred' instead \ +to put a title at the start of the new page. + +Changing fonts: there is a command for changing font, called \ +'ChooseFont'. For those who know some PostScript: you should use \ +this instead of 'setfont', since ChooseFont also tells the program \ +the font size for internal use. Here is an example of its use: +) +NewStyle +(/Times-Roman 12 ChooseFont) +NewStyle Text +( +This changes to the font this text is in, in a 12 point size. \ +A point is 1/72 of an inch, and most text in books is somewhere \ +from 8 to 12 points high. Larger sizes are generally used for \ +titles. Note the slash before the name of the font. Obviously, \ +this command will only work if your printer actually has the font. \ +PostScript printers should come with the following fonts: +Times-Roman,Times-Italic,Times-Bold,Times-BoldItalic, +Helvetica,Helvetica-Oblique,Helvetica-Bold,Helvetica-BoldOblique, +Courier,Courier-Oblique,Courier-Bold,Courier-BoldOblique, +Symbol. + +To give you an idea of what these are, this text is Times-Roman, \ +the Centred style produced the titles in this document by default \ +in Helvetica, and the Verbatim style produces Courier. Symbol is \ +not an appropriate font for writing text in. For more on \ +fonts, you should really read 'The PostScript Language Reference \ +Manual', by Adobe Systems Inc. + +WARNING:You can only use this command in certain places, or you will \ +confuse the typesetter in the program. A safe place to use it \ +is immediately after you set a style. You can also use it in \ +the Centred and Verbatim styles outside of brackets. As in LaTeX, \ +it is the intention in this program to take your mind off \ +changing fonts by using sensible ones for each section of a \ +document. Hopefully, you'll heed this and use ChooseFont sparingly, \ +but if you don't, your problems are your own. I just described this \ +command so that you know what it does. A better way of using this \ +information, would be to look for the ChooseFont command in the \ +program, in the defnition of each style, and change them there. \ +This isn't recommended, but if you have particularly small or \ +large paper you may want to scale the output accordingly. + +Note that the Chords style, and all of the Tablature styles, \ +take account of the font size when drawing diagrams, so they \ +are the right size to fit the characters. +) +NewStyle Centred +(Writing Tablature Styles) +NewStyle Text +( +As usual, I'll proceed by example. Here's a style which would work \ +for guitar and bass with lyrics: +) +NewStyle +(/GtrBass +{ % a tab style. this must come BEFORE 'Tablature' + + /Times-Roman 8 ChooseFont + StdParser % usual method of entry. + /TextHandler + {% what to do with text.depends how many text objects you have. + { + { (lyric) {pop 11 IsTextRow} } + } ifcase + } def + + /TabHandler + {% what you call the rows that contain strings. + { + { (e) {pop 0 IsRow} } + { (B) {pop 1 IsRow} } + { (G) {pop 2 IsRow} } + { (D) {pop 3 IsRow} } + { (A) {pop 4 IsRow} } + { (E) {pop 5 IsRow} } + { (GG) {pop 7 IsRow} } + { (DD) {pop 8 IsRow} } + { (AA) {pop 9 IsRow} } + { (EE) {pop 10 IsRow} } + { /default {IsFret}} + } ifcase + } def + %template + + [[()][()][()][()][()][()] () [()][()][()][()] ()] +} def) + +NewStyle Text +( +What's going on here ? I defined the tab layout to be: 6 rows of \ +text with lines through, 1 row of text, 4 rows of text with lines \ +through, and another row of text. I gave the second purely text \ +row (row 11) a name, but not the first (row 6). Why ? Row 6 is always \ +left blank: so we should not make it possible to use it. \ +The program draws bar lines from the top of the staff to the \ +bottom ignoring any such gaps, which is what you expect to \ +see on a score. The object made purely of square and \ +round brackets, if you haven't \ +figured it, tells the program if its looking at text or \ +a fretting: its as simple as that. This line must come immediately \ +before you say 'Tablature' - look at the definitions of ASCIItab \ +and Guitar to see other examples. Normally, all of your \ +homebrew styles will look like this, adding or removing \ +lines from the case statements as necessary. + +This style also defines names for all the strings. I have \ +stuck to the same names for each of the guitar strings \ +as before, and have added the names 'EE' 'AA' 'DD' and 'GG' \ +for the bass strings. + +Finally, just to prove that the style I defined works, here \ +is a bar of it: +) +NewStyle + % a tab style. this must come BEFORE 'Tablature' + + /Times-Roman 8 ChooseFont + StdParser % usual method of entry. + /TextHandler + {% what to do with text.depends how many text objects you have. + { + { (lyric) {pop 11 IsTextRow} } + } ifcase + } def + + /TabHandler + {% what you call the rows that contain strings. + { + { (e) {pop 0 IsRow} } + { (B) {pop 1 IsRow} } + { (G) {pop 2 IsRow} } + { (D) {pop 3 IsRow} } + { (A) {pop 4 IsRow} } + { (E) {pop 5 IsRow} } + { (GG) {pop 7 IsRow} } + { (DD) {pop 8 IsRow} } + { (AA) {pop 9 IsRow} } + { (EE) {pop 10 IsRow} } + { /default {IsFret}} + } ifcase + } def + %template + + [[()][()][()][()][()][()] () [()][()][()][()] ()] +Tablature +( D 1 DD 7 {lyric:An example},A 5 EE 0) +NewStyle Text +( +ASCIItab is different in that it uses a different parser. \ +to rewrite this style, you should just be changing the \ +number of objects in the template. Look at the definition \ +of ASCIItab to see what I mean. The number of these held in the outer \ +pair of brackets is just the number of strings used in the tab. +) +NewStyle Centred +(Writing General Styles) +NewStyle +( +This is very hard - it should only be attempted by PS gurus.\ +I'll explain here a little of the innards of the program, so\ +we can see what functions are essential to a working style.\ +The comma or the end of a style (which calls Flush) should\ +first cause entry to the Parse command. This usually breaks\ +down complex objects into simple objects, and in particular,\ +into objects which should not be broken up by line or page\ +breaks, such as bars or words. For each of these, you should\ +call 'Atom' -and yes, I know you can split Atoms- which\ +in turn immediately calls GetAtom. This function should\ +set, at the very minimum, hbox and vbox, the horizontal\ +and vertical sizes of the object. These should be measured\ +in units of fbox, which is the size of the font. You don't\ +need to set fbox - that gets done by ChooseFont. + +Atom decides, given this information, whether or not to\ +split lines, when it calls NewLine, or start a new page,\ +when it calls NewPage. Usually, you then call Display,\ +which prints the object, but some styles I have supplied\ +print out a whole line together, so that Display is\ +called by NewLine and by Flush (it must be called by\ +Flush or the last line will not appear). + +And that's it. To summarize, you must define: + +*',' (the comma) +*Flush +*Parse +*GetAtom +*NewLine +*NewPage +*Display + +Actually, you can call Display anything you like,\ +and not define comma, sice these aren't called by\ +core functions, but in the interest of legibility\ +by others you should at least consider this. +) +NewStyle Centred +(Copyrights & Copylefts) +NewStyle Text +( +Sorry about this, but it's got to be done. + +PStab is Copyright (c) 1994 Brian Ewins. All rights reserved. + +PStab is distributed in the hope that it will be useful, but \ +WITHOUT ANY WARRANTY. No author or distributor accepts responsibility \ +to anyone for the consequences of using it or for whether it serves any \ +particular purpose or works at all, unless he says so in writing. Refer \ +to the PStab General Public License for full details. + +Everyone is granted permission to copy, modify and redistribute \ +PStab, but only under the conditions described in the PStab \ +General Public License. A copy of this license is supposed to have been \ +iven to you along with PStab so you can know your rights and \ +responsibilities. It should be in a file named COPYING. Among other \ +things, the copyright notice and this notice must be preserved on all \ +copies. + +This manual is part of the distribution of PStab, and is covered by \ +the same licensing agreement. + +ChordPro is (c) 1992 Martin Leclerc and Mario Dorion. + +PostScript is a registered trademark of Adobe Systems Incorporated. +) +NewStyle Centred +(About the Author) +NewStyle Text +( +I'm a 25 year old balding, bespectacled student, currently late \ +writing up my Ph.D. (on Computational Theoretical Nuclear \ +Physics - I kid you not). I've been playing guitar \ +since I was about 5 years old, and though I've never been \ +great, I can still hack out some Pixies or Tarrega when \ +the mood takes me. But it's always annoyed me how difficult \ +it was to get hold of tab for songs - I have for instance, \ +a copy of a Hendrix music book I got as a present, which \ +just shows the tune he sings, along with chords - and what \ +use is that? Beginners will probably disagree, but anyone can figure \ +out the chords to (most) songs - it easy. So, I was really impressed \ +when I discovered the tab I could get over the net. Never \ +satisfied, however, I thought it was a waste to print out \ +most of it as it stood, because you couldn't make it fit \ +the page properly. After a year or so of saying 'I should \ +do that' I reached breaking point when the other guy in +my office started writing a Chinese word processor instead +of writing _his_ thesis. As you can tell, not much real \ +work gets done round here. So, this is what I wrote, and\ +I hope you enjoy it. + +I'm releasing this as CardWare - it's actually freeware, \ +and there's no legal obligation on you to do this, but \ +if you liked it, send me a postcard. Preferably with \ +your favourite joke on it. (no need to translate if \ +it's not in English). My home adress is: + +23 Tantallon Drive +Falkirk FK2 8DJ +Scotland, +U.K. + +I'm just curious who uses it, really. + +If you really feel it's worth cash, make a donation to \ +the charity of your choice. Mine would be a Multiple \ +Sclerosis charity. + +Comments, and suggestions for a next release, if there \ +ever is one, should be sent to: +) +NewStyle +(gapv64@udcf.gla.ac.uk) +NewStyle Text +( +All the best to you and yours, +Baz. +(Brian Ewins) March 14, 1994. +) +EndDoc + + + |