module RedCloth::Formatters::LATEX

Constants

ENTITIES

Public Instance Methods

acronym(opts) click to toggle source

acronyms

# File lib/redcloth/formatters/latex.rb, line 58
def acronym(opts)
  "#{opts[:title]} (#{opts[:text]})"
end
arrow(opts) click to toggle source
# File lib/redcloth/formatters/latex.rb, line 259
def arrow(opts)
  "\\rightarrow{}"
end
bc_close(opts) click to toggle source
# File lib/redcloth/formatters/latex.rb, line 183
def bc_close(opts)
  end_chunk("verbatim") + "\n"
end
bc_open(opts) click to toggle source

code blocks

# File lib/redcloth/formatters/latex.rb, line 178
def bc_open(opts)
  opts[:block] = true
  begin_chunk("verbatim") + "\n"
end
bq_close(opts) click to toggle source
# File lib/redcloth/formatters/latex.rb, line 193
def bq_close(opts)
  "\\end{quotation}\n\n"
end
bq_open(opts) click to toggle source

block quotations

# File lib/redcloth/formatters/latex.rb, line 188
def bq_open(opts)
  opts[:block] = true
  "\\begin{quotation}\n"
end
code(opts) click to toggle source

inline code

# File lib/redcloth/formatters/latex.rb, line 53
def code(opts)
  opts[:block] ? opts[:text] : "\\verb@#{opts[:text]}@"
end
dim(opts) click to toggle source
# File lib/redcloth/formatters/latex.rb, line 282
def dim(opts)
  opts[:text].gsub!('x', '\times')
  opts[:text].gsub!('"', "''")
  period = opts[:text].slice!(/\.$/)
  "$#{opts[:text]}$#{period}"
end
ellipsis(opts) click to toggle source
# File lib/redcloth/formatters/latex.rb, line 247
def ellipsis(opts)
  "#{opts[:text]}\\ldots{}"
end
emdash(opts) click to toggle source
# File lib/redcloth/formatters/latex.rb, line 251
def emdash(opts)
  "---"
end
endash(opts) click to toggle source
# File lib/redcloth/formatters/latex.rb, line 255
def endash(opts)
  " -- "
end
entity(opts) click to toggle source

TODO: what do we do with (unknown) unicode entities ?

# File lib/redcloth/formatters/latex.rb, line 277
def entity(opts)
  text = opts[:text][0..0] == '#' ? opts[:text][1..-1] : opts[:text] 
  ENTITIES[text]
end
fn(opts) click to toggle source
# File lib/redcloth/formatters/latex.rb, line 230
def fn(opts)
  "\\footnotetext[#{opts[:id]}]{#{opts[:text]}}"
end
footno(opts) click to toggle source

footnotes

# File lib/redcloth/formatters/latex.rb, line 224
def footno(opts)
  # TODO: insert a placeholder until we know the footnote content.
  # For this to work, we need some kind of post-processing...
  "\\footnotemark[#{opts[:text]}]"
end
image(opts) click to toggle source

FIXME: use includegraphics with security verification

Remember to use 'RequirePackage{graphicx}' in your LaTeX header

FIXME: Look at dealing with width / height gracefully as this should be specified in a unit like cm rather than px.

# File lib/redcloth/formatters/latex.rb, line 208
def image(opts)
  # Don't know how to use remote links, plus can we trust them?
  return "" if opts[:src] =~ /^\w+\:\/\//
  # Resolve CSS styles if any have been set
  styling = opts[:class].to_s.split(/\s+/).collect { |style| latex_image_styles[style] }.compact.join ','
  # Build latex code
  [ "\\begin{figure}",
    "  \\centering",
    "  \\includegraphics[#{styling}]{#{opts[:src]}}",
   ("  \\caption{#{escape opts[:title]}}" if opts[:title]),
   ("  \\label{#{escape opts[:alt]}}" if opts[:alt]),
    "\\end{figure}",
  ].compact.join "\n"
end
inline_html(opts) click to toggle source

TODO: what do we do with HTML?

# File lib/redcloth/formatters/latex.rb, line 290
def inline_html(opts)
  opts[:text] || ""
end
li_close(opts=nil) click to toggle source
# File lib/redcloth/formatters/latex.rb, line 107
def li_close(opts=nil)
  "\n"
end
li_open(opts) click to toggle source
# File lib/redcloth/formatters/latex.rb, line 103
def li_open(opts)
  "  \\item #{opts[:text]}"
end
p(opts) click to toggle source

paragraphs

# File lib/redcloth/formatters/latex.rb, line 112
def p(opts)
  case opts[:align]
  when 'left' then
    "\\begin{flushleft}#{opts[:text]}\\end{flushleft}\n\n" 
  when 'right' then
    "\\begin{flushright}#{opts[:text]}\\end{flushright}\n\n" 
  when 'center' then
    "\\begin{center}#{opts[:text]}\\end{center}\n\n" 
  else
    "#{opts[:text]}\n\n"
  end
end
quote1(opts) click to toggle source
# File lib/redcloth/formatters/latex.rb, line 239
def quote1(opts)
  "`#{opts[:text]}'"
end
quote2(opts) click to toggle source
# File lib/redcloth/formatters/latex.rb, line 243
def quote2(opts)
  "``#{opts[:text]}''"
end
registered(opts) click to toggle source
# File lib/redcloth/formatters/latex.rb, line 267
def registered(opts)
  "\\textregistered{}"
end
snip(opts) click to toggle source

inline verbatim

# File lib/redcloth/formatters/latex.rb, line 235
def snip(opts)
  "\\verb`#{opts[:text]}`"
end
table_close(opts) click to toggle source

FIXME: need caption and label elements similar to image -> figure

# File lib/redcloth/formatters/latex.rb, line 165
def table_close(opts)
  output  = "\\begin{table}\n"
  output << "  \\centering\n"
  output << "  \\begin{tabular}{ #{"l " * @table[0].size }}\n"
  @table.each do |row|
    output << "    #{row.join(" & ")} \\\\\n"
  end
  output << "  \\end{tabular}\n"
  output << "\\end{table}\n"
  output
end
table_open(opts) click to toggle source

We need to know the column count before opening tabular context.

# File lib/redcloth/formatters/latex.rb, line 157
def table_open(opts)
  @table = []
  @table_multirow = {}
  @table_multirow_next = {}
  return ""
end
td(opts) click to toggle source

tables

# File lib/redcloth/formatters/latex.rb, line 126
def td(opts)
  column = @table_row.size
  if opts[:colspan]
    opts[:text] = "\\multicolumn{#{opts[:colspan]}}{ #{"l " * opts[:colspan].to_i}}{#{opts[:text]}}"
  end
  if opts[:rowspan]
    @table_multirow_next[column] = opts[:rowspan].to_i - 1
    opts[:text] = "\\multirow{#{opts[:rowspan]}}{*}{#{opts[:text]}}"
  end
  @table_row.push(opts[:text])
  return ""
end
tr_close(opts) click to toggle source
# File lib/redcloth/formatters/latex.rb, line 144
def tr_close(opts)
  multirow_columns = @table_multirow.find_all {|c,n| n > 0}
  multirow_columns.each do |c,n|
    @table_row.insert(c,"")
    @table_multirow[c] -= 1
  end
  @table_multirow.merge!(@table_multirow_next)
  @table_multirow_next = {}
  @table.push(@table_row)
  return ""
end
tr_open(opts) click to toggle source
# File lib/redcloth/formatters/latex.rb, line 139
def tr_open(opts)
  @table_row = []
  return ""
end
trademark(opts) click to toggle source
# File lib/redcloth/formatters/latex.rb, line 263
def trademark(opts)
  "\\texttrademark{}"
end