Skip to content

2. Beispiele aus diesem Dokument

Ich möchte einen kurzen Artikel verfassen. Die Interaktionen zwischen einer KI und einem Nutzer werden in dem Artikel [Erstellen eines Python-Skripts mit KI-Tools] vorgestellt, den ich fortan als [ref1] bezeichnen werde. Die Interaktionen mit Gemini und ChatGPT werden nur am Rande behandelt. Es war ohnehin unmöglich, alle Iterationen darzustellen.

Ich werde nun Beispiele für die Besonderheiten meiner ODT-/DOCX-Dokumente vorstellen, die der Gemini-/ChatGPT-Konverter korrekt verarbeitet. Genau dieses Dokument werden wir dem Gemini-/ChatGPT-Skript zur HTML-Konvertierung anbieten. Wir werden sehen, was es daraus macht.

2.1. Listen

Der Gemini/ChatGPT-Konverter kann Aufzählungslisten und nummerierte Listen verarbeiten, selbst wenn sie verschachtelt sind:

2.1.1. Aufzählungslisten

  • Element 1;
  • Element 2:
  • Element 3;
    • Element 3.1;
      • Element 3.1.1
      • Element 3.1.2
        • Element 3.1.2.1
        • Element 3.1.2.2
    • Element 3.2;
  • Element 4;

2.1.2. Nummerierte Listen

  1. Element 1;
  1. Element 2;
    1. Element 2.1
      1. Element 2.1.1
        1. Element 2.1.1.1
        2. Element 2.1.1.2
      2. Element 2.1.2
    2. Element 2.2
  2. Element 3;

2.1.3. Gemischte Listen 1

  • Element 1;
  • Element 2:
  • Element 3;
    • Element 3.1;
      1. Element 3.1.1
      2. Element 3.1.2
        • Element 3.1.2.1
        • Element 3.1.2.2
    • Element 3.2;
  • Element 4;

2.1.4. Gemischte Listen 2

  1. Element 1;
  2. Element 2;
    1. Element 2.1
      1. Element 2.1.1
        • Element 2.1.1.1
        • Element 2.1.1.2
      2. Element 2.1.2
    2. Element 2.2
  3. Element 3;

2.1.5. Manuell nummerierte Listen

Unter manueller Nummerierung versteht man hier, dass der Benutzer die Nummer eines nummerierten Absatzes festlegt: [Rechtsklick auf den nummerierten Absatz / Absatz / Absatz / Nummerierung neu beginnen / beginnen mit].

Ich beginne eine Liste mit einer anderen Nummer als 1.

  1. Element 6
  2. Element 7

Hier unterbreche ich die Liste, um etwas zu sagen, möchte aber anschließend die Nummerierung fortsetzen.

  1. Element 8
  2. Element 9

Dann beginne ich eine neue nummerierte Liste:

  1. Element 11
  2. Element 12

2.2. Code-Blöcke

Meine Kurse enthalten viele Code-Blöcke. Oft handelt es sich dabei um Code, der von IDEs (Eclipse, PyCharm, WebStorm, Netbeans) formatiert wurde (Fettdruck, Hervorhebung von Schlüsselwörtern). Dieser formatierte Code wird vom Konverter originalgetreu wiedergegeben.

Wenn der Code nicht formatiert ist (Code aus Notepad oder …), erkennt der Gemini/ChatGPT-Konverter ihn (Java, C#, XML, HTML, …) anhand von Schlüsselwörtern der Sprache, die in einer Konfigurationsdatei hinterlegt sind. Wenn er eine Sprache erkennt, fügt er eine Markierung (Fence) für MkDocs ein, damit dieses die Syntaxhervorhebung des Codes an die im Code-Block verwendete Sprache anpasst.

2.2.1. Angereicherte Code-Blöcke (Eclipse, Visual Studio, …)

Hier sind einige durch verschiedene IDEs angereicherte Code-Blöcke:

Java


package istia.st.spring.core;

import java.util.ArrayList;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Demo01 {

    @SuppressWarnings({ "unchecked", "resource" })
    public static void main(String[] args) {
        // Abrufen des Spring-Kontexts
        ApplicationContext ctx = new ClassPathXmlApplicationContext("config-01.xml");
        // Abrufen der Beans
        Person p01 = ctx.getBean("personne_01", Personne.class);
        Person p02 = ctx.getBean("personne_02", Personne.class);
        List<Person> club = ctx.getBean("club", new ArrayList<Person>().getClass());
        Wohnung wohnung01 = ctx.getBean(Wohnung.class);
...

C#


using System;

namespace Chap1 {
    class Steuern {
        static void Main(string[] args) {
            // Für die Steuerberechnung erforderliche Datentabellen
            decimal[] Grenzen = { 4962M, 8382M, 14753M, 23888M, 38868M, 47932M, 0M };
            decimal[] coeffR = { 0M, 0.068M, 0.191M, 0.283M, 0.374M, 0.426M, 0.481M };
            decimal[] coeffN = { 0M, 291,09M, 1322,92M, 2668,39M, 4846,98M, 6883,66M, 9505,54M };

            // Wir rufen den Familienstand ab
            bool OK = false;
            string Antwort = null;
            while (!OK) {
                Console.Write("Sind Sie verheiratet (J/N)? ");
                Antwort = Console.ReadLine().Trim().ToLower();
                if (Antwort != "j" && Antwort != "n")
                    Console.Error.WriteLine("Falsche Antwort. Bitte versuchen Sie es erneut");
                else OK = true;
            }//while
            bool marie = Antwort == "o";
...

Python


# ----------------------------------
def anzeigen(Zeichenkette):
    # Zeigt die Zeichenkette an
    print("Zeichenkette=%s" % Zeichenkette)


# ----------------------------------
def Typ_anzeigen(variable):
    # zeigt den Typ der Variablen an
    print("Typ[%s]=%s" % (Variable, type(Variable)))


# ----------------------------------
def f1(param):
    # addiert 10 zu param
    return param + 10


# ----------------------------------
def f2():
    # gibt ein Tupel mit 3 Werten zurück
    return "un", 0, 100


# -------------------------------- Hauptprogramm ------------------------------------
...

PHP


<?php

// Strenge Typen für Funktionsparameter
declare(strict_types=1);

// globale Konstanten
define("PLAFOND_QF_DEMI_PART", 1551);
define("EINKOMMENSGRENZE_FÜR_EINZELPERSONEN_FÜR_ERMÄSSIGUNG", 21037);
define("EINKOMMENSGRENZE_PAAR_FÜR_ERMÄSSIGUNG", 42074);
define("REDUZIERUNGSBETRAG_HALBTEIL", 3797);
define("OBERGRENZE_ABZUG_ALLEINSTÄNDIGE", 1196);
define("OBERGRENZE_ABZUG_PAAR", 1970);
define("STEUEROBERGRENZE_PAAR_FÜR_ABZUG", 2627);
define("STEUEROBERGRENZE_FÜR_ALLGEMEINEN_ABZUG_FÜR_ALLEINSTÄNDIGE", 1595);
define("MAXIMALER_ZEHNPROZENT-FREIBETRAG", 12502);
define("ABATTEMENT_DIXPOURCENT_MIN", 437);

// Definition der lokalen Konstanten
$DATA = "taxpayersdata.txt";
$RESULTATS = "resultats.txt";
$Grenzwerte = array(9964, 27519, 73779, 156244, 0);
$coeffR = array(0, 0.14, 0.3, 0.41, 0.45);
$coeffN = array(0, 1394.96, 5798, 13913.69, 20163.45);

// Daten lesen
$data = fopen($DATA, "r");
if (!$data) {
  print "Die Datendatei [$DATA] konnte nicht zum Lesen geöffnet werden\n";
  exit;
}

...

ECMAScript


'use strict';
// dies ist ein Kommentar
// Konstante
const name = "dupont";
// eine Bildschirmausgabe
console.log("name: ", name);
// ein Array mit Elementen unterschiedlichen Typs
const array = ["eins", "zwei", 3, 4];
// Anzahl der Elemente
let n = array.length;
// eine Schleife
for (let i = 0; i < n; i++) {
  console.log("array[", i, "] = ", array[i]);
}
// Initialisierung von 2 Variablen mit dem Inhalt eines Arrays
let [Zeichenkette1, Zeichenkette2] = ["Zeichenkette1", "Zeichenkette2"];
// Verkettung der beiden Zeichenfolgen
const string3 = string1 + string2;
// Ergebnis anzeigen
console.log([Zeichenkette1, Zeichenkette2, Zeichenkette3]);
...

VBScript


' Berechnung der Steuer eines Steuerpflichtigen
' Das Programm muss mit drei Parametern aufgerufen werden: verheiratet, Kinder, Gehalt
' verheiratet: Zeichen O, wenn verheiratet, N, wenn unverheiratet
' Kinder: Anzahl der Kinder
' Gehalt: Jahresgehalt ohne Centbeträge

' obligatorische Deklaration der Variablen
  Option Explicit
  Dim Fehler
  
' Wir rufen die Argumente ab und prüfen ihre Gültigkeit
  Dim Frau, Kinder, Gehalt
  Fehler = GetArguments(Ehefrau, Kinder, Gehalt)
  ' Fehler?
  If Fehler(0)<>0 Then wscript.echo Fehler(1) : wscript.quit Fehler(0)

' Die für die Steuerberechnung erforderlichen Daten werden abgerufen
  Dim Grenzen, KoeffR, KoeffN
  Fehler = getData(Grenzen, KoeffR, KoeffN)
  ' Fehler?
  If Fehler(0)<>0 Then wscript.echo Fehler(1) : wscript.quit 5

  ' Das Ergebnis wird angezeigt
  wscript.echo "Steuer=" & berechneSteuer(Ehepartner,Kinder,Gehalt,Grenzen,KoeffR,KoeffN)
  
  ' Beenden ohne Fehler
  wscript.quit 0

XML


<?xml version="1.0" encoding="utf-8" ?>
<Konfiguration>

  <configSections>
    <sectionGroup name="spring">
      <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" />
      <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
    </sectionGroup>
  </configSections>

  <spring>
    <context>
      <resource uri="config://spring/objects" />
    </context>
    <objects xmlns="http://www.springframework.net">
      <object name="dao" type="Dao.DataBaseImpot, ImpotsV7-dao">
        <constructor-arg index="0" value="MySql.Data.MySqlClient"/>
        <constructor-arg index="1" value="Server=localhost;Database=bdimpots;Uid=admimpots;Pwd=mdpimpots;"/>
        <constructor-arg index="2" value="select limite, coeffr, coeffn from tranches"/>
      </object>
      <object name="Beruf" type="Beruf.SteuerBeruf, SteuernV7-Beruf">
        <constructor-arg index="0" ref="dao"/>
      </object>
    </objects>
  </spring>
</configuration>

2.2.2. Rohcode-Blöcke (Klartext)

Hier sind einige Beispiele für Rohcode:

Ausführungsergebnisse

Beachten Sie, dass der Code nicht mit Zeile 1 beginnt.

C:\Data\st-2020\dev\python\cours-2020\python3-flask-2020\venv\Scripts\python.exe C:/Data/st-2020/dev/python/cours-2020/python3-flask-2020/bases/bases_01.py
name=dupont
liste[0]=eins
liste[1]=zwei
liste[2]=3
liste[3]=4
[Zeile1,Zeile2,Zeile1Zeile2]
Zeichenkette=Zeichenkette1
Typ[4]=<class 'int'>
Typ[Zeichenkette1]=<class 'str'>
Typ[['eins', 'zwei', 3, 4]]=<class 'list'>
Typ[geändert]=<class 'str'>
res1=14s
(res1,res2,res3)=[eins,0,100]
liste[0] = eins
liste[1]=0
liste[2]=100
liste[0]=8
liste[1]=5
Summe=13

Prozess beendet mit Exit-Code 0

Dieser Fall erforderte Dutzende von Iterationen. Der Konverter fand die Nummer der ersten Codezeile einfach nicht. Schließlich fragte ich Gemini, wie ich den Code-Block formatieren müsse, damit er ihn erkennt. Hier ist seine Antwort:

Image

Ich habe diesen Vorschlag befolgt und es hat funktioniert. Ich habe die Methode über das Listensymbol (Anpassen) verwendet. Man muss also möglicherweise bestimmte Elemente des ODT-/DOCX-Dokuments ändern, um das gewünschte Ergebnis zu erzielen.

Der Konverter kann mit unnummerierten Code-Blöcken umgehen.

liste[0]=un
liste[1]=0
liste[2]=100
liste[0]=8
liste[1]=5
Summe=13

Hier sind dieselben Beispiele wie im Abschnitt „2.2.1 “, jedoch ohne Erweiterung. In diesem Fall leiten die Schlüsselwörter in der Konfigurationsdatei den Konverter zur richtigen Sprache.

Java

package istia.st.spring.core;

import java.util.ArrayList;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Demo01 {

@SuppressWarnings({ "unchecked", "resource" })
public static void main(String[] args) {
// Abrufen des Spring-Kontexts
ApplicationContext ctx = new ClassPathXmlApplicationContext("config-01.xml");
// Abrufen der Beans
Person p01 = ctx.getBean("personne_01", Personne.class);
Person p02 = ctx.getBean("personne_02", Personne.class);
List<Person> club = ctx.getBean("club", new ArrayList<Person>().getClass());
Wohnung wohnung01 = ctx.getBean(Wohnung.class);
...

C#

using System;

namespace Chap1 {
    class Steuern {
        static void Main(string[] args) {
            // Für die Steuerberechnung erforderliche Datentabellen
            decimal[] Grenzen = { 4962M, 8382M, 14753M, 23888M, 38868M, 47932M, 0M };
            decimal[] coeffR = { 0M, 0,068M, 0,191M, 0,283M, 0,374M, 0,426M, 0,481M };
            decimal[] coeffN = { 0M, 291,09M, 1322,92M, 2668,39M, 4846,98M, 6883,66M, 9505,54M };

            // Wir rufen den Familienstand ab
            bool OK = false;
            string Antwort = null;
            while (!OK) {
                Console.Write("Sind Sie verheiratet (J/N)? ");
                Antwort = Console.ReadLine().Trim().ToLower();
                if (Antwort != "j" && Antwort != "n")
                    Console.Error.WriteLine("Falsche Antwort. Bitte versuchen Sie es erneut");
                else OK = true;
            }//while
            bool marie = Antwort == "o";
...

Python

# ----------------------------------
def anzeigen(Zeichenkette):
    # Zeigt die Zeichenkette an
    print("Zeichenkette=%s" % Zeichenkette)


# ----------------------------------
def Typ_anzeigen(Variable):
    # zeigt den Typ der Variablen an
    print("Typ[%s]=%s" % (Variable, type(Variable)))


# ----------------------------------
def f1(param):
    # addiert 10 zu param
    return param + 10


# ----------------------------------
def f2():
    # gibt ein Tupel mit 3 Werten zurück
    return "un", 0, 100


# -------------------------------- Hauptprogramm ------------------------------------
...

PHP

<?php

// Strenge Typen für Funktionsparameter
declare(strict_types=1);

// globale Konstanten
define("PLAFOND_QF_DEMI_PART", 1551);
define("EINKOMMENSGRENZE_FÜR_EINZELPERSONEN_FÜR_ERMÄSSIGUNG", 21037);
define("EINKOMMENSGRENZE_PAAR_FÜR_ERMÄSSIGUNG", 42074);
define("REDUZIERUNGSBETRAG_HALBTEIL", 3797);
define("OBERGRENZE_ABZUG_ALLEINSTÄNDIGE", 1196);
define("OBERGRENZE_ABZUG_PAAR", 1970);
define("STEUEROBERGRENZE_PAAR_FÜR_ABZUG", 2627);
define("STEUEROBERGRENZE_FÜR_ALLGEMEINEN_ABZUG_FÜR_ALLEINSTÄNDIGE", 1595);
define("MAXIMALER_ZEHN-PROZENT-FREIBETRAG", 12502);
define("ABATTEMENT_DIXPOURCENT_MIN", 437);

// Definition der lokalen Konstanten
$DATA = "taxpayersdata.txt";
$RESULTATS = "resultats.txt";
$Grenzwerte = array(9964, 27519, 73779, 156244, 0);
$coeffR = array(0, 0.14, 0.3, 0.41, 0.45);
$coeffN = array(0, 1394.96, 5798, 13913.69, 20163.45);

// Daten lesen
$data = fopen($DATA, "r");
if (!$data) {
  print "Die Datendatei [$DATA] konnte nicht zum Lesen geöffnet werden\n";
  exit;
}

...

ECMAScript

'use strict';
// dies ist ein Kommentar
// Konstante
const name = "dupont";
// eine Bildschirmausgabe
console.log("name: ", name);
// Ein Array mit Elementen unterschiedlichen Typs
const array = ["eins", "zwei", 3, 4];
// die Anzahl der Elemente
let n = array.length;
// eine Schleife
for (let i = 0; i < n; i++) {
  console.log("array[", i, "] = ", array[i]);
}
// Initialisierung von 2 Variablen mit dem Inhalt eines Arrays
let [Zeichenkette1, Zeichenkette2] = ["Zeichenkette1", "Zeichenkette2"];
// Verkettung der beiden Zeichenfolgen
const Zeichenfolge3 = Zeichenfolge1 + Zeichenfolge2;
// Ergebnis anzeigen
console.log([Zeichenkette1, Zeichenkette2, Zeichenkette3]);
...

VBScript

' Berechnung der Steuer eines Steuerpflichtigen
' Das Programm muss mit drei Parametern aufgerufen werden: verheiratet, Kinder, Gehalt
' verheiratet: Zeichen O, wenn verheiratet, N, wenn unverheiratet
' Kinder: Anzahl der Kinder
' Gehalt: Jahresgehalt ohne Centbeträge

' obligatorische Deklaration der Variablen
  Option Explicit
  Dim Fehler

' Wir rufen die Argumente ab und prüfen ihre Gültigkeit
  Dim Frau, Kinder, Gehalt
  Fehler = GetArguments(Ehefrau, Kinder, Gehalt)
  ' Fehler?
  If Fehler(0)<>0 Then wscript.echo Fehler(1) : wscript.quit Fehler(0)

' Die für die Steuerberechnung erforderlichen Daten werden abgerufen
  Dim Grenzen, KoeffR, KoeffN
  Fehler = getData(Grenzen, KoeffR, KoeffN)
  ' Fehler?
  If Fehler(0)<>0 Then wscript.echo Fehler(1) : wscript.quit 5

  ' Das Ergebnis wird angezeigt
  wscript.echo "Steuer=" & berechneSteuer(Ehepartner,Kinder,Gehalt,Grenzen,KoeffR,KoeffN)

  ' Beenden ohne Fehler
  wscript.quit 0

XML

<?xml version="1.0" encoding="utf-8" ?>
<Konfiguration>

  <configSections>
    <sectionGroup name="spring">
      <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" />
      <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
    </sectionGroup>
  </configSections>

  <spring>
    <context>
      <resource uri="config://spring/objects" />
    </context>
    <objects xmlns="http://www.springframework.net">
      <object name="dao" type="Dao.DataBaseImpot, ImpotsV7-dao">
        <constructor-arg index="0" value="MySql.Data.MySqlClient"/>
        <constructor-arg index="1" value="Server=localhost;Database=bdimpots;Uid=admimpots;Pwd=mdpimpots;"/>
        <constructor-arg index="2" value="select limite, coeffr, coeffn from tranches"/>
      </object>
      <Objekt name="metier" type="Metier.ImpotMetier, ImpotsV7-metier">
        <constructor-arg index="0" ref="dao"/>
      </object>
    </objects>
  </spring>
</configuration>

HTML

<!DOCTYPE HTML>
<HTML>
    <head>
        <title>Laragon</title>

        <link href="<a href="view-source:https://fonts.googleapis.com/css?family=Karla:400">https://fonts.googleapis.com/css?family=Karla:400</a> " rel="stylesheet" type="text/css">

        <style>
            HTML, body {
                height: 100%;
            }

            body {
                margin: 0;
                padding: 0;
                Breite: 100%;
                display: table;
                font-weight: 100;
                Schriftart: 'Karla';
            }

            .container {
                text-align: center;
                display: table-cell;
                vertical-align: middle;
            }

            .content {
                text-align: center;
                display: inline-block;
            }

            .title {
                Schriftgröße: 96px;
            }

            .opt {
                margin-top: 30px;
            }

            .opt a {
              text-decoration: none;
              Schriftgröße: 150%;
            }

            a:hover {
              color: red;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <div class="content">
                <div class="title" title="Laragon">Laragon</div>

                <div class="info"><br />
                      Apache/2.4.35 (Win64) OpenSSL/1.1.0i PHP/7.2.11<br />
                      PHP-Version: 7.2.11   <span><a title="phpinfo()" href="<a href="view-source:http://localhost/?q=info">/?q=info</a>">Info</a></span><br />
                      Dokumentenstammverzeichnis: C:/myprograms/laragon-lite/www<br />

                </div>

Der Gemini/ChatGPT-Konverter behält die externen Links des ODT-/DOCX-Dokuments bei. Zum Beispiel Gemini 3 oder [Ein Python-Skript mit KI-Tools generieren].

Er kann einen Link zu einem Kapitel verarbeiten Link zu einem Kapitel

Ein Verweis auf ein Kapitel:2.1.1 .

Ein Verweis auf eine vorhergehende Textmarkierung: Gemini 3

Ein Verweis auf eine nachfolgende Textmarkierung: GitHub

2.4. Textformatierung

Der Konverter unterstützt Fettdruck, Kursivschrift, Unterstreichungen und Hervorhebungen. Die Farbe der Hervorhebung wird beibehalten.

Ein Text mit fettgedruckten, kursiven, unterstrichenen oder hervorgehobenen Wörtern.

Das gilt auch für Links: [Python-Skript mit KI-Tools generieren].

Der Konverter verarbeitet auch die Schriftfarbe.


Er unterstützt zudem die oberen und unteren Ränder von Absätzen.



  • Er unterstützt auch die oberen und unteren Ränder von Absätzen.
  • Er unterstützt auch die oberen und unteren Ränder von Absätzen.
  • Er unterstützt auch die oberen und unteren Ränder von Absätzen.

  1. Er unterstützt auch die oberen und unteren Ränder von Absätzen.
  2. Es verwaltet auch die oberen und unteren Ränder der Absätze.
  3. Es verwaltet auch die oberen und unteren Ränder der Absätze.
  1. Ein Text mit fettgedruckten, kursiven, unterstrichenen oder hervorgehobenen Wörtern.
  2. Das gilt auch für Links: [Python-Skript mit KI-Tools generieren].
  3. Der Konverter verarbeitet auch die Schriftfarbe.
  • Ein Text mit fettgedruckten, kursiven, unterstrichenen oder hervorgehobenen Wörtern.
  • Das gilt auch für Links: [Python-Skript mit KI-Tools generieren].
  • Der Konverter unterstützt auch die Schriftfarbe.
Er unterstützt auch den Hintergrund des Absatzes
  • Er verwaltet auch den Hintergrund des Absatzes
  1. Er verwaltet auch den Hintergrund des Absatzes

2.5. Auch eine Überschrift kann angereichert werden.

2.6. Bilder

Der Konverter Gemini / ChatGPT kann mit Bildern und Bildtabellen umgehen:

Image

In ODT-Dokumenten kommen häufig Zeichnungen vor. Trotz Dutzender Versuche ist es Gemini nicht gelungen, ein Skript zu erstellen, das ein Bild (wie einen Screenshot) der Zeichnung generieren würde. So ist das Bild 5 oben der Screenshot einer Zeichnung aus einem ODT-Dokument.

Alle Bilder sind anklickbar und lassen sich vergrößern. Wenn man oben auf das Bild [1-3] klickt, erhält man die folgende Vergrößerung:

2.7. Zu schützende Zeichen

Eine MkDocs-Website1 enthält Seiten, deren Inhalt nicht aus HTML, sondern aus Markdown besteht. Wenn das ODT-/DOCX-Dokument Zeichen enthält, die in Markdown vorkommen, besteht die Gefahr, dass sie von MkDocs interpretiert werden und somit nicht wie erwartet dargestellt werden. Hier sind zwei Beispiele:

Das Sternchen * hat eine Markdown-Bedeutung. Die folgende Zeile kann daher falsch interpretiert werden:

Die Steuer I ist dann gleich 0,15*R – 2072,5*nbParts.

Ein weiteres Beispiel ist, wenn Sie einen Markdown-Code-Block wie diesen in Ihr Dokument einfügen möchten:

# Konverter von Word/ODT zu HTML-Website (MkDocs)

🔗 **[Zur generierten Demo-Website](https://stahe.github.io/word-odt-vers-html-janv-2026/)**

---

## 📝 Beschreibung

In diesem Projekt soll dem Leser ein Python-Konverter zur Verfügung gestellt werden, der Word- oder ODT-Dokumente in eine statische HTML-Website umwandelt.

Wenn das ODT-/DOCX-Dokument geeignet ist, erzeugt der Konverter über **MkDocs** eine HTML-Website, die das professionelle Erscheinungsbild der von Pandoc erstellten Websites aufweist.

## 🤖 Entstehungshintergrund

Dieser Konverter wurde vollständig von der KI **Gemini 3** (mit einem Pro-Abonnement) erstellt. Er ist das Ergebnis aufeinanderfolgender Iterationen zur Feinabstimmung der Struktur von ODT-Dokumenten (OpenDocument Text).

## ✨ Funktionen

Das Skript `convert.py` führt folgende Aktionen aus:

* **Konvertierung von ODT nach Markdown**: Analysiert die `.odt`-Datei (XML), um die Struktur zu extrahieren.
* **Verwaltung von Überschriften**: Erzeugt automatisch das Inhaltsverzeichnis (TOC) und die seitliche Navigation.
* **Code-Blöcke**: Automatische Spracherkennung, Syntaxhervorhebung und **präzise Verwaltung der Zeilennummerierung** (Attribute `start-value`).
* **Listen**: Unterstützung von Aufzählungs- und nummerierten Listen mit korrekter Einrückung.
* **Formatierung**: Unterstützung von *Fettdruck*, *Kursivschrift*, *Unterstreichung* und *Hervorhebung* (unter Beibehaltung der Originalfarben).
* **Bilder**: Automatische Extraktion und Einbindung der im Dokument enthaltenen Bilder.
* **Konfiguration**: Anpassung über eine `config.py`-Datei (Fußzeile, Google Analytics usw.).

## 🚀 Installation

### Voraussetzungen

* Python 3.x
* Die folgenden Bibliotheken:

```bash
pip install odfpy unidecode mkdocs mkdocs-material

```

2.8. Tabellen

Eine Tabelle kann verschiedene Inhalte enthalten:

1
2

package istia.st.spring.core;

import java.util.ArrayList;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Demo01 {


    
3
4

# ----------------------------------
def anzeigen(Zeichenkette):
    # Zeigt „chaine“ an
    print("Zeichenkette=%s" % Zeichenkette)


# ----------------------------------
def Typ_anzeigen(Variable):
    # zeigt den Typ der Variablen an
    print("Typ[%s]=%s" % (Variable, type(Variable)))


Ein Array mit Links:

Der Gemini/ChatGPT-Konverter behält die
externe Links des ODT-/DOCX-Dokuments beizubehalten. Zum Beispiel
Er kann einen Link zu einem Kapitel verarbeiten Link zu einem Kapitel
Ein Verweis auf ein Kapitel:2.1.1 .
Ein Verweis auf eine vorhergehende Textmarkierung: Gemini 3
Ein Verweis auf eine nachfolgende Textmarkierung: GitHub

Eine Tabelle, deren Zellen eine weitere Tabelle enthalten:

html:form
dient sowohl zur Generierung des HTML-Tags <form> als auch zur Bereitstellung von Informationen für den Controller, der dieses Formular verarbeiten muss:
action
URL, an die die Werte des Formulars gesendet werden
name
Name des HTML-Formulars. Dies ist auch der Name des Beans, das die Werte des Formulars speichert
type
Name der Klasse, die instanziiert werden muss, um die Bean zum Speichern des Formulars zu erhalten
Es ist zu beachten, dass die Methode zum Senden der Formularparameter (GET/POST) an den Controller nicht angegeben ist. Dies könnte mit dem Attribut method erfolgen. Fehlt dieses, wird standardmäßig die POST-Methode verwendet.
html:text
dient zur Generierung des Tags <input type="text" value="...">:
property
Name des Feldes der Formular-Bean, das dem Eingabefeld zugeordnet wird. Beim Absenden des Formulars an den Server (Client -> Server) übernimmt das Feld der Bean den Wert des Eingabefeldes. Bei der Anzeige des Formulars (Server -> Client) wird der im Feld der Bean enthaltene Wert im Eingabe feld angezeigt.
Es verwaltet auch den Hintergrund des Absatzes in einer Tabelle
  • Es verwaltet auch den Hintergrund des Absatzes in einer Tabelle
  1. Es verwaltet auch den Hintergrund des Absatzes in einer Tabelle
 

2.9. Fußnoten

Der Gemini-Konverter2 / ChatGPT unterstützt Fußnoten. Hier ist eine weitere Fußnote3 .



  1. MkDocs 

  2. Google Gemini 

  3. Die Fußnote