2. Ejemplos de este documento
Me gustaría hacer de esto un artículo corto. Las interacciones entre un IA y un usuario se presentan en el artículo [Generar un script Python con herramientas de IAque ahora llamaré [ref1]. Interacciones con Gemini y ChatGPT sólo se presentarán al margen. En cualquier caso, era imposible presentar todos iteraciones.
A continuación daré algunos ejemplos de las particularidades de mis ODT / documentos DOCX que el Gemini / ChatGPT gestiona correctamente. Es este documento el que propondremos para la conversión HTML a script de Gemini ChatGPT. Veremos qué hace con él.
2.1. Las listas
El Gemini / ChatGPT sabe gestionar listas numeradas y con viñetas aunque estén entrelazados :
2.1.1. Listas
- Tema 1;
- Tema 2:
- Tema 3;
- Elemento 3.1;
- Elemento 3.1.1
- Elemento 3.1.2
- Elemento 3.1.2.1
- Elemento 3.1.2.2
- Elemento 3.2;
- Elemento 3.1;
- Tema 4;
2.1.2. Listas numeradas
- Tema 1;
- Tema 2;
- Elemento 2.1
- Elemento 2.1.1
- Elemento 2.1.1.1
- Elemento 2.1.1.2
- Elemento 2.1.2
- Elemento 2.1.1
- Elemento 2.2
- Elemento 2.1
- Tema 3;
2.1.3. Listas mixtas 1
- Tema 1;
- Tema 2:
- Tema 3;
- Elemento 3.1;
- Elemento 3.1.1
- Elemento 3.1.2
- Elemento 3.1.2.1
- Elemento 3.1.2.2
- Elemento 3.2;
- Elemento 3.1;
- Tema 4;
2.1.4. Listas mixtas 2
- Tema 1;
- Tema 2;
- Elemento 2.1
- Elemento 2.1.1
- Elemento 2.1.1.1
- Elemento 2.1.1.2
- Elemento 2.1.2
- Elemento 2.1.1
- Elemento 2.2
- Elemento 2.1
- Tema 3;
2.1.5. Listas numeradas manualmente
Numeración manual significa ici que el usuario establece el número de un párrafo numerado: [clic derecho sobre el párrafo numerado / párrafo / párrafo / reiniciar numeración / empezar por].
Empiezo una lista con un número distinto de 1.
- Elemento 6
- elemento 7
Ici Rompo la lista para decir algo, pero luego quiero seguir numerando.
- Elemento 8
- elemento 9
Luego empiezo una nueva lista numerada:
- elemento 11
- elemento 12
2.2. Bloques de códigos
Mis cursos contienen muchos bloques de código. A menudo se trata de códigos enriquecidos (negrita, colores de las palabras clave) por IDE (Eclipse, PyCharm, WebStorm, Netbeans). Estos códigos enriquecidos son reproducidos de forma idéntica por el conversor.
Cuando el código no está enriquecido (código del Bloc de notas o ...), ele Convertidor Gemini / ChatGPT lo reconoce (Java, C#, XML, HTML, ...) utilizando palabras clave de idioma en un archivo de configuración. Cuando reconoce un idioma, inserta un marcador (valla) para MkDocs de modo quee éste adapta el resaltado sintáctico del código al lenguaje utilizado en el bloque de código.
2.2.1. Bloques de código enriquecidos (Eclipse, Visual Studio, etc.)
He aquí algunos bloques de código enriquecidos con diferentes IDE :
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) {
// recuperación del contexto de Spring
ApplicationContext ctx = new ClassPathXmlApplicationContext("config-01.xml");
// recuperamos las judías
Personne p01 = ctx.getBean("personne_01", Personne.class);
Personne p02 = ctx.getBean("personne_02", Personne.class);
List<Personne> club = ctx.getBean("club", new ArrayList<Personne>().getClass());
Appartement appart01 = ctx.getBean(Appartement.class);
...
C#
using System;
namespace Chap1 {
class Impots {
static void Main(string[] args) {
// tablas de datos necesarios para calcular el impuesto
decimal[] limites = { 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 };
// se restablece el estado civil
bool OK = false;
string reponse = null;
while (!OK) {
Console.Write("Etes-vous marié(e) (O/N) ? ");
reponse = Console.ReadLine().Trim().ToLower();
if (reponse != "o" && reponse != "n")
Console.Error.WriteLine("Réponse incorrecte. Recommencez");
else OK = true;
}//mientras que
bool marie = reponse == "o";
...
Python
# ----------------------------------
def affiche(chaine):
# cartel cadena
print("chaine=%s" % chaine)
# ----------------------------------
def affiche_type(variable):
# muestra el tipo de variable
print("type[%s]=%s" % (variable, type(variable)))
# ----------------------------------
def f1(param):
# añade 10 a param
return param + 10
# ----------------------------------
def f2():
# devuelve una tupla de 3 valores
return "un", 0, 100
# -------------------------------- programa principal ------------------------------------
...
PHP
<?php
// tipos estrictos para los parámetros de las funciones
declare(strict_types=1);
// constantes globales
define("PLAFOND_QF_DEMI_PART", 1551);
define("PLAFOND_REVENUS_CELIBATAIRE_POUR_REDUCTION", 21037);
define("PLAFOND_REVENUS_COUPLE_POUR_REDUCTION", 42074);
define("VALEUR_REDUC_DEMI_PART", 3797);
define("PLAFOND_DECOTE_CELIBATAIRE", 1196);
define("PLAFOND_DECOTE_COUPLE", 1970);
define("PLAFOND_IMPOT_COUPLE_POUR_DECOTE", 2627);
define("PLAFOND_IMPOT_CELIBATAIRE_POUR_DECOTE", 1595);
define("ABATTEMENT_DIXPOURCENT_MAX", 12502);
define("ABATTEMENT_DIXPOURCENT_MIN", 437);
// definición de constantes locales
$DATA = "taxpayersdata.txt";
$RESULTATS = "resultats.txt";
$limites = 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);
// datos de lectura
$data = fopen($DATA, "r");
if (!$data) {
print "Impossible d'ouvrir en lecture le fichier des données [$DATA]\n";
exit;
}
...
ECMAScript
'use strict';
// este es un comentario
// constante
const nom = "dupont";
// una pantalla de visualización
console.log("nom : ", nom);
// una matriz con elementos de distintos tipos
const tableau = ["un", "deux", 3, 4];
// su número de elementos
let n = tableau.length;
// un bucle
for (let i = 0; i < n; i++) {
console.log("tableau[", i, "] = ", tableau[i]);
}
// inicializar 2 variables con el contenido de un array
let [chaine1, chaine2] = ["chaine1", "chaine2"];
// concatenación de las 2 cadenas
const chaine3 = chaine1 + chaine2;
// visualización de resultados
console.log([chaine1, chaine2, chaine3]);
...
VBScript
' cálculo de la deuda tributaria del contribuyente
' el programa debe llamarse con tres parámetros: salario de los hijos casados
' casado: carácter Y si está casado, N si no lo está
' hijos: número de hijos
' salario: salario anual sin céntimos
' declaración obligatoria de variables
Option Explicit
Dim erreur
' recuperar los argumentos y comprobar su validez
Dim marie, enfants, salaire
erreur=getArguments(marie,enfants,salaire)
' ¿Error?
If erreur(0)<>0 Then wscript.echo erreur(1) : wscript.quit erreur(0)
' recuperamos los datos necesarios para calcular los impuestos
Dim limites, coeffR, coeffN
erreur=getData(limites,coeffR,coeffN)
' ¿Error?
If erreur(0)<>0 Then wscript.echo erreur(1) : wscript.quit 5
' se muestra el resultado
wscript.echo "impôt=" & calculerImpot(marie,enfants,salaire,limites,coeffR,coeffN)
' salimos sin error
wscript.quit 0
XML
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<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="metier" type="Metier.ImpotMetier, ImpotsV7-metier">
<constructor-arg index="0" ref="dao"/>
</object>
</objects>
</spring>
</configuration>
2.2.2. Bloques de códigos bruto (plain text)
He aquí algunos ejemplos de código bruto :
Resultados
Observe que el código no empieza por la línea 1.
Este caso requirió docenas de iteraciones. El conversor nunca encontraba el número de la primera línea de código. Finalmente le pregunté a Gemini cómo formatear el bloque de código para que lo reconociera. Esto es lo que me dijo

He seguido este procedimiento y ha funcionado. Utilicé el método a través del icono de la lista (Personalizar). Así que puede que tenga que modificar ciertos elementos del Documento ODT / DOCX para obtener lo que desea.
El conversor puede manejar bloques de código sin numerar.
He aquí los mismos ejemplos que en el párrafo 2.2.1 pero no enriquecido. Por tanto, son las palabras clave del archivo de configuración las que guiarán al conversor hacia el idioma adecuado.
Java
C#
Python
PHP
ECMAScript
VBScript
XML
HTML
2.3. Enlaces
El Gemini / ChatGPT sabe cómo mantener los enlaces externos en el Documento ODT / DOCX. Por ejemplo Gemini 3 o [Generar un script Python con herramientas de IA].
Puede gestionar un enlace a un capítulo Enlace a un capítulo
Un referencia cruzada a un capítulo : 2.1.1.
Referencia a un marcador de texto que precede a : Gemini 3
Referencia a un marcador de texto que sigue : GitHub
2.4. Enriquecimiento del texto
El conversor puede manejar negrita, cursiva, subrayado y resaltado. Respeta el color del resalte.
Un texto con palabras en grasaen cursiva, subrayado o destacado o destacado o destacado.
Lo mismo ocurre con los enlaces: [Genere a script Python con herramientas de IA].
Le convertidor gestiona también el color de caracteres.
También gestiona los bordes superior e inferior de los párrafos.
También gestiona los bordes superior e inferior de los párrafos.- También gestiona los bordes superior e inferior de los párrafos.
- También gestiona los bordes superior e inferior de los párrafos.
También gestiona los bordes superior e inferior de los párrafos.- También gestiona los bordes superior e inferior de los párrafos.
- También gestiona los bordes superior e inferior de los párrafos.
- Un texto con palabras en grasaen cursiva, subrayado o destacado o destacado o destacado.
- Lo mismo ocurre con los enlaces: [Genere a script Python con herramientas de IA].
- Le convertidor gestiona también el color de caracteres.
- Un texto con palabras en grasaen cursiva, subrayado o destacado o destacado o destacado.
- Lo mismo ocurre con los enlaces: [Genere a script Python con herramientas de IA].
- Le convertidor gestiona también el color de caracteres.
- También gestiona el fondo del párrafo
- también gestiona el fondo del párrafo
2.5. A título puede ser también enriquecido.
2.6. Las imágenes
El Gemini / ChatGPT sabe gestionar imágenes y tablas de imágenes :
![]() | ![]() |

Los planos son habituales en los documentos ODT. A pesar des docenas de intentos, Gemini no consiguió generar un script que generara la imagen (como una captura de pantalla) del dibujo. Así que arriba, la imagen 5 es una captura de pantalla de un dibujo de un documento ODT.
Puede hacer clic en todas las imágenes para ampliarlas. Si hace clic en la imagen [1-3] anterior, obtendrá la siguiente ampliación:
![]() |
2.7. Los caracteres que hay que proteger
Una página web MkDocs1 tiene páginas cuyo contenido no es HTML sino MarkDown. Si le Documento ODT / DOCX contiene caracteres que existen en MarkDown, pueden ser interpretados por MkDocs y por lo tanto no ser renderizados como se espera. He aquí dos ejemplos:
El asterisco * significa MarkDown. La siguiente línea puede malinterpretarse:
El impuesto I es igual a 0.15*R - 2072.5*nbParts.
Otro ejemplo es cuando quieres insertar un bloque de código MarkDown en tu documento como este:
2.8. Los cuadros
Una tabla puede tener diferentes contenidos:
1 | 2 | ![]() | |
3 | 4 | ![]() | |
Una tabla con enlaces :
El Gemini / ChatGPT sabe cómo mantener enlaces externos en el Documento ODT / DOCX. Por ejemplo Gemini 3 o Puede gestionar un enlace a un capítulo Enlace a un capítulo | Un referencia cruzada a un capítulo : 2.1.1. Referencia a un marcador de texto que precede a : Gemini 3 Referencia a un marcador de texto que sigue : GitHub |
Una tabla cuyas celdas contienen otra tabla :
se utiliza para generar la etiqueta HTML <formulario> y facilitar información al responsable del tratamiento que deberá tramitar este formulario:
Observe que no se especifica el método para enviar los parámetros del formulario (GET/POST) al controlador. Esto podría hacerse utilizando el método method. En su defecto, el POST que se utiliza por defecto. | |||||||
se utiliza para generar la etiqueta <input type="text" value="..."> :
|
También gestiona el fondo del párrafo en una tabla
|
2.9. Notas a pie de página
El convertidor Gemini2 / ChatGPT gestiona las notas a pie de página. He aquí otra nota3 pie de página.
-
La nota a pie de página ↩




