From a1b5588bb0be6f77f9e44cd34332e996f66c3f1a Mon Sep 17 00:00:00 2001 From: wl Date: Fri, 28 Jan 2011 10:04:45 +0000 Subject: Add `refer' support to -me. * tmac/refer.tmac, tmac/refer-me.tmac, tmac/refer-ms.tmac, tmac/refer-mm.tmac: New files. The code in refer.tmac is based on the old code from `s.tmac'. * tmac/s.tmac: Remove direct refer support and include `refer-ms.tmac' instead. * tmac/e.tmac: Remove direct refer support and include `refer-me.tmac' instead. * NEWS: Updated. --- tmac/refer.tmac | 343 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 343 insertions(+) create mode 100644 tmac/refer.tmac (limited to 'tmac/refer.tmac') diff --git a/tmac/refer.tmac b/tmac/refer.tmac new file mode 100644 index 00000000..61a306d6 --- /dev/null +++ b/tmac/refer.tmac @@ -0,0 +1,343 @@ +.\" -*- mode: nroff; coding: iso-latin-1; -*- +.\" +.\" refer.tmac +.\" +.\" This is an interface to `refer', originally part of `s.tmac'. +.\" +.\" Copyright (C) 2011 Free Software Foundation, Inc. +.\" Written by Werner Lemberg (wl@gnu.org) +.\" +.\" This file is part of groff. +.\" +.\" groff is free software; you can redistribute it and/or modify it under +.\" the terms of the GNU General Public License as published by the Free +.\" Software Foundation, either version 3 of the License, or +.\" (at your option) any later version. +.\" +.\" groff is distributed in the hope that it will be useful, but WITHOUT ANY +.\" WARRANTY; without even the implied warranty of MERCHANTABILITY or +.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +.\" for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program. If not, see . +.\" +.\" Please send comments to groff@gnu.org. +. +. +.\" The following macros must be defined: +.\" +.\" ref*error -- print an error message (in arg1) +.\" +.\" ref*text-label-start -- start a reference in text (formatted +.\" reference number in arg1) +.\" ref*text-label-end -- end a reference in text +.\" +.\" ref*biblio-item-start -- a reference item with label (in arg1) +.\" in the bibliography block +.\" ref*biblio-item-start-nolabel -- a reference item without label in the +.\" bibliography block +.\" ref*biblio-item-end -- end a reference item in the +.\" bibliography block +.\" +.\" The following macros are optional: +.\" +.\" ref*item-start-hook -- stuff appended to the ]- macro +.\" ref*item-end-hook -- stuff prepended to the ][ macro +.\" ref*biblio-start-hook -- stuff appended to the ]< macro +.\" ref*biblio-end-hook -- stuff appended to the ]> macro +.\" +.\" The following strings must be defined: +.\" +.\" ref*refnum-start -- start reference number formatting in +.\" footnote +.\" ref*refnum-end -- end reference number formatting in +.\" footnote +.\" +.\" [. -- start reference number in text +.\" (directly inserted by `refer') +.\" .] -- end reference number in text (directly +.\" inserted by `refer') +.\" +.\" Here is the specification of the five possible reference styles +.\" provided by `refer'. The example entries are taken from the ms +.\" macro package +.\" +.\" ref*spec!0 Q A T S V N P I C D O -- other +.\" ref*spec!1 Q A T J S V N P I C D O -- journal article +.\" ref*spec!2 Q A T S V P I C D O -- book +.\" ref*spec!3 Q A T B E S V P I C D O -- article within book +.\" ref*spec!4 Q A T R G P I C D O -- technical report +.\" +.\" Now the setup for the formatting of reference entries. The given example +.\" entries for the various strings are taken from the ms macro package. +.\" +.\" Each string defines five arguments which are passed to a macro, with the +.\" meaning as below. Please refer to the man page of `refer' for more +.\" details on the fields. To allow fine-tuning, two levels are implemented: +.\" For the refer field X and style Y the string `ref*spec!X:Y' is looked up. +.\" If it doesn't exist, the string `ref*spec!X' is used instead. +.\" +.\" arg 1 the punctuation character to use to separate this field from the +.\" previous field +.\" arg 2 a string to insert after the punctuation character of the +.\" previous field (normally a space) +.\" arg 3 a string with which to prefix this field +.\" arg 4 a string with which to postfix this field +.\" arg 5 a string to add after the punctuation character supplied by the +.\" next field +.\" +.\" 1 2 3 4 5 +.\" ---------------------------------------------------------------------- +.\" ref*spec!A , " " -- author name +.\" ref*spec!B "" " " "in \fI" "" "\fP" -- book title of article +.\" ref*spec!D "" " " "(" ")" -- date of publication +.\" ref*spec!E , " " "ed. " -- editor +.\" ref*spec!G "" " " "(" ")" -- US Gov. ordering number +.\" ref*spec!J , " " "\fI" "" "\fP" -- journal name +.\" ref*spec!N "" "(" "" ")" -- issue number +.\" ref*spec!O . " " -- other information +.\" ref*spec!P , " " "p.\~" -- page +.\" ref*spec!PP , " " "pp.\~" -- page range +.\" ref*spec!T , " " "\\*Q" "" "\\*U" -- journal title +.\" ref*spec!T:0 , " " "\fI" "" "\fP" -- book title (other) +.\" ref*spec!T:2 , " " "\fI" "" "\fP" -- book title (book) +.\" ref*spec!V "" " " "\fB" "\fR" -- volume number +.\" +.\" ref*spec!dflt , " " -- all other entries +. +.\" start of reference +.de ]- +. rm [A [B [C [D [E [G [I [J [N [O [P [Q [R [S [T [V +. rm ref*string +. if d ref*item-start-hook \ +. ref*item-start-hook +.. +. +. +.\" end of reference +.de ][ +. if d ref*item-end-hook \ +. ref*item-end-hook +. ie d ref*spec!\\$1 \ +. ref*build \\$1 \\*[ref*spec!\\$1] +. el \{\ +. ref*error "unknown reference type `\\$1'" +. ref*build 0 \\*[ref*spec!0] +. \} +. ref*print +. rm ref*string +. rm [F +.. +. +. +.\" period before reference +.ds <. .\" +. +.\" period after reference +.ds >. \" empty +. +.\" comma before reference +.ds <, ,\" +. +.\" comma after reference +.ds >, \" empty +. +. +.\" start collected references +.de ]< +. als ref*print ref*end-print +. if d ref*biblio-start-hook \ +. ref*biblio-start-hook +.. +. +. +.\" end collected references +.de ]> +. als ref*print ref*normal-print +. if d ref*biblio-end-hook \ +. ref*biblio-end-hook +.. +. +. +.de ref*normal-print +. ie d [F \ +. ref*text-label-start \ + "\\*[ref*refnum-start]\\*([F\\*[ref*refnum-end]" +. el \ +. ref*text-label-start \& +. nop \\*[ref*string] +. ref*text-label-end +.. +. +. +.de ref*end-print +. ie d [F \ +. ref*biblio-item-start "\\*([F." +. el \ +. ref*biblio-item-start-nolabel +. nop \\*[ref*string] +. ref*biblio-item-end +.. +. +. +.als ref*print ref*normal-print +. +.de ref*build +. rm ref*string ref*post-punct +. nr ref*suppress-period 1 +. nr ref*style \\$1 +. shift +. while \\n[.$] \{\ +. if d [\\$1 \{\ +. ie d ref*add-\\$1 \ +. ref*add-\\$1 \\n[ref*style] +. el \ +. ref*add-dflt \\$1 \\n[ref*style] +. \} +. shift +. \} +. \" now add a final period +. ie d ref*string \{\ +. if !\\n[ref*suppress-period] \ +. as ref*string . +. if d ref*post-punct \{\ +. as ref*string "\\*[ref*post-punct] +. rm ref*post-punct +. \} +. \} +. el \ +. ds ref*string +.. +. +. +.de ref*add-T +. ie d ref*spec!T:\\$1 \ +. ref*field T \\*[ref*spec!T:\\$1] +. el \ +. ref*field T \\*[ref*spec!T] +. if r [T \ +. nr ref*suppress-period \\n([T +.. +. +.de ref*add-P +. ie \\n([P>0 \{\ +. ie d ref*spec!PP:\\$1 \ +. ref*field P \\*[ref*spec!PP:\\$1] +. el \ +. ref*field P \\*[ref*spec!PP] +. \} +. el \{\ +. ie d ref*spec!P:\\$1 \ +. ref*field P \\*[ref*spec!P:\\$1] +. el \ +. ref*field P \\*[ref*spec!P] +. \} +.. +. +.de ref*add-J +. ie ref*spec!J:\\$1 \ +. ref*field J \\*[ref*spec!J:\\$1] +. el \ +. ref*field J \\*[ref*spec!J] +.. +. +.de ref*add-D +. ie ref*spec!D:\\$1 \ +. ref*field D \\*[ref*spec!D:\\$1] +. el \ +. ref*field D \\*[ref*spec!D] +.. +. +.de ref*add-E +. ie ref*spec!E:\\$1 \ +. ref*field E \\*[ref*spec!E:\\$1] +. el \ +. ref*field E \\*[ref*spec!E] +.. +. +.de ref*add-G +. ie ref*spec!G:\\$1 \ +. ref*field G \\*[ref*spec!G:\\$1] +. el \ +. ref*field G \\*[ref*spec!G] +.. +. +.de ref*add-B +. ie ref*spec!B:\\$1 \ +. ref*field B \\*[ref*spec!B:\\$1] +. el \ +. ref*field B \\*[ref*spec!B] +.. +. +.de ref*add-O +. ie ref*spec!O:\\$1 \ +. ref*field O \\*[ref*spec!O:\\$1] +. el \ +. ref*field O \\*[ref*spec!O] +. if r [O \ +. nr ref*suppress-period \\n([O +.\" XXX +.\" el \ +.\" nr ref*suppress-period 1 +.. +. +.de ref*add-A +. ie ref*spec!A:\\$1 \ +. ref*field A \\*[ref*spec!A:\\$1] +. el \ +. ref*field A \\*[ref*spec!A] +. if r [A \ +. nr ref*suppress-period \\n([A +.. +. +.de ref*add-V +. ie ref*spec!V:\\$1 \ +. ref*field V \\*[ref*spec!V:\\$1] +. el \ +. ref*field V \\*[ref*spec!V] +.. +. +.de ref*add-N +. ie ref*spec!N:\\$1 \ +. ref*field N \\*[ref*spec!N:\\$1] +. el \ +. ref*field N \\*[ref*spec!N] +.. +. +.de ref*add-dflt +. ie ref*spec!dflt:\\$2 \ +. ref*field \\$1 \\*[ref*spec!dflt:\\$2] +. el \ +. ref*field \\$1 \\*[ref*spec!dflt] +.. +. +. +.\" First argument is the field letter. +.\" Second argument is the punctuation character to use to separate this +.\" field from the previous field. +.\" Third argument is a string to insert after the punctuation character of +.\" the previous field (normally a space). +.\" Fourth argument is a string with which to prefix this field. +.\" Fifth argument is a string with which to postfix this field. +.\" Sixth argument is a string to add after the punctuation character +.\" supplied by the next field. +.de ref*field +. if d ref*string \{\ +. ie d ref*post-punct \{\ +. if !\\n[ref*suppress-period] \ +. as ref*string "\\$2\" +. as ref*string "\\*[ref*post-punct]\\$3\" +. rm ref*post-punct +. \} +. el \ +. as ref*string "\\$2\\$3\" +. \} +. as ref*string "\\$4\\*([\\$1\\$5 +. if \\n[.$]>5 \ +. ds ref*post-punct "\\$6\" +. nr ref*suppress-period 0 +.. +. +. +.\" EOF -- cgit v1.2.1