summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>2003-04-15 18:00:21 +0000
committerJarkko Hietaniemi <jhi@iki.fi>2003-04-15 18:00:21 +0000
commit7e2c3868e4a7eef3080ba50609c91634f388dd28 (patch)
tree16dc3ca722b8fb41f5141662bc5fcb435313dc3c /lib
parent89ce900eda0d02d1ff257a7fce57f50efc6bcff3 (diff)
downloadperl-7e2c3868e4a7eef3080ba50609c91634f388dd28.tar.gz
Upgrade to Pod::LaTeX 0.55.
p4raw-id: //depot/perl@19226
Diffstat (limited to 'lib')
-rw-r--r--lib/Pod/LaTeX.pm545
-rw-r--r--lib/Pod/t/pod2latex.t (renamed from lib/Pod/t/latex.t)65
2 files changed, 402 insertions, 208 deletions
diff --git a/lib/Pod/LaTeX.pm b/lib/Pod/LaTeX.pm
index 1f958b5981..6979666e9b 100644
--- a/lib/Pod/LaTeX.pm
+++ b/lib/Pod/LaTeX.pm
@@ -33,7 +33,7 @@ use Carp;
use vars qw/ $VERSION %HTML_Escapes @LatexSections /;
-$VERSION = '0.54';
+$VERSION = '0.55';
# Definitions of =headN -> latex mapping
@LatexSections = (qw/
@@ -45,176 +45,316 @@ $VERSION = '0.54';
subparagraph
/);
-# Standard escape sequences converted to Latex
-# Up to "yuml" these are taken from the original pod2latex
-# command written by Taro Kawagish (kawagish@imslab.co.jp)
-
+# Standard escape sequences converted to Latex.
+# The Unicode name of each character is given in the comments.
+# Complete LaTeX set added by Peter Acklam.
%HTML_Escapes = (
- # lt, gt and verbar are inserted without math mode
- # since the $$ will be added during general correction
- # for those escape characters
- 'amp' => '\&', # ampersand
- 'lt' => '<', # ' left chevron, less-than
- 'gt' => '>', # ' right chevron, greater-than
- 'quot' => '"', # double quote
- 'sol' => '/',
- 'verbar' => '|',
-
- "Aacute" => "\\'{A}", # capital A, acute accent
- "aacute" => "\\'{a}", # small a, acute accent
- "Acirc" => "\\^{A}", # capital A, circumflex accent
- "acirc" => "\\^{a}", # small a, circumflex accent
- "AElig" => '\\AE', # capital AE diphthong (ligature)
- "aelig" => '\\ae', # small ae diphthong (ligature)
- "Agrave" => "\\`{A}", # capital A, grave accent
- "agrave" => "\\`{a}", # small a, grave accent
- "Aring" => '\\u{A}', # capital A, ring
- "aring" => '\\u{a}', # small a, ring
- "Atilde" => '\\~{A}', # capital A, tilde
- "atilde" => '\\~{a}', # small a, tilde
- "Auml" => '\\"{A}', # capital A, dieresis or umlaut mark
- "auml" => '\\"{a}', # small a, dieresis or umlaut mark
- "Ccedil" => '\\c{C}', # capital C, cedilla
- "ccedil" => '\\c{c}', # small c, cedilla
- "Eacute" => "\\'{E}", # capital E, acute accent
- "eacute" => "\\'{e}", # small e, acute accent
- "Ecirc" => "\\^{E}", # capital E, circumflex accent
- "ecirc" => "\\^{e}", # small e, circumflex accent
- "Egrave" => "\\`{E}", # capital E, grave accent
- "egrave" => "\\`{e}", # small e, grave accent
- "ETH" => '\\OE', # capital Eth, Icelandic
- "eth" => '\\oe', # small eth, Icelandic
- "Euml" => '\\"{E}', # capital E, dieresis or umlaut mark
- "euml" => '\\"{e}', # small e, dieresis or umlaut mark
- "Iacute" => "\\'{I}", # capital I, acute accent
- "iacute" => "\\'{i}", # small i, acute accent
- "Icirc" => "\\^{I}", # capital I, circumflex accent
- "icirc" => "\\^{i}", # small i, circumflex accent
- "Igrave" => "\\`{I}", # capital I, grave accent
- "igrave" => "\\`{i}", # small i, grave accent
- "Iuml" => '\\"{I}', # capital I, dieresis or umlaut mark
- "iuml" => '\\"{i}', # small i, dieresis or umlaut mark
- "Ntilde" => '\\~{N}', # capital N, tilde
- "ntilde" => '\\~{n}', # small n, tilde
- "Oacute" => "\\'{O}", # capital O, acute accent
- "oacute" => "\\'{o}", # small o, acute accent
- "Ocirc" => "\\^{O}", # capital O, circumflex accent
- "ocirc" => "\\^{o}", # small o, circumflex accent
- "Ograve" => "\\`{O}", # capital O, grave accent
- "ograve" => "\\`{o}", # small o, grave accent
- "Oslash" => "\\O", # capital O, slash
- "oslash" => "\\o", # small o, slash
- "Otilde" => "\\~{O}", # capital O, tilde
- "otilde" => "\\~{o}", # small o, tilde
- "Ouml" => '\\"{O}', # capital O, dieresis or umlaut mark
- "ouml" => '\\"{o}', # small o, dieresis or umlaut mark
- "szlig" => '\\ss{}', # small sharp s, German (sz ligature)
- "THORN" => '\\L', # capital THORN, Icelandic
- "thorn" => '\\l',, # small thorn, Icelandic
- "Uacute" => "\\'{U}", # capital U, acute accent
- "uacute" => "\\'{u}", # small u, acute accent
- "Ucirc" => "\\^{U}", # capital U, circumflex accent
- "ucirc" => "\\^{u}", # small u, circumflex accent
- "Ugrave" => "\\`{U}", # capital U, grave accent
- "ugrave" => "\\`{u}", # small u, grave accent
- "Uuml" => '\\"{U}', # capital U, dieresis or umlaut mark
- "uuml" => '\\"{u}', # small u, dieresis or umlaut mark
- "Yacute" => "\\'{Y}", # capital Y, acute accent
- "yacute" => "\\'{y}", # small y, acute accent
- "yuml" => '\\"{y}', # small y, dieresis or umlaut mark
-
- # Added by TimJ
-
- "iexcl" => '!`', # inverted exclamation mark
-# "cent" => ' ', # cent sign
- "pound" => '\pounds', # (UK) pound sign
-# "curren" => ' ', # currency sign
-# "yen" => ' ', # yen sign
-# "brvbar" => ' ', # broken vertical bar
- "sect" => '\S', # section sign
- "uml" => '\"{}', # diaresis
- "copy" => '\copyright', # Copyright symbol
-# "ordf" => ' ', # feminine ordinal indicator
- "laquo" => '$\ll$', # ' # left pointing double angle quotation mark
- "not" => '$\neg$', # ' # not sign
- "shy" => '-', # soft hyphen
-# "reg" => ' ', # registered trademark
- "macr" => '$^-$', # ' # macron, overline
- "deg" => '$^\circ$', # ' # degree sign
- "plusmn" => '$\pm$', # ' # plus-minus sign
- "sup2" => '$^2$', # ' # superscript 2
- "sup3" => '$^3$', # ' # superscript 3
- "acute" => "\\'{}", # acute accent
- "micro" => '$\mu$', # micro sign
- "para" => '\P', # pilcrow sign = paragraph sign
- "middot" => '$\cdot$', # middle dot = Georgian comma
- "cedil" => '\c{}', # cedilla
- "sup1" => '$^1$', # ' # superscript 1
-# "ordm" => ' ', # masculine ordinal indicator
- "raquo" => '$\gg$', # ' # right pointing double angle quotation mark
- "frac14" => '$\frac{1}{4}$', # ' # vulgar fraction one quarter
- "frac12" => '$\frac{1}{2}$', # ' # vulgar fraction one half
- "frac34" => '$\frac{3}{4}$', # ' # vulgar fraction three quarters
- "iquest" => "?'", # inverted question mark
- "times" => '$\times$', # ' # multiplication sign
- "divide" => '$\div$', # division sign
-
- # Greek letters using HTML codes
- "alpha" => '$\alpha$', # '
- "beta" => '$\beta$', # '
- "gamma" => '$\gamma$', # '
- "delta" => '$\delta$', # '
- "epsilon"=> '$\epsilon$', # '
- "zeta" => '$\zeta$', # '
- "eta" => '$\eta$', # '
- "theta" => '$\theta$', # '
- "iota" => '$\iota$', # '
- "kappa" => '$\kappa$', # '
- "lambda" => '$\lambda$', # '
- "mu" => '$\mu$', # '
- "nu" => '$\nu$', # '
- "xi" => '$\xi$', # '
- "omicron"=> '$o$', # '
- "pi" => '$\pi$', # '
- "rho" => '$\rho$', # '
- "sigma" => '$\sigma$', # '
- "tau" => '$\tau$', # '
- "upsilon"=> '$\upsilon$', # '
- "phi" => '$\phi$', # '
- "chi" => '$\chi$', # '
- "psi" => '$\psi$', # '
- "omega" => '$\omega$', # '
-
- "Alpha" => '$A$', # '
- "Beta" => '$B$', # '
- "Gamma" => '$\Gamma$', # '
- "Delta" => '$\Delta$', # '
- "Epsilon"=> '$E$', # '
- "Zeta" => '$Z$', # '
- "Eta" => '$H$', # '
- "Theta" => '$\Theta$', # '
- "Iota" => '$I$', # '
- "Kappa" => '$K$', # '
- "Lambda" => '$\Lambda$', # '
- "Mu" => '$M$', # '
- "Nu" => '$N$', # '
- "Xi" => '$\Xi$', # '
- "Omicron"=> '$O$', # '
- "Pi" => '$\Pi$', # '
- "Rho" => '$R$', # '
- "Sigma" => '$\Sigma$', # '
- "Tau" => '$T$', # '
- "Upsilon"=> '$\Upsilon$', # '
- "Phi" => '$\Phi$', # '
- "Chi" => '$X$', # '
- "Psi" => '$\Psi$', # '
- "Omega" => '$\Omega$', # '
-
-
+ 'sol' => '\textfractionsolidus{}', # xxx - or should it be just '/'
+ 'verbar' => '|',
+
+ # The stuff below is based on the information available at
+ # http://www.w3.org/TR/html401/sgml/entities.html
+
+ # All characters in the range 0xA0-0xFF of the ISO 8859-1 character set.
+ # Several of these characters require the `textcomp' LaTeX package.
+ 'nbsp' => q|~|, # 0xA0 - no-break space = non-breaking space
+ 'iexcl' => q|\textexclamdown{}|, # 0xA1 - inverted exclamation mark
+ 'cent' => q|\textcent{}|, # 0xA2 - cent sign
+ 'pound' => q|\textsterling{}|, # 0xA3 - pound sign
+ 'curren' => q|\textcurrency{}|, # 0xA4 - currency sign
+ 'yen' => q|\textyen{}|, # 0xA5 - yen sign = yuan sign
+ 'brvbar' => q|\textbrokenbar{}|, # 0xA6 - broken bar = broken vertical bar
+ 'sect' => q|\textsection{}|, # 0xA7 - section sign
+ 'uml' => q|\textasciidieresis{}|, # 0xA8 - diaeresis = spacing diaeresis
+ 'copy' => q|\textcopyright{}|, # 0xA9 - copyright sign
+ 'ordf' => q|\textordfeminine{}|, # 0xAA - feminine ordinal indicator
+ 'laquo' => q|\guillemotleft{}|, # 0xAB - left-pointing double angle quotation mark = left pointing guillemet
+ 'not' => q|\textlnot{}|, # 0xAC - not sign
+ 'shy' => q|\-|, # 0xAD - soft hyphen = discretionary hyphen
+ 'reg' => q|\textregistered{}|, # 0xAE - registered sign = registered trade mark sign
+ 'macr' => q|\textasciimacron{}|, # 0xAF - macron = spacing macron = overline = APL overbar
+ 'deg' => q|\textdegree{}|, # 0xB0 - degree sign
+ 'plusmn' => q|\textpm{}|, # 0xB1 - plus-minus sign = plus-or-minus sign
+ 'sup2' => q|\texttwosuperior{}|, # 0xB2 - superscript two = superscript digit two = squared
+ 'sup3' => q|\textthreesuperior{}|, # 0xB3 - superscript three = superscript digit three = cubed
+ 'acute' => q|\textasciiacute{}|, # 0xB4 - acute accent = spacing acute
+ 'micro' => q|\textmu{}|, # 0xB5 - micro sign
+ 'para' => q|\textparagraph{}|, # 0xB6 - pilcrow sign = paragraph sign
+ 'middot' => q|\textperiodcentered{}|, # 0xB7 - middle dot = Georgian comma = Greek middle dot
+ 'cedil' => q|\c{}|, # 0xB8 - cedilla = spacing cedilla
+ 'sup1' => q|\textonesuperior{}|, # 0xB9 - superscript one = superscript digit one
+ 'ordm' => q|\textordmasculine{}|, # 0xBA - masculine ordinal indicator
+ 'raquo' => q|\guillemotright{}|, # 0xBB - right-pointing double angle quotation mark = right pointing guillemet
+ 'frac14' => q|\textonequarter{}|, # 0xBC - vulgar fraction one quarter = fraction one quarter
+ 'frac12' => q|\textonehalf{}|, # 0xBD - vulgar fraction one half = fraction one half
+ 'frac34' => q|\textthreequarters{}|, # 0xBE - vulgar fraction three quarters = fraction three quarters
+ 'iquest' => q|\textquestiondown{}|, # 0xBF - inverted question mark = turned question mark
+ 'Agrave' => q|\`A|, # 0xC0 - latin capital letter A with grave = latin capital letter A grave
+ 'Aacute' => q|\'A|, # 0xC1 - latin capital letter A with acute
+ 'Acirc' => q|\^A|, # 0xC2 - latin capital letter A with circumflex
+ 'Atilde' => q|\~A|, # 0xC3 - latin capital letter A with tilde
+ 'Auml' => q|\"A|, # 0xC4 - latin capital letter A with diaeresis
+ 'Aring' => q|\AA{}|, # 0xC5 - latin capital letter A with ring above = latin capital letter A ring
+ 'AElig' => q|\AE{}|, # 0xC6 - latin capital letter AE = latin capital ligature AE
+ 'Ccedil' => q|\c{C}|, # 0xC7 - latin capital letter C with cedilla
+ 'Egrave' => q|\`E|, # 0xC8 - latin capital letter E with grave
+ 'Eacute' => q|\'E|, # 0xC9 - latin capital letter E with acute
+ 'Ecirc' => q|\^E|, # 0xCA - latin capital letter E with circumflex
+ 'Euml' => q|\"E|, # 0xCB - latin capital letter E with diaeresis
+ 'Igrave' => q|\`I|, # 0xCC - latin capital letter I with grave
+ 'Iacute' => q|\'I|, # 0xCD - latin capital letter I with acute
+ 'Icirc' => q|\^I|, # 0xCE - latin capital letter I with circumflex
+ 'Iuml' => q|\"I|, # 0xCF - latin capital letter I with diaeresis
+ 'ETH' => q|\DH{}|, # 0xD0 - latin capital letter ETH
+ 'Ntilde' => q|\~N|, # 0xD1 - latin capital letter N with tilde
+ 'Ograve' => q|\`O|, # 0xD2 - latin capital letter O with grave
+ 'Oacute' => q|\'O|, # 0xD3 - latin capital letter O with acute
+ 'Ocirc' => q|\^O|, # 0xD4 - latin capital letter O with circumflex
+ 'Otilde' => q|\~O|, # 0xD5 - latin capital letter O with tilde
+ 'Ouml' => q|\"O|, # 0xD6 - latin capital letter O with diaeresis
+ 'times' => q|\texttimes{}|, # 0xD7 - multiplication sign
+ 'Oslash' => q|\O{}|, # 0xD8 - latin capital letter O with stroke = latin capital letter O slash
+ 'Ugrave' => q|\`U|, # 0xD9 - latin capital letter U with grave
+ 'Uacute' => q|\'U|, # 0xDA - latin capital letter U with acute
+ 'Ucirc' => q|\^U|, # 0xDB - latin capital letter U with circumflex
+ 'Uuml' => q|\"U|, # 0xDC - latin capital letter U with diaeresis
+ 'Yacute' => q|\'Y|, # 0xDD - latin capital letter Y with acute
+ 'THORN' => q|\TH{}|, # 0xDE - latin capital letter THORN
+ 'szlig' => q|\ss{}|, # 0xDF - latin small letter sharp s = ess-zed
+ 'agrave' => q|\`a|, # 0xE0 - latin small letter a with grave = latin small letter a grave
+ 'aacute' => q|\'a|, # 0xE1 - latin small letter a with acute
+ 'acirc' => q|\^a|, # 0xE2 - latin small letter a with circumflex
+ 'atilde' => q|\~a|, # 0xE3 - latin small letter a with tilde
+ 'auml' => q|\"a|, # 0xE4 - latin small letter a with diaeresis
+ 'aring' => q|\aa{}|, # 0xE5 - latin small letter a with ring above = latin small letter a ring
+ 'aelig' => q|\ae{}|, # 0xE6 - latin small letter ae = latin small ligature ae
+ 'ccedil' => q|\c{c}|, # 0xE7 - latin small letter c with cedilla
+ 'egrave' => q|\`e|, # 0xE8 - latin small letter e with grave
+ 'eacute' => q|\'e|, # 0xE9 - latin small letter e with acute
+ 'ecirc' => q|\^e|, # 0xEA - latin small letter e with circumflex
+ 'euml' => q|\"e|, # 0xEB - latin small letter e with diaeresis
+ 'igrave' => q|\`i|, # 0xEC - latin small letter i with grave
+ 'iacute' => q|\'i|, # 0xED - latin small letter i with acute
+ 'icirc' => q|\^i|, # 0xEE - latin small letter i with circumflex
+ 'iuml' => q|\"i|, # 0xEF - latin small letter i with diaeresis
+ 'eth' => q|\dh{}|, # 0xF0 - latin small letter eth
+ 'ntilde' => q|\~n|, # 0xF1 - latin small letter n with tilde
+ 'ograve' => q|\`o|, # 0xF2 - latin small letter o with grave
+ 'oacute' => q|\'o|, # 0xF3 - latin small letter o with acute
+ 'ocirc' => q|\^o|, # 0xF4 - latin small letter o with circumflex
+ 'otilde' => q|\~o|, # 0xF5 - latin small letter o with tilde
+ 'ouml' => q|\"o|, # 0xF6 - latin small letter o with diaeresis
+ 'divide' => q|\textdiv{}|, # 0xF7 - division sign
+ 'oslash' => q|\o{}|, # 0xF8 - latin small letter o with stroke, = latin small letter o slash
+ 'ugrave' => q|\`u|, # 0xF9 - latin small letter u with grave
+ 'uacute' => q|\'u|, # 0xFA - latin small letter u with acute
+ 'ucirc' => q|\^u|, # 0xFB - latin small letter u with circumflex
+ 'uuml' => q|\"u|, # 0xFC - latin small letter u with diaeresis
+ 'yacute' => q|\'y|, # 0xFD - latin small letter y with acute
+ 'thorn' => q|\th{}|, # 0xFE - latin small letter thorn
+ 'yuml' => q|\"y|, # 0xFF - latin small letter y with diaeresis
+
+ # Latin Extended-B
+ 'fnof' => q|\textflorin{}|, # latin small f with hook = function = florin
+
+ # Greek
+ 'Alpha' => q|$\mathrm{A}$|, # greek capital letter alpha
+ 'Beta' => q|$\mathrm{B}$|, # greek capital letter beta
+ 'Gamma' => q|$\Gamma$|, # greek capital letter gamma
+ 'Delta' => q|$\Delta$|, # greek capital letter delta
+ 'Epsilon' => q|$\mathrm{E}$|, # greek capital letter epsilon
+ 'Zeta' => q|$\mathrm{Z}$|, # greek capital letter zeta
+ 'Eta' => q|$\mathrm{H}$|, # greek capital letter eta
+ 'Theta' => q|$\Theta$|, # greek capital letter theta
+ 'Iota' => q|$\mathrm{I}$|, # greek capital letter iota
+ 'Kappa' => q|$\mathrm{K}$|, # greek capital letter kappa
+ 'Lambda' => q|$\Lambda$|, # greek capital letter lambda
+ 'Mu' => q|$\mathrm{M}$|, # greek capital letter mu
+ 'Nu' => q|$\mathrm{N}$|, # greek capital letter nu
+ 'Xi' => q|$\Xi$|, # greek capital letter xi
+ 'Omicron' => q|$\mathrm{O}$|, # greek capital letter omicron
+ 'Pi' => q|$\Pi$|, # greek capital letter pi
+ 'Rho' => q|$\mathrm{R}$|, # greek capital letter rho
+ 'Sigma' => q|$\Sigma$|, # greek capital letter sigma
+ 'Tau' => q|$\mathrm{T}$|, # greek capital letter tau
+ 'Upsilon' => q|$\Upsilon$|, # greek capital letter upsilon
+ 'Phi' => q|$\Phi$|, # greek capital letter phi
+ 'Chi' => q|$\mathrm{X}$|, # greek capital letter chi
+ 'Psi' => q|$\Psi$|, # greek capital letter psi
+ 'Omega' => q|$\Omega$|, # greek capital letter omega
+
+ 'alpha' => q|$\alpha$|, # greek small letter alpha
+ 'beta' => q|$\beta$|, # greek small letter beta
+ 'gamma' => q|$\gamma$|, # greek small letter gamma
+ 'delta' => q|$\delta$|, # greek small letter delta
+ 'epsilon' => q|$\epsilon$|, # greek small letter epsilon
+ 'zeta' => q|$\zeta$|, # greek small letter zeta
+ 'eta' => q|$\eta$|, # greek small letter eta
+ 'theta' => q|$\theta$|, # greek small letter theta
+ 'iota' => q|$\iota$|, # greek small letter iota
+ 'kappa' => q|$\kappa$|, # greek small letter kappa
+ 'lambda' => q|$\lambda$|, # greek small letter lambda
+ 'mu' => q|$\mu$|, # greek small letter mu
+ 'nu' => q|$\nu$|, # greek small letter nu
+ 'xi' => q|$\xi$|, # greek small letter xi
+ 'omicron' => q|$o$|, # greek small letter omicron
+ 'pi' => q|$\pi$|, # greek small letter pi
+ 'rho' => q|$\rho$|, # greek small letter rho
+# 'sigmaf' => q||, # greek small letter final sigma
+ 'sigma' => q|$\sigma$|, # greek small letter sigma
+ 'tau' => q|$\tau$|, # greek small letter tau
+ 'upsilon' => q|$\upsilon$|, # greek small letter upsilon
+ 'phi' => q|$\phi$|, # greek small letter phi
+ 'chi' => q|$\chi$|, # greek small letter chi
+ 'psi' => q|$\psi$|, # greek small letter psi
+ 'omega' => q|$\omega$|, # greek small letter omega
+# 'thetasym' => q||, # greek small letter theta symbol
+# 'upsih' => q||, # greek upsilon with hook symbol
+# 'piv' => q||, # greek pi symbol
+
+ # General Punctuation
+ 'bull' => q|\textbullet{}|, # bullet = black small circle
+ # bullet is NOT the same as bullet operator
+ 'hellip' => q|\textellipsis{}|, # horizontal ellipsis = three dot leader
+ 'prime' => q|\textquotesingle{}|, # prime = minutes = feet
+ 'Prime' => q|\textquotedbl{}|, # double prime = seconds = inches
+ 'oline' => q|\textasciimacron{}|, # overline = spacing overscore
+ 'frasl' => q|\textfractionsolidus{}|, # fraction slash
+
+ # Letterlike Symbols
+ 'weierp' => q|$\wp$|, # script capital P = power set = Weierstrass p
+ 'image' => q|$\Re$|, # blackletter capital I = imaginary part
+ 'real' => q|$\Im$|, # blackletter capital R = real part symbol
+ 'trade' => q|\texttrademark{}|, # trade mark sign
+# 'alefsym' => q||, # alef symbol = first transfinite cardinal
+ # alef symbol is NOT the same as hebrew letter alef, although the same
+ # glyph could be used to depict both characters
+
+ # Arrows
+ 'larr' => q|\textleftarrow{}|, # leftwards arrow
+ 'uarr' => q|\textuparrow{}|, # upwards arrow
+ 'rarr' => q|\textrightarrow{}|, # rightwards arrow
+ 'darr' => q|\textdownarrow{}|, # downwards arrow
+ 'harr' => q|$\leftrightarrow$|, # left right arrow
+# 'crarr' => q||, # downwards arrow with corner leftwards = carriage return
+ 'lArr' => q|$\Leftarrow$|, # leftwards double arrow
+ # ISO 10646 does not say that lArr is the same as the 'is implied by'
+ # arrow but also does not have any other character for that function. So
+ # lArr can be used for 'is implied by' as ISOtech suggests
+ 'uArr' => q|$\Uparrow$|, # upwards double arrow
+ 'rArr' => q|$\Rightarrow$|, # rightwards double arrow
+ # ISO 10646 does not say this is the 'implies' character but does not
+ # have another character with this function so ? rArr can be used for
+ # 'implies' as ISOtech suggests
+ 'dArr' => q|$\Downarrow$|, # downwards double arrow
+ 'hArr' => q|$\Leftrightarrow$|, # left right double arrow
+
+ # Mathematical Operators.
+ # Some of these require the `amssymb' package.
+ 'forall' => q|$\forall$|, # for all
+ 'part' => q|$\partial$|, # partial differential
+ 'exist' => q|$\exists$|, # there exists
+ 'empty' => q|$\emptyset$|, # empty set = null set = diameter
+ 'nabla' => q|$\nabla$|, # nabla = backward difference
+ 'isin' => q|$\in$|, # element of
+ 'notin' => q|$\notin$|, # not an element of
+ 'ni' => q|$\ni$|, # contains as member
+ 'prod' => q|$\prod$|, # n-ary product = product sign
+ # prod is NOT the same character as 'greek capital letter pi' though the
+ # same glyph might be used for both
+ 'sum' => q|$\sum$|, # n-ary sumation
+ # sum is NOT the same character as 'greek capital letter sigma' though
+ # the same glyph might be used for both
+ 'minus' => q|$-$|, # minus sign
+ 'lowast' => q|$\ast$|, # asterisk operator
+ 'radic' => q|$\surd$|, # square root = radical sign
+ 'prop' => q|$\propto$|, # proportional to
+ 'infin' => q|$\infty$|, # infinity
+ 'ang' => q|$\angle$|, # angle
+ 'and' => q|$\wedge$|, # logical and = wedge
+ 'or' => q|$\vee$|, # logical or = vee
+ 'cap' => q|$\cap$|, # intersection = cap
+ 'cup' => q|$\cup$|, # union = cup
+ 'int' => q|$\int$|, # integral
+ 'there4' => q|$\therefore$|, # therefore
+ 'sim' => q|$\sim$|, # tilde operator = varies with = similar to
+ # tilde operator is NOT the same character as the tilde
+ 'cong' => q|$\cong$|, # approximately equal to
+ 'asymp' => q|$\asymp$|, # almost equal to = asymptotic to
+ 'ne' => q|$\neq$|, # not equal to
+ 'equiv' => q|$\equiv$|, # identical to
+ 'le' => q|$\leq$|, # less-than or equal to
+ 'ge' => q|$\geq$|, # greater-than or equal to
+ 'sub' => q|$\subset$|, # subset of
+ 'sup' => q|$\supset$|, # superset of
+ # note that nsup, 'not a superset of' is not covered by the Symbol font
+ # encoding and is not included.
+ 'nsub' => q|$\not\subset$|, # not a subset of
+ 'sube' => q|$\subseteq$|, # subset of or equal to
+ 'supe' => q|$\supseteq$|, # superset of or equal to
+ 'oplus' => q|$\oplus$|, # circled plus = direct sum
+ 'otimes' => q|$\otimes$|, # circled times = vector product
+ 'perp' => q|$\perp$|, # up tack = orthogonal to = perpendicular
+ 'sdot' => q|$\cdot$|, # dot operator
+ # dot operator is NOT the same character as middle dot
+
+ # Miscellaneous Technical
+ 'lceil' => q|$\lceil$|, # left ceiling = apl upstile
+ 'rceil' => q|$\rceil$|, # right ceiling
+ 'lfloor' => q|$\lfloor$|, # left floor = apl downstile
+ 'rfloor' => q|$\rfloor$|, # right floor
+ 'lang' => q|$\langle$|, # left-pointing angle bracket = bra
+ # lang is NOT the same character as 'less than' or 'single left-pointing
+ # angle quotation mark'
+ 'rang' => q|$\rangle$|, # right-pointing angle bracket = ket
+ # rang is NOT the same character as 'greater than' or 'single
+ # right-pointing angle quotation mark'
+
+ # Geometric Shapes
+ 'loz' => q|$\lozenge$|, # lozenge
+
+ # Miscellaneous Symbols
+ 'spades' => q|$\spadesuit$|, # black spade suit
+ 'clubs' => q|$\clubsuit$|, # black club suit = shamrock
+ 'hearts' => q|$\heartsuit$|, # black heart suit = valentine
+ 'diams' => q|$\diamondsuit$|, # black diamond suit
+
+ # C0 Controls and Basic Latin
+ 'quot' => q|"|, # quotation mark = APL quote ["]
+ 'amp' => q|\&|, # ampersand
+ 'lt' => q|<|, # less-than sign
+ 'gt' => q|>|, # greater-than sign
+ 'OElig' => q|\OE{}|, # latin capital ligature OE
+ 'oelig' => q|\oe{}|, # latin small ligature oe
+ 'Scaron' => q|\v{S}|, # latin capital letter S with caron
+ 'scaron' => q|\v{s}|, # latin small letter s with caron
+ 'Yuml' => q|\"Y|, # latin capital letter Y with diaeresis
+ 'circ' => q|\textasciicircum{}|, # modifier letter circumflex accent
+ 'tilde' => q|\textasciitilde{}|, # small tilde
+ 'ensp' => q|\phantom{n}|, # en space
+ 'emsp' => q|\hspace{1em}|, # em space
+ 'thinsp' => q|\,|, # thin space
+ 'zwnj' => q|{}|, # zero width non-joiner
+# 'zwj' => q||, # zero width joiner
+# 'lrm' => q||, # left-to-right mark
+# 'rlm' => q||, # right-to-left mark
+ 'ndash' => q|--|, # en dash
+ 'mdash' => q|---|, # em dash
+ 'lsquo' => q|\textquoteleft{}|, # left single quotation mark
+ 'rsquo' => q|\textquoteright{}|, # right single quotation mark
+ 'sbquo' => q|\quotesinglbase{}|, # single low-9 quotation mark
+ 'ldquo' => q|\textquotedblleft{}|, # left double quotation mark
+ 'rdquo' => q|\textquotedblright{}|, # right double quotation mark
+ 'bdquo' => q|\quotedblbase{}|, # double low-9 quotation mark
+ 'dagger' => q|\textdagger{}|, # dagger
+ 'Dagger' => q|\textdaggerdbl{}|, # double dagger
+ 'permil' => q|\textperthousand{}|, # per mille sign
+ 'lsaquo' => q|\guilsinglleft{}|, # single left-pointing angle quotation mark
+ 'rsaquo' => q|\guilsinglright{}|, # single right-pointing angle quotation mark
+ 'euro' => q|\texteuro{}|, # euro sign
);
-
=head1 OBJECT METHODS
The following methods are provided in this module. Methods inherited
@@ -336,10 +476,12 @@ of arguments when using the C<new()> constructor.
=item B<AddPreamble>
Logical to control whether a C<latex> preamble is to be written.
-If true, a valid C<latex> preamble is written before the pod data
-is written. This is similar to:
+If true, a valid C<latex> preamble is written before the pod data is written.
+This is similar to:
\documentclass{article}
+ \usepackage[T1]{fontenc}
+ \usepackage{textcomp}
\begin{document}
but will be more complicated if table of contents and indexing are required.
@@ -351,6 +493,9 @@ Can be used to set or retrieve the current value.
If used in conjunction with C<AddPostamble> a full latex document will
be written that could be immediately processed by C<latex>.
+For some pod escapes it may be necessary to include the amsmath
+package. This is not yet added to the preamble automaatically.
+
=cut
sub AddPreamble {
@@ -363,13 +508,13 @@ sub AddPreamble {
=item B<AddPostamble>
-Logical to control whether a standard C<latex> ending is written to
-the output file after the document has been processed. In its
-simplest form this is simply:
+Logical to control whether a standard C<latex> ending is written to the output
+file after the document has been processed.
+In its simplest form this is simply:
\end{document}
-but can be more complicated if an index is required.
+but can be more complicated if a index is required.
Can be used to set or retrieve the current value.
$add = $parser->AddPostamble();
@@ -408,10 +553,10 @@ Can be used to set or retrieve the current value:
$parser->Head1Level(2);
$sect = $parser->Head1Level;
-Setting this number too high can result in sections that may not be
-reproducible in the expected way. For example, setting this to 4 would
-imply that C<=head3> do not have a corresponding C<latex> section
-(C<=head1> would correspond to a C<paragraph>).
+Setting this number too high can result in sections that may not be reproducible
+in the expected way. For example, setting this to 4 would imply that C<=head3>
+do not have a corresponding C<latex> section (C<=head1> would correspond to
+a C<paragraph>).
A check is made to ensure that the supplied value is an integer in the
range 0 to 5.
@@ -502,8 +647,8 @@ into the preamble and postamble
$makeindex = $parser->MakeIndex;
$parser->MakeIndex(0);
-Irrelevant if both C<AddPreamble> and C<AddPostamble> are false
-(or equivalently, C<UserPreamble> and C<UserPostamble> are set).
+Irrelevant if both C<AddPreamble> and C<AddPostamble> are false (or equivalently,
+C<UserPreamble> and C<UserPostamble> are set).
Default is for an index to be created.
@@ -632,8 +777,8 @@ sub UniqueLabels {
User supplied C<latex> preamble. Added before the pod translation
data.
-If set, the contents will be prepended to the output file before
-the translated data regardless of the value of C<AddPreamble>.
+If set, the contents will be prepended to the output file before the translated
+data regardless of the value of C<AddPreamble>.
C<MakeIndex> and C<TableOfContents> will also be ignored.
=cut
@@ -651,8 +796,8 @@ sub UserPreamble {
User supplied C<latex> postamble. Added after the pod translation
data.
-If set, the contents will be prepended to the output file after
-the translated data regardless of the value of C<AddPostamble>.
+If set, the contents will be prepended to the output file after the translated
+data regardless of the value of C<AddPostamble>.
C<MakeIndex> will also be ignored.
=cut
@@ -764,13 +909,15 @@ __TEX_COMMENT__
# Table of contents
my $tableofcontents = '\tableofcontents';
-
+
$tableofcontents = '%% ' . $tableofcontents
unless $self->TableOfContents;
# Roll our own
$preamble = << "__TEX_HEADER__";
\\documentclass{article}
+\\usepackage[T1]{fontenc}
+\\usepackage{textcomp}
$comment
@@ -1096,7 +1243,7 @@ sub interior_sequence {
} elsif ($seq_command eq 'Z') {
# Zero width space
- return '$\!$'; # '
+ return '{}';
} elsif ($seq_command eq 'C') {
return "\\texttt{$seq_argument}";
@@ -1106,13 +1253,12 @@ sub interior_sequence {
} elsif ($seq_command eq 'S') {
# non breakable spaces
- my $nbsp = '$\:$'; #'
+ my $nbsp = '~';
$seq_argument =~ s/\s/$nbsp/g;
return $seq_argument;
} elsif ($seq_command eq 'L') {
-
my $link = new Pod::Hyperlink($seq_argument);
# undef on failure
@@ -1138,7 +1284,6 @@ sub interior_sequence {
# Use default markup for external references
# (although Starlink would use \xlabel)
my $markup = $link->markup;
-
my ($file, $line) = $pod_seq->file_line();
return $self->interpolate($link->markup, $line);
@@ -1151,7 +1296,7 @@ sub interior_sequence {
# Replace :: with / - but not sure if I want to do this
# any more.
my $link = $seq_argument;
- $link =~ s/::/\//g;
+ $link =~ s|::|/|g;
my $ref = "\\emph{$seq_argument}";
return $ref;
@@ -1314,10 +1459,10 @@ sub add_item {
}
} else {
- # If the item was '* Something' we still need to write
- # out the something
+ # If the item was '* Something' or '\d+ something' we still need to write
+ # out the something. Also allow 1) and 1.
my $extra_info = $paragraph;
- $extra_info =~ s/^\*\s*//;
+ $extra_info =~ s/^(\*|\d+[\.\)]?)\s*//;
$self->_output("\n\\item $extra_info");
}
@@ -1444,6 +1589,7 @@ Special characters and the C<latex> equivalents are:
\ $\backslash$
^ \^{}
~ \~{}
+ # \#
=cut
@@ -1693,15 +1839,18 @@ L<Pod::Parser>, L<Pod::Select>, L<pod2latex>
Tim Jenness E<lt>t.jenness@jach.hawaii.eduE<gt>
-Bug fixes have been received from: Simon Cozens
+Bug fixes and improvements have been received from: Simon Cozens
E<lt>simon@cozens.netE<gt>, Mark A. Hershberger
E<lt>mah@everybody.orgE<gt>, Marcel Grunauer
-E<lt>marcel@codewerk.comE<gt> and Hugh S Myers
-E<lt>hsmyers@sdragons.comE<gt>.
+E<lt>marcel@codewerk.comE<gt>, Hugh S Myers
+E<lt>hsmyers@sdragons.comE<gt>, Peter J Acklam
+E<lt>jacklam@math.uio.noE<gt>, Sudhi Herle E<lt>sudhi@herle.netE<gt>
+and Ariel Scolnicov E<lt>ariels@compugen.co.ilE<gt>.
+
=head1 COPYRIGHT
-Copyright (C) 2000-2001 Tim Jenness. All Rights Reserved.
+Copyright (C) 2000-2003 Tim Jenness. All Rights Reserved.
This program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
@@ -1710,8 +1859,10 @@ it under the same terms as Perl itself.
=head1 REVISION
-$Id: LaTeX.pm,v 1.12 2001/11/20 20:59:26 timj Exp $
+$Id: LaTeX.pm,v 1.17 2003/04/05 21:25:49 timj Exp $
=end __PRIVATE__
=cut
+
+1;
diff --git a/lib/Pod/t/latex.t b/lib/Pod/t/pod2latex.t
index b35e864c42..79543cc2ef 100644
--- a/lib/Pod/t/latex.t
+++ b/lib/Pod/t/pod2latex.t
@@ -1,11 +1,4 @@
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Test; import Test;
- plan(tests => 154);
-}
-
# Test that Pod::LaTeX works
# This test relies on the DATA filehandle
# DATA contains the latex that is used for comparison
@@ -15,12 +8,21 @@ BEGIN {
# will probably not match what is currently there. You
# will need to adjust it to match (assuming it is correct).
+use Test;
use strict;
+BEGIN { plan tests => 172 }
+
use Pod::LaTeX;
+# The link parsing changed between v0.22 and v0.30 of Pod::ParseUtils
+use Pod::ParseUtils;
+my $linkver = $Pod::ParseUtils::VERSION;
+
# Set up an END block to remove the test output file
-END { unlink "test.tex" };
+END {
+ unlink "test.tex";
+};
ok(1);
@@ -60,6 +62,15 @@ my @output = <INFH>;
ok(@output, @reference);
for my $i (0..$#reference) {
next if $reference[$i] =~ /^%%/; # skip timestamp comments
+
+ # if we are running a new version of Pod::ParseUtils we need
+ # to change the link text. This is a kluge until we drop support
+ # for older versions of Pod::ParseUtils
+ if ($linkver < 0.29 && $output[$i] =~ /manpage/) {
+ # convert our expectations from new to old new format
+ $reference[$i] =~ s/Standard link: \\emph\{Pod::LaTeX\}/Standard link: the \\emph\{Pod::LaTeX\} manpage/;
+ $reference[$i] =~ s/\\textsf\{sec\} in \\emph\{Pod::LaTeX\}/the section on \\textsf\{sec\} in the \\emph\{Pod::LaTeX\} manpage/;
+ }
ok($output[$i], $reference[$i]);
}
@@ -68,10 +79,12 @@ close(INFH) or die "Error closing INFH test.tex: $!\n";
__DATA__
\documentclass{article}
+\usepackage[T1]{fontenc}
+\usepackage{textcomp}
-%% Latex generated from POD in document ...
+%% Latex generated from POD in document (unknown)
%% Using the perl module Pod::LaTeX
-%% Converted on Tue Nov 20 20:43:05 2001
+%% Converted on Sat Apr 5 21:16:02 2003
\usepackage{makeidx}
@@ -187,12 +200,28 @@ Some more content for the item.
This is item content.
\end{description}
+
+
+And this should be an enumerated list without any cruft after the numbers or additional numbers at all.
+
+\begin{enumerate}
+
+\item
+
+item 1
+
+
+\item
+
+item 2
+
+\end{enumerate}
\section{Escapes\label{Escapes}\index{Escapes}}
Test some normal escapes such as $<$ (lt) and $>$ (gt) and $|$ (verbar) and
\texttt{\~{}} (tilde) and \& (amp) as well as $<$ (Esc lt) and $|$ (Esc
-verbar) and / (Esc sol) and $>$ (Esc gt) and \& (Esc amp)
+verbar) and \textfractionsolidus{} (Esc sol) and $>$ (Esc gt) and \& (Esc amp)
and " (Esc quot) and even $\alpha$ (Esc alpha).
\section{For blocks\label{For_blocks}\index{For blocks}}
@@ -313,6 +342,20 @@ This is item content.
=back
+And this should be an enumerated list without any cruft after the numbers or additional numbers at all.
+
+=over 4
+
+=item 1)
+
+item 1
+
+=item 2.
+
+item 2
+
+=back
+
=head1 Escapes
Test some normal escapes such as < (lt) and > (gt) and | (verbar) and