morefloats control
authorRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Wed, 22 Dec 2010 16:16:51 +0000 (17:16 +0100)
committerRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Wed, 22 Dec 2010 16:33:26 +0000 (17:33 +0100)
librarian/pdf.py
librarian/xslt/wl2tex.xslt
scripts/book2pdf

index 32fa571..5debb68 100644 (file)
@@ -158,7 +158,8 @@ def package_available(package, args='', verbose=False):
     return p == 0
 
 
     return p == 0
 
 
-def transform(provider, slug=None, file_path=None, output_file=None, output_dir=None, make_dir=False, verbose=False, save_tex=None):
+def transform(provider, slug=None, file_path=None, 
+              output_file=None, output_dir=None, make_dir=False, verbose=False, save_tex=None, morefloats=None):
     """ produces a PDF file with XeLaTeX
 
     provider: a DocProvider
     """ produces a PDF file with XeLaTeX
 
     provider: a DocProvider
@@ -169,6 +170,7 @@ def transform(provider, slug=None, file_path=None, output_file=None, output_dir=
     make_dir: writes output to <output_dir>/<author>/<slug>.pdf istead of <output_dir>/<slug>.pdf
     verbose: prints all output from LaTeX
     save_tex: path to save the intermediary LaTeX file to
     make_dir: writes output to <output_dir>/<author>/<slug>.pdf istead of <output_dir>/<slug>.pdf
     verbose: prints all output from LaTeX
     save_tex: path to save the intermediary LaTeX file to
+    morefloats (old/new/none): force specific morefloats
     """
 
     # Parse XSLT
     """
 
     # Parse XSLT
@@ -183,9 +185,10 @@ def transform(provider, slug=None, file_path=None, output_file=None, output_dir=
             document = load_including_children(provider, slug=slug)
 
         # check for LaTeX packages
             document = load_including_children(provider, slug=slug)
 
         # check for LaTeX packages
-        if not package_available('morefloats', 'maxfloats=19'):
-            # using old morefloats or none at all
-            document.edoc.getroot().set('old-morefloats', 'yes')
+        if morefloats:
+            document.edoc.getroot().set('morefloats', morefloats.lower())
+        elif package_available('morefloats', 'maxfloats=19'):
+            document.edoc.getroot().set('morefloats', 'new')
 
         # hack the tree
         move_motifs_inside(document.edoc)
 
         # hack the tree
         move_motifs_inside(document.edoc)
index 0e2dbfe..61b22b0 100644 (file)
         </TeXML>
 
         <xsl:choose>
         </TeXML>
 
         <xsl:choose>
-            <xsl:when test="@old-morefloats">
+            <xsl:when test="@morefloats = 'new'">
                 <TeXML escape="0">
                 <TeXML escape="0">
-                    \IfFileExists{morefloats.sty}{
-                        \usepackage{morefloats}
-                    }{}
+                    \usepackage[maxfloats=64]{morefloats}
                 </TeXML>
             </xsl:when>
                 </TeXML>
             </xsl:when>
+            <xsl:when test="@morefloats = 'old'">
+                <TeXML escape="0">
+                    \usepackage{morefloats}
+                </TeXML>
+            </xsl:when>
+            <xsl:when test="@morefloats = 'none'" />
             <xsl:otherwise>
                 <TeXML escape="0">
             <xsl:otherwise>
                 <TeXML escape="0">
-                    \usepackage[maxfloats=64]{morefloats}
+                    \IfFileExists{morefloats.sty}{
+                        \usepackage{morefloats}
+                    }{}
                 </TeXML>
             </xsl:otherwise>
         </xsl:choose>
                 </TeXML>
             </xsl:otherwise>
         </xsl:choose>
index a4382fe..fd69970 100755 (executable)
@@ -23,6 +23,8 @@ if __name__ == '__main__':
                       help='specifies the output file')
     parser.add_option('-O', '--output-dir', dest='output_dir', metavar='DIR',
                       help='specifies the directory for output')
                       help='specifies the output file')
     parser.add_option('-O', '--output-dir', dest='output_dir', metavar='DIR',
                       help='specifies the directory for output')
+    parser.add_option('-m', '--morefloats', dest='morefloats', metavar='old/new/none',
+                      help='force morefloats in old (<1.0c), new (>=1.0c) or none')
     (options, args) = parser.parse_args()
 
     if len(args) < 1:
     (options, args) = parser.parse_args()
 
     if len(args) < 1:
@@ -30,13 +32,16 @@ if __name__ == '__main__':
         exit(1)
 
     try:
         exit(1)
 
     try:
+        if options.output_dir and options.output_file:
+            raise ValueError("Either --output-dir or --output file should be specified")
+
         for main_input in args:
             if options.verbose:
                 print main_input
             path, fname = os.path.realpath(main_input).rsplit('/', 1)
             provider = DirDocProvider(path)
 
         for main_input in args:
             if options.verbose:
                 print main_input
             path, fname = os.path.realpath(main_input).rsplit('/', 1)
             provider = DirDocProvider(path)
 
-            output_dir = output_file = None
+            output_file = output_dir = None
             if options.output_dir:
                 output_dir = options.output_dir
             elif options.output_file:
             if options.output_dir:
                 output_dir = options.output_dir
             elif options.output_file:
@@ -44,9 +49,17 @@ if __name__ == '__main__':
             else:
                 output_dir = path
 
             else:
                 output_dir = path
 
-            pdf.transform(provider, file_path=main_input, output_file=output_file, output_dir=output_dir, make_dir=options.make_dir, verbose=options.verbose, save_tex=options.save_tex)
+            pdf.transform(provider, 
+                file_path=main_input, 
+                output_file=output_file, 
+                output_dir=output_dir,
+                verbose=options.verbose,
+                make_dir=options.make_dir,
+                save_tex=options.save_tex,
+                morefloats=options.morefloats
+                )
     except ParseError, e:
     except ParseError, e:
-        print '%(file)s:%(name)s:%(message)s' % {
+        print '%(file)s:%(name)s:%(message)s; use -v to see more output' % {
             'file': main_input,
             'name': e.__class__.__name__,
             'message': e.message
             'file': main_input,
             'name': e.__class__.__name__,
             'message': e.message