1 #ifndef DUNE_FEM_LATEXTABLEWRITER_HH 2 #define DUNE_FEM_LATEXTABLEWRITER_HH 12 #include <dune/common/exceptions.hh> 13 #include <dune/common/tuples.hh> 38 template<
class DataTuple >
42 enum Alignment { AlignLeft, AlignCenter, AlignRight };
50 virtual std::string entry (
const DataTuple & )
const = 0;
52 virtual std::string header ()
const = 0;
63 template<
class DataTuple >
64 struct Value {
typedef typename tuple_element< N, DataTuple >::type
Type; };
66 template<
class DataTuple >
70 return std::get< N >( data );
79 template<
class DataSource >
82 template<
class DataTuple >
89 : index_( index ), source_( source )
92 template<
class DataTuple >
96 return source_.get( data )[ index_ ];
109 template<
class W
idthDataSource,
class ErrorDataSource >
112 template<
class DataTuple >
118 explicit EOCDataSource (
const WidthDataSource &widthSource = WidthDataSource(),
119 const ErrorDataSource &errorSource = ErrorDataSource() )
120 : widthSource_( widthSource ),
121 errorSource_( errorSource ),
122 hOld_(
std::numeric_limits< double >::infinity() )
126 : errorSource_( errorSource ),
127 hOld_(
std::numeric_limits< double >::infinity() )
130 template<
class DataTuple >
134 double h = widthSource_.get( data );
135 double e = errorSource_.get( data );
136 std::swap( h, hOld_ );
137 std::swap( e, eOld_ );
138 if( h < std::numeric_limits< double >::infinity() )
145 WidthDataSource widthSource_;
146 ErrorDataSource errorSource_;
147 mutable double hOld_;
148 mutable double eOld_;
165 template<
class DataTuple,
class DataSource >
178 const DataSource &source = DataSource() )
180 decimals_( decimals ),
198 return BaseType::AlignRight;
206 std::string
entry (
const DataTuple &data )
const 209 return toString( source_.get( data ) );
213 std::string
header ()
const {
return header_; }
217 template<
class Number >
218 std::string
toString (
const Number &number )
const 220 std::ostringstream s;
221 s << std::fixed << std::setprecision( decimals_ );
222 s <<
"$" << number <<
"$";
243 template<
class DataTuple >
255 LatexTableWriter (
const std::string &filename,
const ColumnWriterVectorType &columnWriter );
262 void writeRow (
const DataTuple &data );
264 void writeSeparator ();
268 typedef typename ColumnWriterVectorType::const_iterator ColumnWriterIteratorType;
274 std::string preamble ()
const;
276 std::string header ()
const;
278 ColumnWriterVectorType columnWriters_;
287 template<
class DataTuple >
290 : columnWriters_( columnWriters ),
291 out_( filename.c_str() )
296 DUNE_THROW( IOError,
"Unable to open '" << filename <<
"'." );
298 out_ <<
"\\begin{tabular}{" << preamble() <<
"}" << std::endl;
300 out_ << header() <<
" \\\\"<< std::endl;
305 template<
class DataTuple >
309 out_ <<
"\\end{tabular}" << std::endl;
314 template<
class DataTuple >
317 std::string separator =
"";
318 const ColumnWriterIteratorType end = columnWriters_.end();
319 for( ColumnWriterIteratorType it = columnWriters_.begin(); it != end; ++it )
327 out_ << (*it)->entry( data );
331 out_ <<
"\\multicolumn{1}{|c|}{---}";
335 out_ <<
" \\\\" << std::endl;
339 template<
class DataTuple >
344 const ColumnWriterIteratorType end = columnWriters_.end();
345 for( ColumnWriterIteratorType it = columnWriters_.begin(); it != end; ++it, ++e )
350 out_ <<
"\\cline{" << (b+1) <<
"-" << e <<
"}";
355 out_ <<
"\\cline{" << (b+1) <<
"-" << e <<
"}";
360 template<
class DataTuple >
363 const ColumnWriterIteratorType end = columnWriters_.end();
364 for( ColumnWriterIteratorType it = columnWriters_.begin(); it != end; ++it )
372 template<
class DataTuple >
375 std::string header, separator;
376 const ColumnWriterIteratorType end = columnWriters_.end();
377 for( ColumnWriterIteratorType it = columnWriters_.begin(); it != end; ++it )
382 header +=
"\\multicolumn{1}{|c|}{" + (*it)->header() +
"}";
388 template<
class DataTuple >
391 const char alignment[] = {
'l',
'c',
'r' };
393 std::string preamble(
"|" );
394 const ColumnWriterIteratorType end = columnWriters_.end();
395 for( ColumnWriterIteratorType it = columnWriters_.begin(); it != end; ++it )
398 preamble += alignment[ (*it)->alignment() ];
400 preamble +=
"@{}p{0.2em}@{}";
410 #endif // #ifndef DUNE_FEM_LATEXTABLEWRITER_HH ~LatexTableWriter()
writes "\end{tabular}" to the latex file and removes column vector
Definition: latextablewriter.hh:306
BaseType::Alignment alignment() const
set the aligment of the entries for this column in the latex table
Definition: latextablewriter.hh:196
Definition: latextablewriter.hh:83
EOCDataSource(const WidthDataSource &widthSource=WidthDataSource(), const ErrorDataSource &errorSource=ErrorDataSource())
Definition: latextablewriter.hh:118
virtual ~AbstractColumnWriter()
Destructor.
Definition: latextablewriter.hh:45
EOCDataSource(const ErrorDataSource &errorSource)
Definition: latextablewriter.hh:125
virtual Alignment alignment() const
Definition: latextablewriter.hh:48
gets the N th element of a provided tuple assuming its a number
Definition: latextablewriter.hh:166
NumberColumnWriter(const std::string &header, const DataSource &source)
Constructor of NumberColumnWriter where decimal default to 6.
Definition: latextablewriter.hh:189
Definition: latextablewriter.hh:61
static double log(const Double &v)
Definition: double.hh:865
Class representing column writer in general.
Definition: latextablewriter.hh:39
writes latex tables based on user-defined row structure
Definition: latextablewriter.hh:244
Definition: coordinate.hh:4
std::vector< const ColumnWriterType * > ColumnWriterVectorType
Abstract column vector type.
Definition: latextablewriter.hh:249
Definition: latextablewriter.hh:110
DataSource::template Value< DataTuple >::Type::value_type Type
Definition: latextablewriter.hh:85
ArrayDataSource(const int index, const DataSource &source=DataSource())
Definition: latextablewriter.hh:88
std::string toString(const Number &number) const
converts number to std::string
Definition: latextablewriter.hh:218
Alignment
The alignment for the data in this column.
Definition: latextablewriter.hh:42
Definition: latextablewriter.hh:80
void writeSeparator()
Adds extra space between two columns in the latex table.
Definition: latextablewriter.hh:340
Definition: latextablewriter.hh:64
NumberColumnWriter(const std::string &header, const int decimals=6, const DataSource &source=DataSource())
Definition: latextablewriter.hh:177
Definition: latextablewriter.hh:113
Definition: latextablewriter.hh:24
double Type
Definition: latextablewriter.hh:115
AbstractColumnWriter< DataTuple > ColumnWriterType
Abstract column type.
Definition: latextablewriter.hh:247
LatexTableWriter(const std::string &filename, const ColumnWriterVectorType &columnWriter)
Definition: latextablewriter.hh:289
std::string entry(const DataTuple &data) const
returns N the element from data tuple
Definition: latextablewriter.hh:206
void writeRow(const DataTuple &data)
Write row to the table.
Definition: latextablewriter.hh:315
std::string header() const
return Column titles in latex row format
Definition: latextablewriter.hh:213
tuple_element< N, DataTuple >::type Type
Definition: latextablewriter.hh:64