| LaTeX-Table documentation | Contained in the LaTeX-Table distribution. |
LaTeX::Table::Types::TypeI - Interface for LaTeX table types.
This is the type interface (or Moose role), that all type objects must use. LaTeX::Table delegates the LaTeX code generation to type objects. It stores all information we have in easy to use "TEMPLATE VARIABLES". LaTeX::Table ships with very flexible templates, but it is possible to use the template variables defined here to build custom templates.
generate_latex_codeMost options are accessible here:
CENTER, LEFT, RIGHTExample:
[% IF CENTER %]\centering [% END %]
ENVIRONMENT, STAR, POSITION, SIDEWAYSThese options for floating environments are typically used like:
[% IF ENVIRONMENT %]\begin{[% ENVIRONMENT %][% IF STAR %]*[% END %]}[% IF POSITION %][[% POSITION %]][% END %]
...
[% END %]
# the tabular environment here
...
[% IF ENVIRONMENT %] ...
\end{[% ENVIRONMENT %][% IF STAR %]*[% END %]}[% END %]
CAPTION_TOP, CAPTION_CMD, SHORTCAPTION, CAPTION, CONTINUED, CONTINUEDMSGThe variables to build the caption command. Note that there is NO template for
the maincaption option. CAPTION already includes this maincaption if
specified.
LABELThe label:
[% IF LABEL %]\label{[% LABEL %]}[% END %]
TABULAR_ENVIRONMENT, WIDTH, COLDEFThese three options define the tabular environment:
\begin{[% TABULAR_ENVIRONMENT %]}[% IF WIDTH %]{[% WIDTH %]}[% END %]{[% COLDEF %]}
FONTFAMILY, FONTSIZEExample:
[% IF FONTSIZE %]\[% FONTSIZE %] [% END %][% IF FONTFAMILY %]\[% FONTFAMILY %]family [% END %]
TABLEHEADMSG, TABLETAIL, TABLELASTTAIL, XENTRYSTRETCHFor the multi-page tables.
MAXWIDTH, FOOTTABLECurrently only used by LaTeX::Table::Types::Ctable.
In addition, some variables already contain formatted LaTeX code:
HEADER_CODEThe formatted header:
\toprule
\multicolumn{2}{c}{Item} & \\
\cmidrule(r){1-2}
Animal & Description & Price \\
\midrule
DATA_CODE The formatted data:
Gnat & per gram & 13.65 \\
& each & 0.01 \\
Gnu & stuffed & 92.59 \\
Emu & stuffed & 33.33 \\
Armadillo & frozen & 8.99 \\
\bottomrule
RESIZEBOX_BEGIN_CODE, RESIZEBOX_END_CODEEverything between these two template variables is resized according the
resizebox option.
EXTRA_ROW_HEIGHT_CODE, DEFINE_COLORS_CODE, RULES_COLOR_GLOBAL_CODE, RULES_WIDTH_GLOBAL_CODESpecified by the theme. EXTRA_ROW_HEIGHT_CODE will contain the
corresponding LaTeX extrarowheight command, e.g for '1pt':
\setlength{\extrarowheight}{1pt}
Otherwise it will contain the empty string. The other template variables will contain the command specified by the corresponding theme option.
Finally, some variables allow access to internal LaTeX::Table variables:
LT_NUM_COLUMNSContains the number of columns of the table.
LT_BOTTOM_RULE_CODECode that draws the rules at the bottom of the table according the theme options.
The predefined templates: LaTeX::Table::Types::Std, LaTeX::Table::Types::Ctable, LaTeX::Table::Types::Longtable, LaTeX::Table::Types::Xtab
Copyright (c) 2006-2010 <limaone@cpan.org>
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See perlartistic.
| LaTeX-Table documentation | Contained in the LaTeX-Table distribution. |
package LaTeX::Table::Types::TypeI; use strict; use warnings; use Moose::Role; use Template; use version; our $VERSION = qv('1.0.6'); use Carp; has '_table_obj' => ( is => 'rw', isa => 'LaTeX::Table', required => 1 ); has '_tabular_environment' => ( is => 'ro', required => 1 ); has '_template' => ( is => 'ro', required => 1 ); has '_is_floating' => ( is => 'ro', default => 1, required => 1 ); sub generate_latex_code { my ($self) = @_; $self->_check_options(); my $tbl = $self->_table_obj; my $theme = $tbl->get_theme_settings; if ( !$tbl->get_tabletail() ) { $tbl->set_tabletail( $self->_get_default_tabletail_code() ); } my $template_vars = { 'CENTER' => $tbl->_get_default_align ? 1 : $tbl->get_center, 'LEFT' => $tbl->get_left(), 'RIGHT' => $tbl->get_right(), 'ENVIRONMENT' => $tbl->get_environment, 'FONTFAMILY' => $tbl->get_fontfamily(), 'FONTSIZE' => $tbl->get_fontsize(), 'FOOTTABLE' => $tbl->get_foottable(), 'POSITION' => $tbl->get_position(), 'CAPTION_TOP' => $tbl->get_caption_top(), 'CAPTION' => $self->_get_caption(), 'CAPTION_CMD' => $self->_get_caption_command(), 'CONTINUED' => $tbl->get_continued(), 'CONTINUEDMSG' => $tbl->get_continuedmsg(), 'SHORTCAPTION' => ( $tbl->get_maincaption ? $tbl->get_maincaption : $tbl->get_shortcaption ? $tbl->get_shortcaption : 0 ), 'SIDEWAYS' => $tbl->get_sideways(), 'STAR' => $tbl->get_star(), 'WIDTH' => $tbl->get_width(), 'MAXWIDTH' => $tbl->get_maxwidth(), 'COLDEF' => $tbl->get_coldef ? $tbl->get_coldef : $tbl->_get_coldef_code( $tbl->get_data ), 'LABEL' => $tbl->get_label(), 'TABLEHEADMSG' => $tbl->get_tableheadmsg(), 'TABLETAIL' => $tbl->get_tabletail(), 'TABLELASTTAIL' => $tbl->get_tablelasttail(), 'XENTRYSTRETCH' => $tbl->get_xentrystretch(), 'HEADER_CODE' => $tbl->_get_matrix_latex_code( $tbl->get_header, 1 ), 'DATA_CODE' => $tbl->_get_matrix_latex_code( $tbl->get_data, 0 ), 'TABULAR_ENVIRONMENT' => $self->_get_tabular_environment(), 'EXTRA_ROW_HEIGHT_CODE' => ( defined $theme->{EXTRA_ROW_HEIGHT} ? '\setlength{\extrarowheight}{' . $theme->{EXTRA_ROW_HEIGHT} . "}\n" : q{} ), 'RULES_COLOR_GLOBAL_CODE' => ( defined $theme->{RULES_COLOR_GLOBAL} ? $theme->{RULES_COLOR_GLOBAL} . "\n" : q{} ), 'RULES_WIDTH_GLOBAL_CODE' => ( defined $theme->{RULES_WIDTH_GLOBAL} ? $theme->{RULES_WIDTH_GLOBAL} . "\n" : q{} ), 'RESIZEBOX_BEGIN_CODE' => $self->_get_begin_resizebox_code(), 'RESIZEBOX_END_CODE' => ( $self->_table_obj->get_resizebox ? "}\n" : q{} ), 'DEFINE_COLORS_CODE' => ( defined $tbl->get_theme_settings->{DEFINE_COLORS} ? $tbl->get_theme_settings->{DEFINE_COLORS} . "\n" : q{} ), 'LT_NUM_COLUMNS' => scalar( @{ $tbl->_get_data_summary() } ), 'LT_BOTTOM_RULE_CODE' => $tbl->_get_hline_code( $tbl->_get_RULE_BOTTOM_ID ), }; my $template_obj = Template->new(); my $template = $tbl->get_custom_template ? $tbl->get_custom_template : $self->_template; my $template_output; $template_obj->process( \$template, $template_vars, \$template_output ) or croak $template_obj->error(); return $template_output; } sub _check_options { my ($self) = @_; my $tbl = $self->_table_obj; # default floating enviromnent is table if ( $tbl->get_environment eq '1' ) { $tbl->set_environment('table'); } if ( !$self->_is_floating ) { if ( !$tbl->get_environment ) { $tbl->_invalid_option_usage( 'environment', $tbl->get_type . ' is non-floating and requires an environment' ); } if ( $tbl->get_position ) { $tbl->_invalid_option_usage( 'position', $tbl->get_type . ' is non-floating and thus does not support position' ); } } # check center, right, left options my $cnt_true_alignments = 0; for my $align ( $tbl->get_center, $tbl->get_right, $tbl->get_left ) { if ($align) { $cnt_true_alignments++; } } if ( $cnt_true_alignments > 1 ) { $tbl->_invalid_option_usage( 'center, left, right', 'only one allowed.' ); } if ( $tbl->has_center || $tbl->has_right || $tbl->has_left ) { $tbl->_set_default_align(0); } else { $tbl->_set_default_align(1); } if ( $tbl->get_maincaption && $tbl->get_shortcaption ) { $tbl->_invalid_option_usage( 'maincaption, shortcaption', 'only one allowed.' ); } # handle default values by ourselves if ( $tbl->get_width_environment eq 'tabular*' ) { $tbl->set_width_environment(0); } if ( !$tbl->get_width ) { if ( $tbl->get_width_environment eq 'tabularx' ) { $tbl->_invalid_option_usage( 'width_environment', 'Is tabularx and width is unset' ); } elsif ( $tbl->get_width_environment eq 'tabulary' ) { $tbl->_invalid_option_usage( 'width_environment', 'Is tabulary and width is unset' ); } } return; } sub _get_caption_command { my ($self) = @_; my $tbl = $self->_table_obj; my $c_caption = 'caption'; if ( $tbl->get_caption_top && $tbl->get_caption_top ne '1' ) { $c_caption = $tbl->get_caption_top; $c_caption =~ s{ \A \\ }{}xms; } return $c_caption; } sub _get_begin_resizebox_code { my ($self) = @_; if ( $self->_table_obj->get_resizebox ) { my $rb_width = $self->_table_obj->get_resizebox->[0]; my $rb_height = q{!}; if ( defined $self->_table_obj->get_resizebox->[1] ) { $rb_height = $self->_table_obj->get_resizebox->[1]; } return "\\resizebox{$rb_width}{$rb_height}{\n"; } return q{}; } sub _get_caption { my ($self) = @_; my $caption = q{}; my $tbl = $self->_table_obj; if ( !$tbl->get_caption ) { if ( !$tbl->get_maincaption ) { return 0; } } else { $caption = $tbl->get_caption; } my $tmp = q{}; if ( $tbl->get_maincaption ) { $tmp = $tbl->get_maincaption . '. '; if ( defined $tbl->get_theme_settings->{CAPTION_FONT_STYLE} ) { $tmp = $tbl->_add_font_family( $tmp, $tbl->get_theme_settings->{CAPTION_FONT_STYLE} ); } } return $tmp . $caption; } sub _get_tabular_environment { my ($self) = @_; my $tbl = $self->_table_obj; my $res = $tbl->get_custom_tabular_environment ? $tbl->get_custom_tabular_environment : $self->_tabular_environment; if ( $tbl->get_width ) { if ( !$tbl->get_width_environment ) { $res .= q{*}; } else { $res = $tbl->get_width_environment; } } return $res; } sub _get_default_tabletail_code { my ($self) = @_; my $tbl = $self->_table_obj; my $v0 = q{|} x $tbl->get_theme_settings->{'VERTICAL_RULES'}->[0]; return $tbl->_get_hline_code( $tbl->_get_RULE_MID_ID ) . '\multicolumn{' . @{ $tbl->_get_data_summary() } . "}{${v0}r$v0}{{" . $tbl->get_tabletailmsg . "}} \\\\\n"; } 1; __END__
# vim: ft=perl sw=4 ts=4 expandtab