summaryrefslogtreecommitdiffstats
path: root/tmac/refer.tmac
diff options
context:
space:
mode:
Diffstat (limited to 'tmac/refer.tmac')
-rw-r--r--tmac/refer.tmac362
1 files changed, 362 insertions, 0 deletions
diff --git a/tmac/refer.tmac b/tmac/refer.tmac
new file mode 100644
index 0000000..a5df6da
--- /dev/null
+++ b/tmac/refer.tmac
@@ -0,0 +1,362 @@
+.\" refer.tmac
+.\"
+.\" This is an interface to 'refer', originally part of 's.tmac'.
+.\"
+.\" Copyright (C) 2011-2020 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
+.\" <http://www.gnu.org/licenses/>.
+.\"
+.\" Please send comments to groff@gnu.org.
+.
+.do nr *groff_refer_tmac_C \n[.cp]
+.cp 0
+.
+.
+.\" The following macros must be defined:
+.\"
+.\" ref*error -- print an error message (in $1)
+.\"
+.\" ref*text-label-start -- start a reference in text
+.\" (formatted reference # in $1)
+.\" ref*text-label-end -- end a reference in text
+.\"
+.\" ref*biblio-item-start -- a reference item with label
+.\" (in $1) 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" -- bk title of article
+.\" ref*spec!D "" " " "(" ")" -- date of publication
+.\" ref*spec!E , " " "ed. " -- editor
+.\" ref*spec!G "" " " "(" ")" -- US Gov. ordering #
+.\" 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
+.
+.
+.if d ref*normal-print .nx
+.
+.\" start of reference
+.de ]-
+. ref*reset
+. 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*reset
+. rm [A [B [C [D [E [G [I [J [N [O [P [Q [R [S [T [V
+. rm ref*string
+..
+.
+.
+.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
+..
+.
+.
+.cp \n[*groff_refer_tmac_C]
+.do rr *groff_refer_tmac_C
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72: