You certainly need hooks for a preamble where all macros, variables, and environments are defined.
Bringing Velocity to write LaTeX is probably enjoyable since you can be very
free to input text source, I am wondering if there are no escaping issues.
Maybe with the $ sign which is used for math formulæ? (and $$ for “centered
math”). All #-signs should be gone by the time LaTeX runs… this is still used
in rare times (for special layouts). At least these escaping mechanisms should
be explained close to the TeX-related documentation.
paul
On 15 Feb 2018, at 20:47, Vincent Massol wrote:
> Ok I’ve now realized that the 2 approaches mentioned so far are not going to
> work:
> * The first one mixes content and styling and is complex for the user to use
> * The second one is actually very limited and doesn’t allow full control of
> the LaTeX markup used
>
> So I’ve been thinking about a new approach that would both separate the
> content from the styling and at the same time allow full control of the
> produced LaTeX for perfect typesetting.
>
> The idea is:
> * Don’t provide a Listener for LaTeX in XWiki and instead only provide a
> BlockRenderer (i.e. no streaming generation of content). That’s the
> limitation.
> * For each XWiki Block object, provide a default LaTeX template that is
> called to generate the LaTeX content.
> * Allow Velocity in the LaTeX template and provide velocity tools + bind the
> passed Block to the $block variable.
> * For example for TableBlock:
>
> ---- start here ----
> ## Compute the number of columns
> #set ($firstRowBlock = $blocks.getChildren().get(0))
> #set ($columnSize = $firstRowBlock.getChildren().size())
> #set ($tableSpec = "${stringtool.repeat("l|", $columnSize - 1)}l"
> \begin{tabular}{${tableSpec}}
> ## For all rows
> #foreach ($rowBlock in $blocks.getChildren())
> ## for all cells
> #foreach ($cellBlock in $rowBlock.getChildren())
> #processTemplates($cellBlock.getChildren()) &
> ## TODO: if last cell then output ""\\"
> #end
> ## TODO: if last row then don't output \hline
> \hline
> #end
> \end{tabular}
> ---- end here -----
>
> * Users will be able to override the default templates for each Block
> * If the user wants to use a special template for a specific Block, define it
> using a “tex-template” parameter. For example:
>
> (% tex-template=‘customTemplateForThisTable’ %)
> |=A|=B
> |a|b
>
> * A template can set any variable in the VelocityContext so that templates
> downstream can access them.
>
> There are still details to iron out ofc.
>
> WDYT?
>
> Thanks
> -Vincent
>
>> On 14 Feb 2018, at 21:01, Vincent Massol <[email protected]> wrote:
>>
>> Hi devs,
>>
>> I’m currently working on improving our TeX renderer (which is really a POC
>> ATM), in an effort to see if it could be used to generate nice PDF exports
>> (you generate LaTeX and then you convert to PDF).
>>
>> The main issue is that LaTeX doesn’t have any technology for applying style
>> to it (like CSS has for HTML). In addition I wasn’t able to find any good
>> HTML+CSS to TeX converter (as we have for PDFs with XSLT+FOP).
>>
>> So right now my idea is to implement some default behavior in the Tex
>> Renderer (that could be configured globally in xwiki.properties and/or in
>> the Admin UI) and give the ability to override specifically in the content.
>>
>> For example, imagine that you need to decide how to position table column
>> content (left, centered, right) or whether the rows and/or columns of your
>> table have vertical and horizontal lines (or other configs, autowrap, etc).
>>
>> The idea is that the Tex Renderer would support some custom tex-specific
>> parameters. For example:
>>
>> (% tex-table-spec=“c | c | c" tex-table-floating="true"
>> tex-table-caption="caption" %)
>> |=A|=B
>> (% tex-table-row-ending="\hline" %)|a|b
>>
>> (by default the table spec would be left aligned with vertical lines, and
>> rows would be separated by horizontal lines).
>>
>> If you have some comments or ideas, please let me know.
>>
>> Inventing a CSS-like mechanism would just be too hard to implement IMO.
>>
>> Thanks
>> -Vincent
>>
>> PS: If you want to see table options in LaTeX, see
>> https://en.wikibooks.org/wiki/LaTeX/Tables
>>
signature.asc
Description: OpenPGP digital signature

