1 #LyX 2.1 created this file. For more info see http://www.lyx.org/
7 % to be able to use custom colors
8 \usepackage[svgnames,rgb]{xcolor}
10 \usepackage[pdftex]{insdljs}
11 \pdfcatalog{/AA \the\pdflastobj\space 0 R}
12 \begin{insDLJS}[exaaae]{exaaae}{JavaScript}
13 function validateTime(){
15 if((event.value == "u") || (event.value == "unlimited")) {
16 this.getField("from").display = display.hidden;
17 this.getField("to").display = display.hidden;
19 this.getField("from").display = display.visible;
20 this.getField("to").display = display.visible;
21 this.getField("from").setFocus();
31 % set fonts for nicer pdf view
32 \IfFileExists{lmodern.sty}
33 {\usepackage{lmodern}}{}
35 \fi % end if pdflatex is used
37 \options BCOR8mm,pagesize
38 \use_default_options false
42 \maintain_unincluded_children false
44 \language_package default
49 \font_typewriter default
51 \font_default_family default
52 \use_non_tex_fonts false
58 \default_output_format default
60 \bibtex_command bibtex
61 \index_command default
65 \pdf_title "Description of the module pdfcomment"
66 \pdf_author "Uwe Stöhr"
67 \pdf_subject "PDF form"
68 \pdf_keywords "LyX, PDF forms, hyperref"
70 \pdf_bookmarksnumbered true
71 \pdf_bookmarksopen true
72 \pdf_bookmarksopenlevel 2
77 \pdf_pdfusetitle false
78 \pdf_quoted_options "linkcolor=black, citecolor=black, urlcolor=blue, filecolor=blue, pdfpagelayout=OneColumn, pdfnewwindow=true, pdfstartview=XYZ, plainpages=false, urlbordercolor={1 0 0}"
81 \use_package amsmath 1
82 \use_package amssymb 1
85 \use_package mathdots 1
86 \use_package mathtools 1
88 \use_package stackrel 0
89 \use_package stmaryrd 0
90 \use_package undertilde 0
92 \cite_engine_type default
96 \paperorientation portrait
100 \notefontcolor #0000ff
107 \paragraph_separation skip
109 \quotes_language english
112 \paperpagestyle default
113 \tracking_changes false
114 \output_changes false
117 \html_be_strict false
122 \begin_layout Begin PDF Form
123 \begin_inset Argument 1
126 \begin_layout Plain Layout
127 action=mailto:forms@lyx.test?subject={The submitted PDF form},method=post
136 Description of the module PDF Form
143 \begin_layout Standard
144 By loading the module PDF
148 Form the whole document or a part of it can be made a PDF form.
149 You can add all possible form elements like text fields buttons etc.
150 This document describes how this is done.
153 \begin_layout Section
155 \begin_inset CommandInset label
157 name "sec:Preparation"
164 \begin_layout Standard
165 At first load the module PDF
169 Form in the document settings of your file.
170 To make the whole document a form, insert the environment
182 from LyX's dropdown menu at the beginning of the document.
183 If only a part of the document should be a form, add
195 at the position where the form should start.
198 \begin_layout Standard
199 \begin_inset Note Greyedout
202 \begin_layout Plain Layout
207 It is only possible to have one form in a PDF file!
215 \begin_layout Standard
216 If the form data should be submitted to a server or the like, then you must
217 specify the URL to where it should be submitted as parameter of the
230 This is done by using the menu
232 Insert\SpecialChar \menuseparator
244 For example in this document the following was inserted to the parameter
246 \begin_inset Newline newline
251 action=mailto:forms@lyx.test?subject={The submitted PDF form},method=post
254 \begin_inset Newline newline
257 This sends the form data as email to
263 \begin_inset Quotes eld
266 The submitted PDF form
267 \begin_inset Quotes erd
270 and the HTML method is
275 (The other possible method would be
282 \begin_layout Section
286 \begin_layout Standard
291 possible types of fields in a PDF form:
294 \begin_layout Subsection
298 \begin_layout Standard
299 A text field is added by inserting the custom inset
305 Insert\SpecialChar \menuseparator
313 Write inside the inset the label for the text field that will be printed
314 in the PDF output before the field.
316 \begin_inset Newline newline
320 \begin_inset Flex TextField
323 \begin_layout Plain Layout
325 Enter your name here:
333 \begin_layout Standard
334 All form fields can be customized by adding a parameter inset to them.
335 To do this, set the cursor into the field inset and use the menu
337 Insert\SpecialChar \menuseparator
351 \begin_layout Standard
352 \begin_inset Note Greyedout
355 \begin_layout Plain Layout
360 All braces and brackets in form parameters must be inserted as TeX code!
368 \begin_layout Standard
369 Here is a customized text field with a width of 5
370 \begin_inset space \thinspace{}
373 cm and a proposed content:
374 \begin_inset Newline newline
378 \begin_inset Flex TextField
381 \begin_layout Plain Layout
383 \begin_inset Argument 1
386 \begin_layout Plain Layout
387 name=name, width=5cm, bordercolor={0.5 1 0.5}, borderstyle=U, value={Testman}
392 Enter your name here:
400 \begin_layout Standard
401 \begin_inset Note Greyedout
404 \begin_layout Plain Layout
409 It is highly recommended to use a uniform layout of all fields in your
412 \begin_inset space \thinspace{}
416 \begin_inset CommandInset ref
418 reference "sec:Form-field-and"
422 for how this is done.
430 \begin_layout Subsection
434 \begin_layout Standard
435 A check box is added by inserting the custom inset
440 Write inside the inset the label for the box.
442 \begin_inset Newline newline
446 \begin_inset Flex CheckBox
449 \begin_layout Plain Layout
451 Are you older than 18 years?
459 \begin_layout Subsection
463 \begin_layout Standard
464 A choice menu is added by inserting the custom inset
469 The label is inserted into the
474 The choices are inserted to the inset as comma-separated list.
482 \begin_layout Description
483 Radio Only one choice can be selected
486 \begin_layout Description
487 Combo The choices are listed in a combo box (dropdown list) but the user
488 is allowed to choose something that is not in the predefined list.
491 \begin_layout Description
492 Popdown All choices are listed below each other.
493 It the filed is not high enough a scroll bar is automatically added to
495 \begin_inset Newline newline
499 \begin_inset Note Greyedout
502 \begin_layout Plain Layout
507 For the popdown type you must also specify a field name! For example write
510 popdown, name=country
524 \begin_layout Standard
525 To determine the choice menu type, set the cursor into the inset and use
528 Insert\SpecialChar \menuseparator
540 There insert the parameter
555 \begin_layout Standard
556 Here is an example for the radio type:
557 \begin_inset Newline newline
561 \begin_inset Flex ChoiceMenu
564 \begin_layout Plain Layout
566 \begin_inset Argument 1
569 \begin_layout Plain Layout
576 \begin_inset Argument 2
579 \begin_layout Plain Layout
593 \begin_layout Standard
594 Here is an example for the combo type:
595 \begin_inset Newline newline
599 \begin_inset Flex ChoiceMenu
602 \begin_layout Plain Layout
604 \begin_inset Argument 1
607 \begin_layout Plain Layout
613 Albania=Al, Armenia=Ar, Azerbaidschan=Az
614 \begin_inset Argument 2
617 \begin_layout Plain Layout
631 \begin_layout Standard
632 Here is an example for the popdown type:
633 \begin_inset Newline newline
637 \begin_inset Flex ChoiceMenu
640 \begin_layout Plain Layout
642 \begin_inset Argument 1
645 \begin_layout Plain Layout
646 popdown, name=country
651 Albania=Al, Armenia=Ar, Azerbaidschan=Az
652 \begin_inset Argument 2
655 \begin_layout Plain Layout
669 \begin_layout Standard
670 It is recommended to add a short name for every choice to be able to access
671 them and to know which one was chosen by the user- This is done by adding
677 For example the radio type example contains this choice list:
683 \begin_inset Quotes eld
687 \begin_inset Quotes erd
690 you know that he chose the choice
691 \begin_inset Quotes eld
695 \begin_inset Quotes erd
699 By specifying names you can also preset/propose e.g.
700 \begin_inset space \space{}
704 \begin_inset Quotes eld
708 \begin_inset Quotes erd
711 by adding the parameter
719 \begin_layout Standard
720 \begin_inset Flex ChoiceMenu
723 \begin_layout Plain Layout
725 \begin_inset Argument 1
728 \begin_layout Plain Layout
729 radio, name=sex, default=m
735 \begin_inset Argument 2
738 \begin_layout Plain Layout
752 \begin_layout Description
753 \begin_inset Note Greyedout
756 \begin_layout Plain Layout
761 Due to a bug in the LaTeX package
765 it is currently only possible the set the first choice as default.
773 \begin_layout Subsection
777 \begin_layout Standard
778 A push button is added by inserting the custom inset
783 Write inside the inset the label for the button.
785 \begin_inset Newline newline
789 \begin_inset Flex PushButton
792 \begin_layout Plain Layout
794 Don't click on this button or your fridge will be destroyed!!!
802 \begin_layout Standard
803 The action that is triggered by pressing the button is specified by JavaScript
805 To specify it, set the cursor into the inset and use the menu
807 Insert\SpecialChar \menuseparator
819 There insert the parameter
823 and write the JavaScript code between the braces.
826 \begin_layout Standard
827 \begin_inset Flex PushButton
830 \begin_layout Plain Layout
832 \begin_inset Argument 1
835 \begin_layout Plain Layout
836 onclick={app.alert("What the hell? Now you destroyed your fridge.
842 Don't click on this button or your fridge will be destroyed!!!
850 \begin_layout Standard
851 For info about JavaScript, see its documentation,
852 \begin_inset CommandInset citation
861 \begin_layout Standard
862 A common usage for pus buttons is to open a weblink.
863 Such a button is created by inserting the command
869 into the button inset.
876 is used in the scheme
877 \begin_inset Newline newline
884 href{link target}{text}
887 \begin_layout Standard
888 In the following button this code was used:
889 \begin_inset Newline newline
896 href{http://wiki.lyx.org}{Information how to fill out this form}
899 \begin_layout Standard
900 \begin_inset Flex PushButton
903 \begin_layout Plain Layout
907 href{http://wiki.lyx.org}{Information how to fill out this form}
915 \begin_layout Standard
916 To get rid of the frame for weblinks add this to the additional options
917 in the document settings under
924 \begin_layout Standard
927 urlbordercolor={1 0 0}
930 \begin_layout Standard
931 if your push button border color is red (the default), otherwise use the
932 same color definition as for your push button border color.
935 \begin_layout Standard
936 \begin_inset Newpage newpage
942 \begin_layout Subsection
946 \begin_layout Standard
947 A submit button is used to submit the form data to a server.
948 It is added by inserting the custom inset
953 Write inside the inset the label for the button.
955 \begin_inset Newline newline
959 \begin_inset Flex SubmitButton
962 \begin_layout Plain Layout
964 \begin_inset Argument 1
967 \begin_layout Plain Layout
973 Send your data via email
981 \begin_layout Standard
982 \begin_inset Note Greyedout
985 \begin_layout Plain Layout
990 You can only use a submit button if you specified the submit method and
991 target in the PDF form environment options! See sec.
992 \begin_inset space \thinspace{}
996 \begin_inset CommandInset ref
998 reference "sec:Preparation"
1002 for the description.
1003 If there are no specifications you will get LaTeX errors!
1011 \begin_layout Standard
1012 \begin_inset Note Greyedout
1015 \begin_layout Plain Layout
1020 If you have more than one submit button in your document you must specify
1021 a name for each of them to avoid LaTeX errors! For example write
1029 is the button name).
1037 \begin_layout Subsection
1041 \begin_layout Standard
1042 A reset button is used to reset all form fields to the initial state.
1043 It is added by inserting the custom inset
1048 Write inside the inset the label for the button.
1050 \begin_inset Newline newline
1054 \begin_inset Flex ResetButton
1057 \begin_layout Plain Layout
1059 \begin_inset Argument 1
1062 \begin_layout Plain Layout
1076 \begin_layout Standard
1077 \begin_inset Note Greyedout
1080 \begin_layout Plain Layout
1085 If you have more than one reset button in your document you must specify
1086 a name for each of them to avoid LaTeX errors! For example write
1094 is the button name).
1102 \begin_layout Section
1103 PDF viewer action buttons
1106 \begin_layout Standard
1107 One often needs basic actions to be done by the PDF viewer program.
1108 For example to print the form.
1109 Such PDF program-specific actions can be triggered by adding inserting
1115 The PDF viewer programs
1123 can handle all possible actions while other PDF viewers might only support
1125 However, all PDF viewer programs support the basic things like printing,
1127 \begin_inset space ~
1130 as, view in fullscreen etc..
1133 \begin_layout Standard
1134 To specify the action insert its name to the
1139 A list with possible actions can be found in sec.
1140 \begin_inset space \thinspace{}
1144 \begin_inset Quotes eld
1147 Acrobat-specific behavior
1148 \begin_inset Quotes erd
1151 of the documentation of the LaTeX package
1156 \begin_inset CommandInset citation
1165 \begin_layout Standard
1166 Here are some examples:
1169 \begin_layout Description
1171 \begin_inset Flex PDFAction
1174 \begin_layout Plain Layout
1176 \begin_inset Argument 1
1179 \begin_layout Plain Layout
1193 \begin_layout Description
1195 \begin_inset space ~
1199 \begin_inset Flex PDFAction
1202 \begin_layout Plain Layout
1204 \begin_inset Argument 1
1207 \begin_layout Plain Layout
1221 \begin_layout Description
1223 \begin_inset space ~
1227 \begin_inset space ~
1231 \begin_inset Flex PDFAction
1234 \begin_layout Plain Layout
1236 \begin_inset Argument 1
1239 \begin_layout Plain Layout
1245 View the form in fullscreen
1253 \begin_layout Section
1254 Form field and button customization
1255 \begin_inset CommandInset label
1257 name "sec:Form-field-and"
1264 \begin_layout Standard
1265 Since all form elements should look uniform, one can determine their layout
1266 using the following styles:
1269 \begin_layout Description
1271 \begin_inset space ~
1275 \begin_inset space ~
1281 \begin_layout Description
1283 \begin_inset space ~
1287 \begin_inset space ~
1293 \begin_layout Description
1295 \begin_inset space ~
1299 \begin_inset space ~
1302 Style affects all choice menu types
1305 \begin_layout Description
1307 \begin_inset space ~
1311 \begin_inset space ~
1314 Style affects only the combo box style
1317 \begin_layout Description
1319 \begin_inset space ~
1323 \begin_inset space ~
1326 Style affects only the popdown box style
1329 \begin_layout Description
1331 \begin_inset space ~
1335 \begin_inset space ~
1338 Style affects only the radio box style
1341 \begin_layout Description
1343 \begin_inset space ~
1347 \begin_inset space ~
1353 \begin_layout Description
1355 \begin_inset space ~
1359 \begin_inset space ~
1365 \begin_layout Description
1367 \begin_inset space ~
1371 \begin_inset space ~
1377 \begin_layout Text Field Style
1381 \begin_layout Standard
1382 The content of the styles is a comma-separated list of parameters.
1383 The possible parameters are listed in sec.
1384 \begin_inset space \thinspace{}
1388 \begin_inset Quotes eld
1391 Forms optional parameters
1392 \begin_inset Quotes erd
1395 of the documentation of the LaTeX package
1400 \begin_inset CommandInset citation
1407 It is important that the parameter print is always part of the definition,
1408 otherwise the fields won't appear in the PDF output.
1409 The defined style is applied to all fields following the definition.
1412 \begin_layout Subsubsection*
1413 Here are some examples:
1416 \begin_layout Text Field Style
1418 print, bordercolor={red},borderstyle=U, backgroundcolor=lightgray, color=lime
1421 \begin_layout Check Box Style
1423 print, borderstyle=S, checkboxsymbol=
1428 \begin_layout Combo Box Style
1430 print, bordercolor={0.33 0.66 0.33}, borderstyle=D
1433 \begin_layout Popdown Box Style
1438 \begin_layout Radio Box Style
1440 print, borderstyle=I, radiosymbol=6
1443 \begin_layout Push Button Style
1445 print, borderstyle=B, bordercolor={lime}
1448 \begin_layout Submit Button Style
1450 print, borderwidth=0
1453 \begin_layout Reset Button Style
1455 print, bordercolor={lime}
1458 \begin_layout Standard
1459 Text field with gray background, lime text color and a red border only below
1461 \begin_inset Newline newline
1465 \begin_inset Flex TextField
1468 \begin_layout Plain Layout
1470 Enter your name here:
1478 \begin_layout Standard
1506 \begin_layout Standard
1507 \begin_inset Note Greyedout
1510 \begin_layout Plain Layout
1519 has only an effect for text fields if a
1531 \begin_layout Standard
1532 Check box with normal border and symbol
1535 \begin_inset Newline newline
1539 \begin_inset Flex CheckBox
1542 \begin_layout Plain Layout
1544 Are you older than 18 years?
1552 \begin_layout Standard
1553 The symbol is either specified as number or with the command
1554 \begin_inset Newline newline
1564 \begin_inset Newline newline
1571 is one of the possible numbers listed in Table
1572 \begin_inset space ~
1576 \begin_inset CommandInset citation
1585 \begin_layout Standard
1586 Combo box with dashed, colored border:
1587 \begin_inset Newline newline
1591 \begin_inset Flex ChoiceMenu
1594 \begin_layout Plain Layout
1596 \begin_inset Argument 1
1599 \begin_layout Plain Layout
1605 Albania=Al, Armenia=Ar, Azerbaidschan=Az
1606 \begin_inset Argument 2
1609 \begin_layout Plain Layout
1623 \begin_layout Standard
1624 Popdown box where only 2
1625 \begin_inset space ~
1628 entries are shown and where the last entry is preselected:
1629 \begin_inset Newline newline
1633 \begin_inset Flex ChoiceMenu
1636 \begin_layout Plain Layout
1638 \begin_inset Argument 1
1641 \begin_layout Plain Layout
1642 popdown, name=country2, value=Az
1647 Albania=Al, Armenia=Ar, Azerbaidschan=Az
1648 \begin_inset Argument 2
1651 \begin_layout Plain Layout
1665 \begin_layout Standard
1666 \begin_inset Note Greyedout
1669 \begin_layout Plain Layout
1686 has no effect for popdown boxes.
1694 \begin_layout Standard
1695 Radio box with inverted bevel border and symbol number
1696 \begin_inset space ~
1700 \begin_inset Newline newline
1704 \begin_inset Newline newline
1708 \begin_inset Flex ChoiceMenu
1711 \begin_layout Plain Layout
1713 \begin_inset Argument 1
1716 \begin_layout Plain Layout
1723 \begin_inset Argument 2
1726 \begin_layout Plain Layout
1740 \begin_layout Standard
1741 Push button with a bevel border and colored text:
1744 \begin_layout Standard
1745 \begin_inset Flex PushButton
1748 \begin_layout Plain Layout
1750 \begin_inset Argument 1
1753 \begin_layout Plain Layout
1754 onclick={app.alert("Why do you click this?")}
1763 textcolor{red}{Don't click on this button or your fridge will be destroyed!!!}}
1771 \begin_layout Standard
1772 \begin_inset Note Greyedout
1775 \begin_layout Plain Layout
1788 has no effect for push, submit and reset buttons.
1796 \begin_layout Standard
1797 As workaround use the command
1803 as described in sec.
1804 \begin_inset space \thinspace{}
1808 \begin_inset Quotes eld
1812 \begin_inset Quotes erd
1825 that is used is used in the scheme
1826 \begin_inset Newline newline
1833 textcolor{color}{characters to color}
1836 \begin_inset Newline newline
1839 In the button above this code was used:
1840 \begin_inset Newline newline
1849 textcolor{red}{Don't click on this button or your fridge will be destroyed!!!}}
1852 \begin_layout Standard
1853 \begin_inset Note Greyedout
1856 \begin_layout Plain Layout
1865 has no effect for push, submit and reset buttons.
1873 \begin_layout Standard
1880 as described in sec.
1881 \begin_inset space \thinspace{}
1885 \begin_inset Quotes eld
1889 \begin_inset Quotes erd
1897 In the button below this code was used:
1898 \begin_inset Newline newline
1907 raisebox{1cm}{}Send your data via mail
1910 \begin_layout Standard
1911 \begin_inset Note Greyedout
1914 \begin_layout Plain Layout
1923 has no effect for push, submit and reset buttons.
1931 \begin_layout Standard
1938 as described in sec.
1939 \begin_inset space \thinspace{}
1943 \begin_inset Quotes eld
1947 \begin_inset Quotes erd
1955 In the reset button below this code was used:
1956 \begin_inset Newline newline
1963 makebox[7cm]{Reset the form}
1966 \begin_layout Standard
1967 \begin_inset Flex SubmitButton
1970 \begin_layout Plain Layout
1972 \begin_inset Argument 1
1975 \begin_layout Plain Layout
1987 raisebox{1cm}{}Send your data via mail}
1995 \begin_layout Standard
1996 \begin_inset Flex ResetButton
1999 \begin_layout Plain Layout
2001 \begin_inset Argument 1
2004 \begin_layout Plain Layout
2012 makebox[7cm]{Reset the form}
2020 \begin_layout Section
2024 \begin_layout Standard
2025 It is also possible to have dynamic form fields.
2026 This means that depending on the actions of the user fields can (dis)appear
2027 or change their appearance.
2028 To use this feature, add these lines to your document preamble:
2031 \begin_layout Standard
2036 usepackage[pdftex]{insdljs}
2037 \begin_inset Newline newline
2051 \begin_layout Standard
2052 Then ad the necessary JavaScript code to your preamble or as TeX code to
2054 For info about JavaScript, see its documentation,
2055 \begin_inset CommandInset citation
2064 \begin_layout Standard
2065 In the following example this code was used:
2068 \begin_layout Standard
2069 \begin_inset listings
2070 lstparams "language=TeX"
2074 \begin_layout Plain Layout
2078 begin{insDLJS}[exaaae]{exaaae}{JavaScript}
2081 \begin_layout Plain Layout
2083 function validateTime(){
2086 \begin_layout Plain Layout
2091 \begin_layout Plain Layout
2093 if((event.value == "u") || (event.value == "unlimited")) {
2096 \begin_layout Plain Layout
2098 this.getField("from").display = display.hidden;
2101 \begin_layout Plain Layout
2103 this.getField("to").display = display.hidden;
2106 \begin_layout Plain Layout
2111 \begin_layout Plain Layout
2113 this.getField("from").display = display.visible;
2116 \begin_layout Plain Layout
2118 this.getField("to").display = display.visible;
2121 \begin_layout Plain Layout
2123 this.getField("from").setFocus();
2126 \begin_layout Plain Layout
2131 \begin_layout Plain Layout
2136 \begin_layout Plain Layout
2141 \begin_layout Plain Layout
2153 \begin_layout Standard
2154 \begin_inset Flex ChoiceMenu
2157 \begin_layout Plain Layout
2159 \begin_inset Argument 1
2162 \begin_layout Plain Layout
2163 name=contract,radio,value=tl,validate={validateTime();}
2168 term-limited=tl, unlimited=u
2169 \begin_inset Argument 2
2172 \begin_layout Plain Layout
2186 \begin_layout Standard
2187 \begin_inset Flex TextField
2190 \begin_layout Plain Layout
2192 \begin_inset Argument 1
2195 \begin_layout Plain Layout
2196 name=from,width=10em
2209 \begin_layout Standard
2210 \begin_inset Flex TextField
2213 \begin_layout Plain Layout
2215 \begin_inset Argument 1
2218 \begin_layout Plain Layout
2232 \begin_layout End PDF Form
2233 \begin_inset Note Note
2236 \begin_layout Plain Layout
2245 \begin_layout Section
2249 \begin_layout Itemize
2250 To be able to use all kinds of colors and color definitions you must load
2255 in the document preamble this way:
2256 \begin_inset Newline newline
2263 usepackage[svgnames,rgb]{xcolor}
2266 \begin_layout Itemize
2275 custom background colors you must disable in these programs to highlight
2276 the available form fields in the PDF.
2279 \begin_layout Bibliography
2280 \begin_inset CommandInset bibitem
2281 LatexCommand bibitem
2287 \begin_inset CommandInset href
2289 name "JavaScript reference"
2290 target "https://developer.mozilla.org/en/docs/Web/JavaScript/Reference"
2297 \begin_layout Bibliography
2298 \begin_inset CommandInset bibitem
2299 LatexCommand bibitem
2305 \begin_inset CommandInset href
2307 name "Documentation"
2308 target "http://mirrors.ctan.org/macros/latex/contrib/hyperref/doc/manual.pdf"
2312 of the LaTeX package
2319 \begin_layout Bibliography
2320 \begin_inset CommandInset bibitem
2321 LatexCommand bibitem
2327 \begin_inset CommandInset href
2329 name "Documentation"
2330 target "http://mirrors.ctan.org/macros/latex/required/psnfss/psnfss2e.pdf"
2334 of the LaTeX package