Results in this (temporary image): http://lucs.net:8888/sidebar.png
A few notes:
- Requires additional LaTeX package 'calc'.
- Has some UTF-8 characters in the perl code.
- Introduced a main() sub (personal preference -- it bothers me to have
floating top level code).
- I hope the produced patch is correctly formatted in this
email (new to git and its patches).
Comments appreciated.
Thanks.
---
bin/book-to-latex | 130 +++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 117 insertions(+), 13 deletions(-)
diff --git a/bin/book-to-latex b/bin/book-to-latex
index a909a46..70dabfb 100644
--- a/bin/book-to-latex
+++ b/bin/book-to-latex
@@ -2,7 +2,48 @@
use strict;
use Pod::PseudoPod::LaTeX 1.101050;
-print <<'HEADER';
+# --------------------------------------------------------------------
+package Perl6BookLaTeX;
+
+use base 'Pod::PseudoPod::LaTeX';
+
+sub start_sidebar {
+ my ( $self, $flags ) = @_;
+ $self->{scratch} .= << 'EOT';
+\begin{figure}[!h]
+\footnotesize
+\sidebartop
+EOT
+ if ( $flags->{title} ) {
+ my $title = $self->encode_text( $flags->{title} );
+ $self->{scratch} .= << "EOT";
+\\begin{center}
+\\vspace{-\\baselineskip}
+\\vspace{-\\baselineskip}
+\\normalsize{\\bfseries{$title}}
+\\end{center}
+EOT
+ }
+ $self->{scratch} .= "\\vspace{-5pt}%\n";
+}
+
+# --------------------------------------------------------------------
+sub end_sidebar {
+ my $self = shift;
+ $self->{scratch} .= << 'EOT';
+\sidebarbottom
+\end{figure}
+EOT
+}
+
+# --------------------------------------------------------------------
+package main;
+
+main();
+
+# --------------------------------------------------------------------
+sub main {
+ print << 'HEADER';
\documentclass[11pt,a4paper,oneside]{report}
\usepackage{graphics,graphicx}
\usepackage{colortbl}
@@ -12,29 +53,92 @@ print <<'HEADER';
\usepackage[utf8]{inputenc}
\usepackage{makeidx}
\usepackage[colorlinks=true,pagebackref]{hyperref}
+\usepackage{calc}
\makeindex
\title{Using Perl~6}
\author{Jonathan S. Duff, Moritz Lenz, Carl Mäsak, Patrick R. Michaud,
Jonathan Worthington}
-
-\begin{document}
+HEADER
-\maketitle
+ # Sidebar Info. Units are points.
+ my %SI = (
+ rule_indent => 40,
+ text_indent => 50,
+ vert_thick => 1,
+ big_thick => 1.5,
+ gap_thick => 1,
+ sml_thick => 0.6,
+ tub_thick => 2,
+ );
+ $SI{vert_height} =
+ $SI{big_thick} + $SI{gap_thick} + $SI{sml_thick} + $SI{tub_thick};
+ $SI{rule_padding} = ($SI{rule_indent} + $SI{vert_thick}) * 2;
+ $SI{top_big_elev} = $SI{gap_thick} + $SI{sml_thick} + $SI{tub_thick};
+ $SI{top_sml_elev} = $SI{tub_thick};
+ $SI{bot_sml_elev} = $SI{big_thick} + $SI{gap_thick};
-\tableofcontents
-HEADER
+ print subst_tokens(\%SI, << 'EOT');
+\newcommand{\sidebartop}{%
+ \nointerlineskip\vspace{\baselineskip}%
+ \hskip «rule_indent»pt%
+ \rule[0pt]{«vert_thick»pt}{«vert_height»pt}%
+ \rule[«top_big_elev»pt]{\linewidth-«rule_padding»pt}{«big_thick»pt}%
+ \rule[0pt]{«vert_thick»pt}{«vert_height»pt}%
+ \par%
+ \vspace{-\baselineskip}%
+ \hskip «rule_indent»pt%
+ \hskip «vert_thick»pt%
+ \rule[«top_sml_elev»pt]{\linewidth-«rule_padding»pt}{«sml_thick»pt}%
+ \par%
+ \vspace{\baselineskip}%
+ \begingroup%
+ \leftskip «text_indent»pt%
+ \rightskip\leftskip%
+}
+EOT
-for (@ARGV) {
- my $parser = Pod::PseudoPod::LaTeX->new();
- $parser->codes_in_verbatim(1);
- $parser->output_fh( *STDOUT );
- $parser->parse_file( $_ );
+ print subst_tokens(\%SI, << 'EOT');
+\newcommand{\sidebarbottom}{%
+ \endgroup%
+ \nointerlineskip\vspace{\baselineskip}%
+ \hskip «rule_indent»pt%
+ \rule[0pt]{«vert_thick»pt}{«vert_height»pt}%
+ \rule[0pt]{\linewidth-«rule_padding»pt}{«big_thick»pt}%
+ \rule[0pt]{«vert_thick»pt}{«vert_height»pt}%
+ \par%
+ \vspace{-\baselineskip}%
+ \hskip «rule_indent»pt%
+ \hskip «vert_thick»pt%
+ \rule[«bot_sml_elev»pt]{\linewidth-«rule_padding»pt}{«sml_thick»pt}%
+ \par%
+ \vspace{\baselineskip}%
}
+EOT
-print <<'FOOTER';
+ print << 'START_DOC';
+\begin{document}
+\maketitle
+\tableofcontents
+START_DOC
-\printindex
+ for (@ARGV) {
+ my $parser = Perl6BookLaTeX->new();
+ $parser->codes_in_verbatim(1);
+ $parser->output_fh( *STDOUT );
+ $parser->parse_file( $_ );
+ }
+ print << 'FOOTER';
+\printindex
\end{document}
FOOTER
+}
+
+# --------------------------------------------------------------------
+sub subst_tokens {
+ my ($tokens_ref, $text) = @_;
+ $text =~ s/«([^»]*)»/$tokens_ref->{$1}/g;
+ return $text;
+}
+
--
1.6.5