Re: broken ..epigraph in XeTeX?

Guenter Milde <[email protected]>
Newsgroups gmane.text.docutils.user
Message-ID <[email protected]>
On 2017-02-04, Alan G. Isaac wrote:
> On 2/4/2017 11:51 AM, Matěj Cepl wrote:
>>     \begin{quote}
>>     \DUrole{epigraph}{
>>     Co je nejvyšším cílem člověka?

>>     Nejvyšším cílem člověka je oslavovat Boha a věčně se z Něj
>>     radovat.
>>     \nopagebreak

>>     \raggedleft —Westminsterský katechismus, 1647
>>     }
>>     \end{quote}



> Is this another abuse of the ``quote`` environment
> to accomplish indentation?

No. See the description of the "epigraph" directive.

Docutils converts it to 

    <block_quote classes="epigraph">

and currently handling of block-quotes and some other environments with
classes is broken. 

This will be fixed soon.

> If so, this again compromises the ability to separately style quotes
> and other content (in this case, epigraphs).

Not if the class arguments are handled correctly.

> Note that the ``changepage`` package provides ``adjustwidth``.
> E.g., one could define
> \newenvironment{DUepigraph}%
> {\begin{adjustwidth}{2cm}{}}%
> {\end{adjustwidth}}

> Other default formatting could be added as desired.
> This approach would allow authors to readily modify
> the ``epigraph`` environment (with ``renewenvironment``)
> without interfering with other environments.

> The ``quote`` environment is for (one paragraph) quotes.
> It is not a general indentation facility.
> https://en.wikibooks.org/wiki/LaTeX/Paragraph_Formatting#Quoting_text

Both "quote" and "quotation" provide for multiple paragraphs.
(Just try it.)

The error originates in the \DUrole definition with \providecommand*,
the star makes this check for paragraph breaks in the argument.


Patch attached.

Günter

Dir: docutils-svn/docutils/docutils/writers/latex2e/

Index: __init__.py
===================================================================
--- __init__.py	(Revision 8020)
+++ __init__.py	(Arbeitskopie)
@@ -494,6 +494,7 @@
 PreambleCmds.align_center = r"""
 \makeatletter
 \@namedef{DUrolealign-center}{\centering}
+\@namedef{DUclassalign-center}{\centering}
 \makeatother
 """
 
@@ -512,6 +513,15 @@
 % dedication topic
 \providecommand{\DUtopicdedication}[1]{\begin{center}#1\end{center}}"""
 
+PreambleCmds.DUclass = r"""
+% class handling for environments (block-level elements)
+% \DUclass{#1} tries \DUrole#1
+\providecommand{\DUclass}[1]{%
+  \ifcsname DUclass#1\endcsname%
+    \csname DUclass#1\endcsname%
+  \fi%
+}"""
+
 PreambleCmds.error = r"""
 % error admonition title
 \providecommand*{\DUtitleerror}[1]{\DUtitle{\color{red}#1}}"""
@@ -1568,6 +1578,19 @@
             labels.insert(0, '\\phantomsection')
         return labels
 
+    def insert_DUclass_macros(self, node):
+        for cls in node['classes']:
+            if cls == 'align-center':
+                self.fallbacks['align-center'] = PreambleCmds.align_center
+            if cls.startswith('language-'):
+                language = self.babel.language_name(cls[9:])
+                if language:
+                    self.babel.otherlanguages[language] = True
+                    self.out.append('\\selectlanguage{%s}%\n' % language)
+            else:
+                self.fallbacks['DUclass'] = PreambleCmds.DUclass
+                self.out.append('\\DUclass{%s}%%\n' % cls)
+
     def push_output_collector(self, new_out):
         self.out_stack.append(self.out)
         self.out = new_out
@@ -1631,12 +1654,9 @@
 
     def visit_block_quote(self, node):
         self.out.append( '%\n\\begin{quote}\n')
-        if node['classes']:
-            self.visit_inline(node)
+        self.insert_DUclass_macros(node)
 
     def depart_block_quote(self, node):
-        if node['classes']:
-            self.depart_inline(node)
         self.out.append( '\n\\end{quote}\n')
 
     def visit_bullet_list(self, node):
@@ -1644,12 +1664,9 @@
             self.out.append( '%\n\\begin{list}{}{}\n' )
         else:
             self.out.append( '%\n\\begin{itemize}\n' )
-        # if node['classes']:
-        #     self.visit_inline(node)
+        self.insert_DUclass_macros(node)
 
     def depart_bullet_list(self, node):
-        # if node['classes']:
-        #     self.depart_inline(node)
         if self.is_toc_list:
             self.out.append( '\n\\end{list}\n' )
         else:
@@ -1813,6 +1830,7 @@
 
     def visit_definition_list(self, node):
         self.out.append( '%\n\\begin{description}\n' )
+        self.insert_DUclass_macros(node)
 
     def depart_definition_list(self, node):
         self.out.append( '\\end{description}\n' )
@@ -2093,11 +2111,11 @@
         if 'start' in node:
             self.out.append('\\setcounter{%s}{%d}\n' %
                             (counter_name,node['start']-1))
+        self.insert_DUclass_macros(node)
         #     ## set rightmargin equal to leftmargin
         #     self.out.append('\\setlength{\\rightmargin}{\\leftmargin}\n')
 
 
-
     def depart_enumerated_list(self, node):
         if len(self._enumeration_counters) <= 4:
             self.out.append('\\end{enumerate}\n')
@@ -2130,6 +2148,7 @@
         if self.out is not self.docinfo:
             self.fallbacks['fieldlist'] = PreambleCmds.fieldlist
             self.out.append('%\n\\begin{DUfieldlist}\n')
+        self.insert_DUclass_macros(node)
 
     def depart_field_list(self, node):
         if self.out is not self.docinfo:
@@ -2163,6 +2182,7 @@
             self.out.append('\n\\begin{figure}\n')
         if node.get('ids'):
             self.out += self.ids_to_labels(node) + ['\n']
+        self.insert_DUclass_macros(node)
 
     def depart_figure(self, node):
         self.out.append('\\end{figure}\n')
@@ -2391,14 +2411,9 @@
                              '\\begin{DUlineblock}{\\DUlineblockindent}\n')
         else:
             self.out.append('\n\\begin{DUlineblock}{0em}\n')
-        if node['classes']:
-            self.visit_inline(node)
-            self.out.append('\n')
+        self.insert_DUclass_macros(node)
 
     def depart_line_block(self, node):
-        if node['classes']:
-            self.depart_inline(node)
-            self.out.append('\n')
         self.out.append('\\end{DUlineblock}\n')
 
     def visit_list_item(self, node):
@@ -2576,6 +2591,7 @@
         self.fallbacks['_providelength'] = PreambleCmds.providelength
         self.fallbacks['optionlist'] = PreambleCmds.optionlist
         self.out.append('%\n\\begin{DUoptionlist}\n')
+        self.insert_DUclass_macros(node)
 
     def depart_option_list(self, node):
         self.out.append('\n\\end{DUoptionlist}\n')
@@ -2731,6 +2747,7 @@
         self.requirements['color'] = PreambleCmds.color
         self.fallbacks['sidebar'] = PreambleCmds.sidebar
         self.out.append('\n\\DUsidebar{\n')
+        self.insert_DUclass_macros(node)
 
     def depart_sidebar(self, node):
         self.out.append('}\n')


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Docutils-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/docutils-users

Please use "Reply All" to reply to the list.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.