From: Guenter M. <mi...@us...> - 2012-11-19 10:24:43
|
On 2012-11-15, SourceForge.net wrote: > Patches item #3587533 by kirr79 > https://sourceforge.net/tracker/?func=detail&atid=422032&aid=3587533&group_id=38414 ... > Submitted By: Kirill Smelkov (kirr79) > Summary: latex2e: Handle classes for bullet lists ... Dear Kirill, thanks for the patch to the LaTeX writer. > For example authors could customize documents as follows: > .. class:: compact > - item 1 > - item 2 > - item 3 > and expect the writer to apply the class. However, the Docutils documentation makes it clear that handling of class arguments by writers is optional: http://docutils.sourceforge.net/docs/ref/doctree.html#classes > This works for html writer, > but not yet for latex2e/xetex and that's why this patch is here. I agree that support for class arguments in LaTeX can/should be extended to include more useful cases. Docutils already adds a mechanism with the ``DUrole`` command, which could be employed here. Suggestion: handle class arguments for bullet lists similar to block-quotes: +1 simple, +1 applicable to other elements without inflating latex2e/__init__.py nor the generated LaTeX source. Dir: /home/milde/Code/Python/docutils-svn/docutils/docutils/writers/latex2e/ Index: __init__.py =================================================================== --- __init__.py (Revision 7527) +++ __init__.py (Arbeitskopie) @@ -553,7 +553,7 @@ PreambleCmds.inline = r""" % inline markup (custom roles) % \DUrole{#1}{#2} tries \DUrole#1{#2} -\providecommand*{\DUrole}[2]{% +\providecommand{\DUrole}[2]{% \ifcsname DUrole#1\endcsname% \csname DUrole#1\endcsname{#2}% \else% backwards compatibility: try \docutilsrole#1{#2} @@ -1595,8 +1595,12 @@ self.out.append( '%\n\\begin{list}{}{}\n' ) else: self.out.append( '%\n\\begin{itemize}\n' ) + if node['classes']: + self.visit_inline(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: The above example would produce the code snippet:: \begin{itemize} \DUrole{compact}{ \item item 1 \item item 2 \item item 3 } \end{itemize} This works as expected with a custom stylesheet defining:: \newcommand{\DUrolecompact}{% > \small% > \itemsep=0pt\parskip=0pt% > } > which makes text a bit smaller and tightens inter-line gaps. > NOTES: * Instead of a new environment definition, the already established mechanism and macro name for custom inline roles is re-used. * The change of the \DUrole definition in line 553 allows for multi-paragraph content. This also fixes multi-paragraph quotes. * the definition of ``\DUrolecompact`` affects **all** elements with the class argument "compact" (if the element is of a type where the LaTeX writer supports class arguments). It may be more safe to define \DUrolecompact like :: \newcommand{\DUrolecompact}[1]{% {\small% \itemsep=0pt\parskip=0pt% #1% }% } (untested). * Alternatively, one could consider a \DUclass macro without argument for styling of environments:: PreambleCmds.class = r""" % class arguments % \DUclass{#1} tries \DUrole#1 \providecommand{\DUclass}[1]{% \ifcsname DUclass#1\endcsname% \csname DUclass#1\endcsname% \fi% }""" +1 simpler than \DUrole -1 new name and function needs extra documentation -1 more preamble code if both, inline elements and block elements have class arguments. * As opinion differs whether a compact list should have a smaller font size or not, I'd rather not add this definition to the LaTeX writer. Feel free to add a "compact-lists.sty" style-sheet to the sandbox stylesheet collection. http://docutils.sourceforge.net/sandbox/stylesheets/ > * There is no \provideenvironment in LaTeX, so plain \newenviroment > is used. This has the disadvantage that it cannot be overwritten, which means it should not be hard-coded in the writer. If you agree to the ideas above, I'll commit the above patch. Thanks again, Günter |