summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfiddlosopher <fiddlosopher@788f1e2b-df1e-0410-8736-df70ead52e1b>2007-07-28 01:10:04 +0000
committerfiddlosopher <fiddlosopher@788f1e2b-df1e-0410-8736-df70ead52e1b>2007-07-28 01:10:04 +0000
commitb29f221cba949934dda402f96b1606cda8ed73a6 (patch)
tree580d523e7c5980164d25527c27894865845c10f7
parent4283ce3662cbb4b9d3165aef40455203ae106c47 (diff)
Changed LaTeX writer to use the examplep package instead
of fancyvrb. examplep allows verbatim text in places where fancyvrb does not, e.g. definition list terms, and provides for line-breaking of verbatim text. + examplep code put in LaTeX header instead of being dynamically included, since it is frequently used, and people may want to customize the options. + documented dependency on examplep + added texlive-latex-extra as a "Suggested" package in debian/control + use examplep's \Q{} is now used instead of \verb: note that \Q requires backslash- escaping symbols in its scope. + modified README so that the verbatim sections will look good at shorter line lengths. git-svn-id: https://pandoc.googlecode.com/svn/trunk@807 788f1e2b-df1e-0410-8736-df70ead52e1b
-rw-r--r--README71
-rw-r--r--debian/control2
-rw-r--r--man/man1/markdown2pdf.1.md2
-rw-r--r--src/Text/Pandoc/Writers/LaTeX.hs32
-rw-r--r--src/headers/LaTeXHeader1
-rw-r--r--src/wrappers/markdown2pdf.in6
-rw-r--r--web/myheader.tex3
7 files changed, 59 insertions, 58 deletions
diff --git a/README b/README
index cfdaca1ff..0dcedd70f 100644
--- a/README
+++ b/README
@@ -59,7 +59,7 @@ The wrapper script `markdown2pdf` requires
- the following LaTeX packages (available from [CTAN], if they
are not already included in your LaTeX distribution):
+ `unicode` (for UTF8 characters)
- + `fancyvrb` (for verbatim text in footnotes)
+ + `examplep` (for verbatim text in footnotes and definition lists)
+ `graphicx` (for images)
+ `array` (for tables)
+ `ulem` (for strikeout text)
@@ -85,7 +85,7 @@ Note that you can specify multiple input files on the command line.
`pandoc` will concatenate them all (with blank lines between them)
before parsing:
- pandoc -s chapter1.txt chapter2.txt references.txt > book.html
+ pandoc -s ch1.txt ch2.txt refs.txt > book.html
(The `-s` option here tells `pandoc` to produce a standalone HTML file,
with a proper header, rather than a fragment. For more details on this
@@ -167,7 +167,7 @@ may be used in Windows under Cygwin.)
it will be backed up before being overwritten.) An output file
name can be specified explicitly using the `-o` option:
- markdown2pdf -o "My Book.pdf" chap1.txt chap2.txt chap3.txt
+ markdown2pdf -o book.pdf chap1 chap2
If no input file is specified, input will be taken from STDIN.
All of `pandoc`'s options will work with `markdown2pdf` as well.
@@ -340,7 +340,8 @@ For further documentation, see the `pandoc(1)` man page.
include the names of input files and any special options passed
after ` -- ` on the command line. So, for example,
-: pandoc --dump-args -o foo.html -s foo.txt appendix.txt -- -e latin1
+: pandoc --dump-args -o foo.html -s foo.txt \
+ appendix.txt -- -e latin1
: will cause the following to be printed to STDOUT:
@@ -499,11 +500,13 @@ after the term. The definition consists of one or more block elements
Term *with inline markup*
: Here is the definition. It may
- contain multiple blocks. Here is some code:
+ contain multiple blocks. Here is
+ some code:
: {* my code *}
- : Here is the third paragraph of this definition.
+ : Here is the third paragraph of this
+ definition.
If you leave space after the definition (as in the first example above),
the definitions will be considered paragraphs. In some output formats,
@@ -537,20 +540,19 @@ Pandoc's markdown allows footnotes, using the following syntax:
Here is a footnote reference,[^1] and another.[^longnote]
- [^1]: Here is the footnote. It can go anywhere in the document,
- except in embedded contexts like block quotes or lists.
+ [^1]: Here is the footnote.
- [^longnote]: Here's the other note. This one contains multiple
- blocks.
+ [^longnote]: Here's one with multiple blocks.
- Subsequent paragraphs are indented to show that they belong to
- the previous footnote.
+ Subsequent paragraphs are indented to show
+ that they belong to the previous footnote.
{ some.code }
- The whole paragraph can be indented, or just the first line.
- In this way, multi-paragraph footnotes work just like
- multi-paragraph list items in markdown.
+ The whole paragraph can be indented, or
+ just the first line. In this way,
+ multi-paragraph footnotes work like
+ multi-paragraph list items.
This paragraph won't be part of the note, because it isn't indented.
@@ -616,19 +618,20 @@ try widening it in the markdown source.
Multiline tables allow headers and table rows to span multiple lines
of text. Here is an example:
- ---------------------------------------------------------------
- Centered Left Right
- Header Aligned Aligned Default aligned
- ---------- --------- ----------- ---------------------------
- First row 12.0 Example of a row that spans
- multiple lines.
-
- Second row 5.0 Here's another one. Note
- the blank line between rows.
- ---------------------------------------------------------------
-
- Table: Optional caption. This, too, may span multiple
- lines.
+ ----------------------------------------
+ Centered Left-aligned Right-aligned
+ Header Header Header
+ ---------- ------------- --------------
+ First This is a 12.0
+ two-line row.
+
+ Second This row is 5.0
+ three lines
+ long.
+ ----------------------------------------
+
+ Table: Optional caption. This, too,
+ may span multiple lines.
These work like simple tables, but with the following differences:
@@ -734,13 +737,11 @@ derive the identifier from the header text,
- Replace all spaces, dashes, newlines, and hyphens with hyphens.
- Convert all alphabetic characters to lowercase.
-Thus,
-
- Header text Identifier
- --------------------------------- --- --------------------------------
- Header identifiers in HTML → `header-identifiers-in-html`
- *Dogs*?--in *my* house? → `dogs--in-my-house`
- [HTML], [S5], or [RTF]? → `html-s5-or-rtf`
+Thus, for example, a heading 'Header identifiers in HTML' will get
+the identifier `header-identifiers-in-html`, a heading
+'*Dogs*?--in *my* house?' will get the identifier `dogs--in-my-house`,
+and a heading '[HTML], [S5], or [RTF]?' will get the identifier
+`html-s5-or-rtf`.
These rules should, in most cases, allow one to determine the identifier
from the header text. The exception is when several headers have the
diff --git a/debian/control b/debian/control
index c2f908292..58c20b8c3 100644
--- a/debian/control
+++ b/debian/control
@@ -10,7 +10,7 @@ Package: pandoc
Section: text
Architecture: any
Depends: ${shlibs:Depends}
-Suggests: texlive-latex-recommended | tetex-extra, tidy, wget | w3m
+Suggests: texlive-latex-recommended | tetex-extra, texlive-latex-extra, tidy, wget | w3m
Description: general markup converter
Pandoc is a Haskell library for converting from one markup format to
another, and a command-line tool that uses this library. It can read
diff --git a/man/man1/markdown2pdf.1.md b/man/man1/markdown2pdf.1.md
index ecaabc35e..13f94ee1d 100644
--- a/man/man1/markdown2pdf.1.md
+++ b/man/man1/markdown2pdf.1.md
@@ -28,7 +28,7 @@ output through `iconv`:
iconv -t utf-8 input.txt | pandoc | iconv -f utf-8
-`markdown2pdf` assumes that the `unicode`, `fancyvrb`, `array`,
+`markdown2pdf` assumes that the `unicode`, `examplep`, `array`,
`graphicx`, and `ulem` packages are in latex's search path. If these
packages are not included in your latex setup, they can be obtained from
<http://ctan.org>.
diff --git a/src/Text/Pandoc/Writers/LaTeX.hs b/src/Text/Pandoc/Writers/LaTeX.hs
index cc2da8338..c9c923dae 100644
--- a/src/Text/Pandoc/Writers/LaTeX.hs
+++ b/src/Text/Pandoc/Writers/LaTeX.hs
@@ -34,6 +34,7 @@ import Text.Pandoc.Definition
import Text.Pandoc.Shared
import Text.Printf ( printf )
import Data.List ( (\\), isInfixOf )
+import Data.Char ( isAlphaNum )
import qualified Data.Set as S
import Control.Monad.State
@@ -81,15 +82,12 @@ latexHeader options (Meta title authors date) = do
then ""
else "\\date{" ++ stringToLaTeX date ++ "}\n"
let maketitle = if null title then "" else "\\maketitle\n"
- let verbatim = if "\\usepackage{fancyvrb}" `isInfixOf` extras
- then "\\VerbatimFootnotes % allows verbatim text in footnotes\n"
- else ""
let secnumline = if (writerNumberSections options)
then ""
else "\\setcounter{secnumdepth}{0}\n"
let baseHeader = writerHeader options
let header = baseHeader ++ extras
- return $ header ++ secnumline ++ verbatim ++ titletext ++ authorstext ++
+ return $ header ++ secnumline ++ titletext ++ authorstext ++
datetext ++ "\\begin{document}\n" ++ maketitle ++ "\n"
-- escape things as needed for LaTeX
@@ -106,11 +104,11 @@ stringToLaTeX = escapeStringUsing latexEscapes
]
-- | Remove all code elements from list of inline elements
--- (because it's illegal to have a \\verb inside a command argument)
+-- (because it's illegal to have verbatim inside some command arguments)
deVerb :: [Inline] -> [Inline]
deVerb [] = []
deVerb ((Code str):rest) =
- (Str $ stringToLaTeX str):(deVerb rest)
+ (TeX $ "\\texttt{" ++ stringToLaTeX str ++ "}"):(deVerb rest)
deVerb (other:rest) = other:(deVerb rest)
-- | Convert Pandoc block element to LaTeX.
@@ -155,7 +153,7 @@ blockToLaTeX (Table caption aligns widths heads rows) = do
AlignCenter -> "\\centering"
AlignDefault -> "\\raggedright") ++
"\\hspace{0pt}}p{" ++ width ++
- "\\textwidth}")
+ "\\columnwidth}")
colWidths aligns
let tableBody = "\\begin{tabular}{" ++ colDescriptors ++ "}\n" ++
headers ++ "\\hline\n" ++ concat rows' ++ "\\end{tabular}\n"
@@ -177,7 +175,7 @@ tableRowToLaTeX cols =
listItemToLaTeX lst = blockListToLaTeX lst >>= (return . ("\\item "++))
defListItemToLaTeX (term, def) = do
- term' <- inlineListToLaTeX (deVerb term)
+ term' <- inlineListToLaTeX term
def' <- blockListToLaTeX def
return $ "\\item[" ++ term' ++ "] " ++ def'
@@ -196,27 +194,28 @@ isQuoted _ = False
inlineToLaTeX :: Inline -- ^ Inline to convert
-> State WriterState String
inlineToLaTeX (Emph lst) = do
- contents <- inlineListToLaTeX (deVerb lst)
+ contents <- inlineListToLaTeX lst
return $ "\\emph{" ++ contents ++ "}"
inlineToLaTeX (Strong lst) = do
- contents <- inlineListToLaTeX (deVerb lst)
+ contents <- inlineListToLaTeX lst
return $ "\\textbf{" ++ contents ++ "}"
inlineToLaTeX (Strikeout lst) = do
- contents <- inlineListToLaTeX (deVerb lst)
+ contents <- inlineListToLaTeX lst
addToHeader "\\usepackage[normalem]{ulem}"
return $ "\\sout{" ++ contents ++ "}"
inlineToLaTeX (Superscript lst) = do
- contents <- inlineListToLaTeX (deVerb lst)
+ contents <- inlineListToLaTeX lst
return $ "\\textsuperscript{" ++ contents ++ "}"
inlineToLaTeX (Subscript lst) = do
- contents <- inlineListToLaTeX (deVerb lst)
+ contents <- inlineListToLaTeX lst
-- oddly, latex includes \textsuperscript but not \textsubscript
-- so we have to define it:
addToHeader "\\newcommand{\\textsubscript}[1]{\\ensuremath{_{\\scriptsize\\textrm{#1}}}}"
return $ "\\textsubscript{" ++ contents ++ "}"
-inlineToLaTeX (Code str) = return $ "\\verb" ++ [chr] ++ stuffing ++ [chr]
- where stuffing = str
- chr = (('`':(enumFromTo '!' '~')) \\ stuffing) !! 0
+inlineToLaTeX (Code str) = return $ "\\Q{" ++ stuffing ++ "}"
+ where stuffing = concatMap (\c -> if isAlphaNum c
+ then [c]
+ else ['\\',c]) str
inlineToLaTeX (Quoted SingleQuote lst) = do
contents <- inlineListToLaTeX lst
let s1 = if (not (null lst)) && (isQuoted (head lst)) then "\\," else ""
@@ -244,7 +243,6 @@ inlineToLaTeX (Image alternate (source, tit)) = do
addToHeader "\\usepackage{graphicx}"
return $ "\\includegraphics{" ++ source ++ "}"
inlineToLaTeX (Note contents) = do
- addToHeader "\\usepackage{fancyvrb}"
contents' <- blockListToLaTeX contents
return $ "\\footnote{" ++ stripTrailingNewlines contents' ++ "}"
diff --git a/src/headers/LaTeXHeader b/src/headers/LaTeXHeader
index 095848adf..125ab258e 100644
--- a/src/headers/LaTeXHeader
+++ b/src/headers/LaTeXHeader
@@ -1,5 +1,6 @@
\documentclass{article}
\usepackage{ucs}
\usepackage[utf8x]{inputenc}
+\usepackage[Q=yes,verbatimenv=yes,pverb-linebreak=no]{examplep}
\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt plus 2pt minus 1pt}
diff --git a/src/wrappers/markdown2pdf.in b/src/wrappers/markdown2pdf.in
index c9a01fa16..7347fd7d7 100644
--- a/src/wrappers/markdown2pdf.in
+++ b/src/wrappers/markdown2pdf.in
@@ -40,9 +40,9 @@ fi
err "${THIS}: Please install the 'unicode' package from CTAN:"
err " http://www.ctan.org/tex-archive/macros/latex/contrib/unicode/"
fi
- if grep -q "File \`fancyvrb.sty' not found" $texname.log; then
- err "${THIS}: Please install the 'fancyvrb' package from CTAN:"
- err " http://www.ctan.org/tex-archive/macros/latex/contrib/fancyvrb/"
+ if grep -q "File \`examplep.sty' not found" $texname.log; then
+ err "${THIS}: Please install the 'examplep' package from CTAN:"
+ err " http://www.ctan.org/tex-archive/macros/latex/contrib/examplep/"
fi
if grep -q "File \`ulem.sty' not found" $texname.log; then
err "${THIS}: Please install the 'ulem' package from CTAN:"
diff --git a/web/myheader.tex b/web/myheader.tex
index ee0123097..817bff14a 100644
--- a/web/myheader.tex
+++ b/web/myheader.tex
@@ -1,4 +1,5 @@
-\documentclass[12pt]{article}
+\documentclass[twocolumn,11pt]{article}
\usepackage{txfonts}
+\usepackage[margin=2cm]{geometry}
\usepackage{ucs}
\usepackage[utf8x]{inputenc}