Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • May 17 10:56
    pgundlach closed #368
  • May 17 10:56
    pgundlach commented #368
  • May 17 10:06
    pgundlach closed #268
  • May 17 10:06

    pgundlach on develop

    Table breaking: long last table… Version 4.9.5 (compare)

  • May 13 09:39
    pgundlach commented #369
  • May 13 09:37
    pgundlach closed #369
  • May 13 09:37

    pgundlach on develop

    Better fix for ZWJ appearing in… Minor code cleanup, schema chan… Version 4.9.4 (compare)

  • May 12 09:56
    khaledhosny commented #369
  • May 12 07:01
    pgundlach commented #369
  • May 12 02:56
    khaledhosny commented #369
  • May 11 07:41
    pgundlach commented #369
  • May 11 07:40
    pgundlach reopened #369
  • May 11 07:40
    pgundlach commented #369
  • May 10 22:42
    khaledhosny commented #369
  • May 10 22:18
    khaledhosny commented #369
  • May 10 08:12
    pgundlach closed #369
  • May 10 08:12

    pgundlach on develop

    Set the PDF version Fix space from ZWJ appearing in… Version 4.9.3 (compare)

  • May 10 06:45
    pgundlach commented #369
  • May 09 14:33
    pgundlach labeled #369
  • May 09 14:33
    pgundlach assigned #369
Andreas Lenhardt
@AndiLeni
grafik.png

Hallo,
ich wollte mir mithilfe des pusblishers einen akademischen Kalender erstellen.
Leider blicke ich noch nicht ganz durch mit der layout erstellung und wie wiederholbare daten passend eingetragen werden können.
Gibt es irgendwo ein beispiel für so ein ähnliches Layout?

Danke und VG
Andreas

Als data.xml hatte ich mit so eine Struktur generiert, also je seite geordnet:
<year>
  <month name="Januar">
    <page page="1">
      <day>Mo. 28 12 2020</day>
      <day>Di. 29 12 2020</day>
      <day>Mi. 30 12 2020</day>
      <day>Do. 31 12 2020</day>
    </page>
    <page page="2">
      <day>Fr. 01 01 2021</day>
      <day>Sa. 02 01 2021</day>
      <day>So. 03 01 2021</day>
      <day>Notizen</day>
    </page>
    <page page="3">
      <day>Mo. 04 01 2021</day>
      <day>Di. 05 01 2021</day>
      <day>Mi. 06 01 2021</day>
      <day>Do. 07 01 2021</day>
    </page>
    <page page="4">
      <day>Fr. 08 01 2021</day>
      <day>Sa. 09 01 2021</day>
      <day>So. 10 01 2021</day>
      <day>Notizen</day>
    </page>
...
Patrick Gundlach
@pgundlach
@AndiLeni Ich schicke dir morgen ein Beispiel
Patrick Gundlach
@pgundlach
@AndiLeni One way to get the layout would be the following:
<Layout xmlns="urn:speedata.de:2009/publisher/en"
    xmlns:sd="urn:speedata:2009/publisher/functions/en">

    <SetGrid ny="4" nx="2"/>

    <Record element="year">
        <ProcessNode select="*" />
    </Record>

    <Record element="month">
        <ProcessNode select="*" />
    </Record>

    <Record element="page">
        <SetVariable variable="column" select="sd:alternating('col',1,2)"/>
        <ProcessNode select="*" />
        <Switch>
            <Case test="$column = 2">
                <NewPage />
            </Case>
        </Switch>
    </Record>

    <Record element="day">
        <Group name="day">
            <Grid height="18pt" width="12pt"/>
            <Contents>
                <PlaceObject background="full" backgroundcolor="red">
                    <Table width="2cm" padding="4mm">
                        <Tr minheight="2cm" valign="middle">
                            <Td align="center">
                                <Paragraph><Value select="."/></Paragraph>
                            </Td>
                        </Tr>
                    </Table>
                </PlaceObject>
                <NextRow rows="2"/>
                <Loop select="5">
                    <PlaceObject column="1">
                        <Rule direction="horizontal" length="8cm" />
                    </PlaceObject>
                    <NextRow />
                </Loop>
            </Contents>
        </Group>
        <PlaceObject groupname="day" column="{$column}" row="{position()}"/>
    </Record>
</Layout>
cal.png
Andreas Lenhardt
@AndiLeni
Thanks for the answer!
I intended to create a layout like a book, four entries on one page and four on the other.
I will try to adapt your example and see if I can get what I want, thank you very much! :-)
Patrick Gundlach
@pgundlach
@AndiLeni Always keep in mind that there are many posibilities to get the same (visible) result with different programming approaches. If the approach above might not be suitable for your needs, don't hesitate to ask again. I'l be happy to help. If you need a bit more structured discussion, you can try https://github.com/speedata/publisher/discussions
Andreas Lenhardt
@AndiLeni
@pgundlach Thanks, I will keep that in mind :)
Joerg
@jorg.l_gitlab
Gibt es eine Möglichkeit, eine große Anzahl einzelner PDF-Dateien zu erstellen?
Hintergrund: Ich möchte mit speedata automatisieren, was ich bisher in der Nachbearbeitung getan habe. Aus einer data.xml soll nicht eine PDF mit vielen Seiten, sondern viele PDF mit einer Seite oder nur wenigen Seiten erstellt werden. Bisher habe ich die erstellte PDF mit einem externen Programm anhand der PDF-Bookmarks (level="1") in einzelne Dateien aufgeteilt mit dem Bookmark-Namen jeweils als Dateinamen.
Da die Seitenzahl der mit speedata erzeugten PDF-Datei nicht unbegrenzt ist, wäre es natürlich schön, wenn man statt dessen eine fast unbegrenzte Zahl einzelner Dateien erzeugen könnte.
Patrick Gundlach
@pgundlach
@jorg.l_gitlab Ein Publisher-Aufruf ist immer genau eine PDF-Datei.
@jorg.l_gitlab Also entweder das PDF splitten oder vorher die Eingabe, jeweils mit einem eigenen sp-Aufruf
Joerg
@jorg.l_gitlab
Danke für die Antwort. Dann muss ich damit leben. Hintergrund war, dass sp für eine Datei mit 1000 Seiten wesentlich weniger Zeit braucht als für 1000 Dateien mit einer Seite, da z. B. immer alle Fonts geladen werden müssen.
Joerg
@jorg.l_gitlab
Ich habe gleich noch etwas. string-lengthscheint nicht zu funktionieren. Ich will die letzen 3 Zeichen abschneiden entsprechend https://www.wilfried-grupe.de/substring.html. Ein <Value select="substring(testwert, 1, string-length(testwert)-3)"/> führt leider zu einer Fehlermeldung.
Patrick Gundlach
@pgundlach
@jorg.l_gitlab Funktioniert es, wenn du substring(string(testwert), 1, string-length(string(testwert))-3) schreibst? Wahrscheinlich habe ich eine implizite Umwandlung nach string vergessen.
Joerg
@jorg.l_gitlab
Ja, das funktioniert. Es funktioniert auch substring(testwert, 1, string-length(string(testwert))-3), d. h. substring ist in Ordnung.
whaslbeck
@whaslbeck

Hallo,

ich würde gerne ein einfaches Inhaltsverzeichnis erstellen und hab das wie in der Doku umgesetzt(?). Problem: das ToC wird zwar richtig erstellt, aber zweimal ausgegeben (am Anfang und am Ende des Dokuments). Was mache ich falsch?

Ich verwende Version 4.6.0 (aufruf mit ... --runs=3)

data.xml

<articles>
    <article>
        <title>First Title</title>
        <section>A Section</section>
        <section>Next Section</section>
    </article>
    <article>
        <title>Second Title</title>
        <section>first section of second article</section>
        <section>second section of second article</section>
    </article>
</articles>

layout.xml

<Layout xmlns="urn:speedata.de:2009/publisher/en" xmlns:sd="urn:speedata:2009/publisher/functions/en">
    <Record element="tableofcontents">
        <PlaceObject>
          <Table padding="5pt">
            <ForAll select="entry">
              <Tr>
                <Td>
                  <Paragraph>
                    <Value select="@chaptername" />
                  </Paragraph>
                </Td>
                <Td>
                  <Paragraph>
                    <Value select="@page" />
                  </Paragraph>
                </Td>
              </Tr>
            </ForAll>
          </Table>
        </PlaceObject>
        <ClearPage />
      </Record>

      <Record element="articles">    
        <LoadDataset name="toc" />
        <SetVariable variable="entries" />
        <ProcessNode select="article" />
        <LoadDataset name="toc" />
        <SaveDataset name="toc" elementname="tableofcontents" select="$entries" />
      </Record>

      <Record element="article">
        <SetVariable variable="entries">
          <Copy-of select="$entries" />
          <Element name="entry">
            <Attribute name="chaptername" select="title" />
            <Attribute name="page" select="sd:current-page()" />
          </Element>
        </SetVariable>
        <PlaceObject>
          <Textblock><Paragraph><Value select="title" /></Paragraph></Textblock>
        </PlaceObject>
        <ForAll select="section">
          <Output><Text><Paragraph><Value select="string(.)"/></Paragraph></Text></Output>
        </ForAll>
        <ClearPage />
      </Record>

</Layout>
Patrick Gundlach
@pgundlach
@whaslbeck Hier ist das <LoadDataset> zweifach vorhanden. Für jedes Mal wird ausgeführt, was in tableofcontents steht (das Wurzelelement der Datendatei).
whaslbeck
@whaslbeck
Danke, das wars :-)
whaslbeck
@whaslbeck
Hallo, noch eine Frage: im obigen Konstrukt kann es vorkommen, das in <section> ein mehrzeiliger Text steht (Zeilenenden mit <br />)... das klappt soweit. Aber: wie kann erreichen, das der Inhalt einer <section> komplett auf eine neue Seite kommt, wenn er auf der aktuellen keinen Platz mehr hat? (d.h. kein Seitenumbruch innerhalb <Output>?)
Patrick Gundlach
@pgundlach
@whaslbeck anstelle von Output PlaceObject/Textblock nehmen. Je nach Situation wäre das eine Lösung. Oder in eine Group packen. Hilft das schon weiter?
whaslbeck
@whaslbeck
Merci! Mit PlaceObject/Textblock klappts perfekt!
Joerg
@jorg.l_gitlab
Im Blog "Neue Version 4.6" steht "Die Anzahl der Durchläufe kann gesetzt werden (siehe https://doc.speedata.de/publisher/de/konfiguration/)." Leider ist am Ende des Links eine Klammer zuviel, so dass er ins Nichts führt.
Patrick Gundlach
@pgundlach
@jorg.l_gitlab Vielen Dank! Ist korrigiert
Brandon Kalinowski
@brandonkal
Hello I am not able to get this running on macOS. I posted a bug report, but essentially sdluatex quits early. Any ideas?
conradreisch
@conradreisch
Hallo zusammen,
gibt es eine Möglichkeit geschickt auf Knoten mit "mixed content" zuzugreifen? Innerhalb von z.B. Paragraph können mehrere Values verarbeitet werden. Das funktioniert super in dem moment wo man nur text im Knoten hat (z.B. select=".").
Ich frage mich nun, ob es eine Möglichkeit gibt einen Knoten der Art "<p>Dies ist ein Text mit <i>wirklich</i> wichtigen und <nobr>untrennbarem Inhalt</nobr></p>" geschickt zu verarbeiten.
Aktuell sehe ich nur die Möglichkeit in einer Schleife Zeichen für Zeichen bzw. Wort für Wort durch den Text des gesamten Knotens zu gehen.
Vielen Dank für eure Unterstützung!
Grüße Conrad
conradreisch
@conradreisch
P.S.: Mit ist bewusst, dass ich auch den Knoten "p" in diesem Beispiel so formatieren könnte, dass ich mixed content vermeide. Die option würde ich aber gerne ausklammern.
Patrick Gundlach
@pgundlach
@conradreisch Nein, das gibt es leider nicht. Ich habe bisher immer mit XSLT vorher diese Elemente in Einzelteile gebrochen und dann darauf zugegriffen. Ab und zu nervte mich das auch, aber nicht so sehr, dass ich dafür was eingebaut habe.
conradreisch
@conradreisch
@pgundlach Danke für die schnelle Antwort. Ein guter Hinweis mit dem XSLT. Wenn ich alles in einem Aufruf bearbeiten will könnte ich dann sp mit dem “—filter” schalter aufrufen und das xml dort transformieren, richtig?
conradreisch
@conradreisch
Ich ziehe meine Frage zurück. Ist bereits wunderbar im Handbuch beschrieben
;-)
Vielen Dank! Ein super Handbuch by the way!
Patrick Gundlach
@pgundlach
Danke!
conradreisch
@conradreisch

Eine Frage bevor ich mich an die Umsetzung mache: Gibt es vielleicht schon ein Beispiel wie man die Transformation von geschachtelten mixed content Knoten so machen kann, dass das Ergebnis nahe am SP Eingabeformat ist?

Beispiel:

<p>Dies ist ein Beispieltext mit <nobr><i>wichtigem</i> und untrennbarem</nobr> Inhalt.</p>

sollte zu

<value>Dies ist ein Beispieltext mit </value><nobr><i><value>wichtigen</value></i><value> und untrennbarem</value></nobr><value> Inhalt.</value>

werden.

Oder einfach gesagt, alles was zwischen ">" und "<" steht und mindestens ein Zeichen Inhalt hat, soll noch einmal in <value/> verpackt werden.

Patrick Gundlach
@pgundlach
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
  <xsl:output indent="yes"/>
  <xsl:template match="data">
    <xsl:apply-templates/>
  </xsl:template>

  <xsl:template match="*">
    <xsl:element name="{local-name()}">
      <xsl:apply-templates></xsl:apply-templates>
    </xsl:element>
  </xsl:template>

  <xsl:template match="text()" >
    <value><xsl:value-of select="."/></value>
  </xsl:template>

</xsl:stylesheet>
In etwa so...
<?xml version="1.0" encoding="UTF-8"?>
<value>
  </value>
<p>
   <value>Dies ist ein Beispieltext mit </value>
   <nobr>
      <i>
         <value>wichtigem</value>
      </i>
      <value> und untrennbarem</value>
   </nobr>
   <value> Inhalt.</value>
</p>
<value>
</value>
conradreisch
@conradreisch
Kann es sein, dass man für Lua eine Java Runtime braucht?
Patrick Gundlach
@pgundlach
@conradreisch Nein, aber für die XSLT-Transformationen
conradreisch
@conradreisch
Deinen XSLT Code verstehe ich zumindest schon mal. Es läuft noch nicht. Aber das bekomme ich bestimmt noch zum Laufen. Vielen lieben Dank! Da hätte ich mich alleine vermutlich schwer getan
conradreisch
@conradreisch
Für die Nachwelt - Inzwischen habe ich eine funktionierende Version, die alle texte im Knoten "paragraph" und dessen subknoten ersetzt:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
    <xsl:output indent="yes" />

    <!-- Copy everything -->
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*" />
        </xsl:copy>
    </xsl:template>


    <!-- Add "value" node around text within paragraph -->
    <xsl:template match="paragraph/text()">
        <value>
            <xsl:value-of select="." />
        </value>
    </xsl:template>

    <!-- Add "value" node around text within subnodes of paragraph -->
    <xsl:template match="paragraph//*/text()">
        <value>
            <xsl:value-of select="." />
        </value>
    </xsl:template>

</xsl:stylesheet>
conradreisch
@conradreisch
Eine kurze Frage noch - ist es ein Fehler das DOCTYPE im data.xml nicht unterstützt wird?
Das folgende XML bringt SP zum Absturz. Ohne den doctype wird in VSCode eine Warnung ausgegeben wenn man nbsp(html) im Text benutzt (siehe option html im Paragraph).
<?xml version="1.0"?>
<!DOCTYPE data [
  <!ENTITY nbsp "entity-value">
]>
<data>
</data>
(hab nochmal editiert)
Patrick Gundlach
@pgundlach
@conradreisch doctype wird nicht unterstützt. Die HTML entities werden, soweit ich das in Erinnerung hab, korrekt umgesetzt. (Ja, das müsste eigentlich ein Fehler sein)
conradreisch
@conradreisch
@pgundlach - ok, ich schaue mal, ob es noch weitere Möglichkeiten gibt in VSCode die Warnung bei nbsp loszuwerden. Ansonsten mache ich mal ein issue in Github auf. SP muss den Doctype ja nicht verarbeiten. Es wäre aber schön, wenn es sich nicht daran stört wenn ein Doctype vorhanden ist.
Patrick Gundlach
@pgundlach
👍
jcpsantiago
@jcpsantiago:matrix.org
[m]

👋hello everyone! I'm typesetting a medical book in collaboration with my wife (she's the author). I'm using InDesign right now, but the lack of version control (e.g. with git) made me look for alternatives and I found speedata (I'm even in Berlin too :D). I've used some LaTeX before but creating my own layout looked way too complicated so your solution looks much more appealing. Most examples are from catalogs and other "database publishing" workflows, so I'm wondering if Speedata is also suitable for my type of book.

  • double columns, tables, images etc I see it's possible to do
  • Word index, define size of binding I have not
  • we are making footnotes composed of QR-Codes and I'm wondering if that's something that could also be handled automatically. In InDesign I need to take care of the numeration by hand which leads to chaos and tears

We plan to release a new edition every year, so having an automated and version controlled workflow is very important for me

jcpsantiago
@jcpsantiago:matrix.org
[m]

:point_up: Edit: 👋hello everyone! I'm typesetting a medical book in collaboration with my wife (she's the author). I'm using InDesign right now, but the lack of version control (e.g. with git) made me look for alternatives and I found speedata (I'm even in Berlin too :D). I've used some LaTeX before but creating my own layout looked way too complicated so your solution looks much more appealing. Most examples are from catalogs and other "database publishing" workflows, so I'm wondering if Speedata is also suitable for my type of book.

  • double columns, tables, images spanning columns etc I see it's possible to do
  • Word index, define size of binding I have not
  • we are making footnotes composed of QR-Codes and I'm wondering if that's something that could also be handled automatically. In InDesign I need to take care of the numeration by hand which leads to chaos and tears

We plan to release a new edition every year, so having an automated and version controlled workflow is very important for me

Patrick Gundlach
@pgundlach
If you want, you can send me an example PDF to my (see https://www.speedata.de/imprint/ for contact possibilities).
1 reply