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 3.1;
- Element 4;
2.1.2. Nummerierte Listen
- Element 1;
- Element 2;
- Element 2.1
- Element 2.1.1
- Element 2.1.1.1
- Element 2.1.1.2
- Element 2.1.2
- Element 2.1.1
- Element 2.2
- Element 2.1
- Element 3;
2.1.3. Gemischte Listen 1
- 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 3.1;
- Element 4;
2.1.4. Gemischte Listen 2
- Element 1;
- Element 2;
- Element 2.1
- Element 2.1.1
- Element 2.1.1.1
- Element 2.1.1.2
- Element 2.1.2
- Element 2.1.1
- Element 2.2
- Element 2.1
- 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.
- Element 6
- Element 7
Hier unterbreche ich die Liste, um etwas zu sagen, möchte aber anschließend die Nummerierung fortsetzen.
- Element 8
- Element 9
Dann beginne ich eine neue nummerierte Liste:
- Element 11
- 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.
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:

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.
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
C#
Python
PHP
ECMAScript
VBScript
XML
HTML
2.3. Links
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.
Er unterstützt auch die oberen und unteren Ränder von Absätzen.- Es verwaltet auch die oberen und unteren Ränder der Absätze.
- Es verwaltet auch die oberen und unteren Ränder der Absätze.
- 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.
- 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 verwaltet auch den Hintergrund des Absatzes
- 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:
![]() | ![]() |

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:
2.8. Tabellen
Eine Tabelle kann verschiedene Inhalte enthalten:
1 | 2 | ![]() | |
3 | 4 | ![]() | |
Ein Array mit Links:
Der Gemini/ChatGPT-Konverter behält die externe Links des ODT-/DOCX-Dokuments beizubehalten. Zum Beispiel Gemini 3 oder 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:
dient sowohl zur Generierung des HTML-Tags <form> als auch zur Bereitstellung von Informationen für den Controller, der dieses Formular verarbeiten muss:
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. | |||||||
dient zur Generierung des Tags <input type="text" value="...">:
|
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 .
-
Die Fußnote ↩




