Cómo utilizar los ejemplos
Un bloque que empieza con \documentclass es un documento completo. Los demás bloques tex son fragmentos para insertar dentro de document, en una figura nueva, con \usepackage{noctiplots} en el preámbulo. Este paquete incluye también noctiks, por lo que sirve para todos los ejemplos. Las firmas con nombres descriptivos aparecen en bloques text y no se copian literalmente.
Para los fragmentos puede utilizarse este documento base en tamaño Letter, con márgenes de 15 mm y lienzos de hasta 520 bp de ancho. Al cambiar la página hay que comprobar tanto el área de texto como el tamaño real del PDF para evitar recortes.
\documentclass{article}
\usepackage[letterpaper,margin=15mm]{geometry}
\usepackage{noctiplots}
\setlength{\parindent}{0pt}
\begin{document}
\begin{center}
\begin{noctiaxis}[width=400,height=240][axes=box]
\NoctiFunction[domain=-2:2]{x^2}
\end{noctiaxis}
\end{center}
\end{document}

Los ejemplos de tablas muestran filecontents* junto con el contenido de cada CSV. Para trabajar en Paper Studio, guardar ese contenido en un archivo de datos del proyecto con el nombre indicado y conservar la llamada a \NoctiTable o \NoctiScalarTable.
Las alternativas de una opción se prueban sustituyendo el valor indicado; no es necesario superponer todos los casos en una figura. Los errores deliberados se explican en prosa y no forman parte de los bloques compilables.
Convenciones de escritura y unidades
Noctiks crea gráficas y diagramas 2D con texto LaTeX editable. Carga noctiks para diagramas o noctiplots para disponer también de gráficas científicas. Compila el documento en Paper Studio para actualizar el PDF.
\documentclass{article}
\usepackage[letterpaper,margin=15mm]{geometry}
\usepackage{noctiplots}
\setlength{\parindent}{0pt}
\begin{document}
\begin{figure}[htbp]
\centering
\begin{noctiaxis}[width=360,height=220]
[axes=origin-box,xmin=0,xmax=6.3,ymin=-1.2,ymax=1.2]
\NoctiFunction[domain=0:6.3,stroke=blue,width=1.4]{sin(x)}
\NoctiXLabel{$x$}
\NoctiYLabel{$\sin(x)$}
\end{noctiaxis}
\caption{Una función evaluada por Noctiks y texto compuesto por LaTeX.}
\end{figure}
\end{document}

Las opciones se escriben como clave=valor y se separan con comas. Una clave desconocida, duplicada o sin = produce error. Los nombres distinguen mayúsculas y minúsculas. No se añade una clave a otro comando por analogía: cada familia tiene una lista admitida. En noctiaxis, el primer argumento opcional configura el lienzo; el segundo configura los ejes. En noctipanels, el primero configura el lienzo y el segundo la cuadrícula.
| Notación | Significado | Ejemplo |
|---|---|---|
x,y |
Par de coordenadas o componentes | 2,3 |
x1,y1;x2,y2;... |
Lista de puntos | 0,0;1,2;2,1 |
a:b |
Intervalo creciente cuando lo exige el comando | 0:2*pi |
r:g:b |
Color RGB con componentes entre 0 y 1 | 0.2:0.4:0.8 |
d1:d2:... |
Secuencia de trazo y espacio | 5:3 |
a -> b -> c |
Lista de nodos en los comandos semánticos que la aceptan | input -> G -> output |
bp |
Punto PDF: 1/72 de pulgada | width=360 equivale a 5 pulgadas de lienzo |
| Unidad de datos | Unidad de los valores representados | barwidth=0.5 es anchura en X, no 0.5 bp |
Las coordenadas de diagramas se miden en bp desde la esquina inferior izquierda, con Y creciente hacia arriba. Las coordenadas de una gráfica son datos transformados por sus escalas. Grosor, símbolos, separación y medidas tipográficas emplean bp, salvo que una tabla indique otra unidad. Las cantidades usan punto decimal; se admite notación científica, como 1.2e-4. No escribas unidades dentro de valores numéricos: width=360, no width=360bp.
Las coordenadas y opciones numéricas deben ser finitas y tener valor absoluto no mayor que 1e12; cada parámetro puede imponer límites más estrechos. Las dimensiones del lienzo están en (0,2000] bp. Las constantes científicas pueden superar 1e12, pero su uso en una coordenada vuelve a someterse al límite gráfico.
El texto entre llaves de etiquetas admite LaTeX y matemáticas. Las fórmulas que evalúa Noctiks emplean su propia gramática numérica. Por ejemplo, una etiqueta puede ser $\sin(x)$, mientras que la fórmula de una curva es sin(x).
Noctiks reserva la caja del tamaño declarado. LaTeX decide su posición en la página; figure y \centering permiten centrarla. Aumentar el dominio de una función no cambia automáticamente un rango explícito de eje, y cambiar el rango visible no modifica el dominio de evaluación.
Expresiones matemáticas
El evaluador acepta números Double, las constantes incorporadas pi y e, constantes declaradas por el usuario y las operaciones de esta tabla. Las funciones reciben un argumento; los ángulos están en radianes.
| Operador o función | Significado y dominio real | Ejemplo válido |
|---|---|---|
+, - |
Suma, resta y signos unarios | x+2, -x |
*, / |
Multiplicación y división explícitas; divisor distinto de cero para un resultado finito | 2*x, x/3 |
^ |
Potencia; debe dar un resultado real finito en cada evaluación útil | x^2, 2^(-x) |
(...) |
Agrupación | (x+1)/(x+2) |
sin(...) |
Seno | sin(x) |
cos(...) |
Coseno | cos(2*x) |
tan(...) |
Tangente; tiene singularidades | tan(x) |
asin(...) |
Arcoseno, argumento en [-1,1] |
asin(x/2) |
acos(...) |
Arcocoseno, argumento en [-1,1] |
acos(x/2) |
atan(...) |
Arcotangente | atan(x) |
exp(...) |
Exponencial de base e | exp(-x) |
ln(...), log(...) |
Logaritmo natural, argumento positivo; son equivalentes | ln(x), log(x) |
log10(...) |
Logaritmo decimal, argumento positivo | log10(x) |
sqrt(...) |
Raíz cuadrada, argumento no negativo | sqrt(x) |
abs(...) |
Valor absoluto | abs(x) |
pi, e |
Constantes matemáticas incorporadas | sin(pi/2), ln(e) |
Primero se resuelven agrupación y funciones, después potencias, signos unarios, multiplicación/división y suma/resta. La potencia asocia a la derecha: 2^3^2 significa 2^(3^2). -2^2 vale -4; (-2)^2 vale 4. Los signos pueden aparecer en exponentes: 2^-2 vale 0.25.
| Familia | Variables admitidas | Caso de uso |
|---|---|---|
| Función cartesiana, tramos, banda, relleno e integral | x |
sin(x) |
| Curva paramétrica o polar | t |
cos(t), 1+0.2*sin(3*t) |
| Campo vectorial o escalar y ecuaciones de trayectoria | x, y |
-y, x, x^2+y^2 |
| Definición de constante y configuración escalar | Ninguna variable libre | 2*pi, masa/gravedad |
Se requiere multiplicación explícita: 2*x, a*b y sin(x) son válidos; 2x, ab como producto implícito y \sin(x) como fórmula numérica no lo son. ab se interpreta como un nombre de constante completo. No hay condicionales, comparaciones, funciones de varios argumentos, factoriales, matrices, números complejos, unidades automáticas ni funciones definidas por el usuario. Para definir una función por intervalos se utiliza \NoctiFunctionPiece.
\documentclass{article}
\usepackage[letterpaper,margin=15mm]{geometry}
\usepackage{noctiplots}
\setlength{\parindent}{0pt}
\begin{document}
\begin{noctiaxis}[width=420,height=250]
[xmin=0.1,xmax=3,ymin=-3,ymax=4,palette=scientific]
\NoctiFunction[domain=0.1:3]{ln(x)}
\NoctiFunction[domain=0.1:3]{sqrt(x)}
\NoctiFunction[domain=0.1:3]{exp(-x)*sin(2*pi*x)}
\NoctiLegend{$\ln x$}
\NoctiLegend{$\sqrt{x}$}
\NoctiLegend{$e^{-x}\sin(2\pi x)$}
\end{noctiaxis}
\end{document}

Una fórmula sintácticamente válida puede dejar de estar definida en algunos puntos. En curvas, las muestras no finitas o fuera del límite gráfico se separan mediante huecos y diagnósticos. Esto no constituye una prueba matemática de continuidad; conviene revisar singularidades y elegir dominio y muestreo apropiados. En constantes, cualquier resultado no finito o dominio matemático inválido provoca error, aunque otra operación pudiera ocultarlo después.
Los límites predeterminados son 2048 bytes y 256 nodos de gramática por expresión, con profundidad 64. La profundidad cuenta niveles del parser, no exclusivamente paréntesis.
Constantes con nombre y alcance
Firma:
\NoctiConstant{nombre}{expresión escalar}
| Elemento | Regla | Ejemplo |
|---|---|---|
nombre |
Letra ASCII inicial, seguida de letras ASCII, dígitos o _; 1–64 bytes; distingue mayúsculas |
masa_base, NA |
expresión escalar |
Número finito o expresión sin x, y, t; admite otras constantes |
68.1, masa/rozamiento |
| Nombres reservados | x, y, t, pi, e y los 12 nombres de función anteriores |
Usa tiempo_final, no t |
| Definiciones por alcance | 256 nombres efectivos por defecto, incluidos heredados | Un panel puede sustituir masa |
| Dependencias | Referencias adelantadas admitidas; ciclos prohibidos; hasta 64 niveles | tau=masa/rozamiento |
Las constantes declaradas antes de la primera figura pertenecen al documento y se heredan. Después de la primera figura, una declaración fuera de una figura es un error. Dentro de una figura, la declaración es local a esa figura; dentro de noctipanel, es local al panel. En noctipanels, una declaración fuera de sus paneles pertenece a la figura completa.
Una definición local sustituye una heredada y recalcula las dependencias heredadas en ese contexto. No modifica los otros paneles ni la siguiente figura. Dos definiciones del mismo nombre en un mismo alcance son un error; no se trata de asignaciones sucesivas. Las declaraciones se recogen antes de evaluar el contenido, de modo que una constante local puede configurar las opciones del eje que la contiene.
Ejemplo completo con parámetros físicos, dependencias y constante científica grande:
\documentclass{article}
\usepackage[letterpaper,margin=15mm]{geometry}
\usepackage{noctiplots}
\NoctiConstant{g}{9.8}
\NoctiConstant{masa}{68.1}
\NoctiConstant{rozamiento}{12.5}
\NoctiConstant{tau}{masa/rozamiento}
\NoctiConstant{velocidad_terminal}{g*masa/rozamiento}
\NoctiConstant{tiempo_final}{10*tau}
\NoctiConstant{NA}{6.02214076e23}
\NoctiConstant{cantidad}{1e-23}
\setlength{\parindent}{0pt}
\begin{document}
\begin{noctiaxis}[width=400,height=240]
[xmin=0,xmax=tiempo_final,ymin=0,ymax=1.1*velocidad_terminal]
\NoctiFunction[domain=0:tiempo_final,samples=301,stroke=blue]
{velocidad_terminal*(1-exp(-x/tau))}
\NoctiXLabel{$t$ (s)}
\NoctiYLabel{$v(t)$ (m/s)}
\end{noctiaxis}
\par\medskip
\begin{noctiaxis}[width=360,height=220]
[xmin=0,xmax=1,ymin=0,ymax=8]
\NoctiFunction[domain=0:1]{NA*cantidad*x}
\end{noctiaxis}
\end{document}

Ejemplo de sustitución por panel y referencia adelantada local:
\documentclass{article}
\usepackage[letterpaper,margin=15mm]{geometry}
\usepackage{noctiplots}
\NoctiConstant{amplitud}{1}
\NoctiConstant{doble}{2*amplitud}
\setlength{\parindent}{0pt}
\begin{document}
\begin{noctipanels}[width=520,height=250]
[rows=1,columns=2,share=both,xmin=0,xmax=6.3,ymin=-4.5,ymax=4.5]
\begin{noctipanel}
\NoctiFunction[domain=0:6.3]{doble*sin(x)}
\NoctiTitle{Amplitud heredada}
\end{noctipanel}
\begin{noctipanel}
\NoctiConstant{amplitud}{amplitud_local}
\NoctiConstant{amplitud_local}{2}
\NoctiFunction[domain=0:6.3]{doble*sin(x)}
\NoctiTitle{Amplitud local}
\end{noctipanel}
\end{noctipanels}
\end{document}

Los límites compartidos se evalúan con las constantes de la figura. Los límites propios de un panel se evalúan con las de ese panel; si un límite ya está compartido, el panel debe conservar el mismo valor. Cada alcance debe ser válido por sí mismo: una sustitución local no rescata una definición inválida del documento.
Estas entradas admiten constantes y expresiones escalares, conservando las restricciones particulares de cada comando:
| Entrada | Campos normalizados | Ejemplo |
|---|---|---|
| Ejes, paneles y límites compartidos | xmin, xmax, ymin, ymax, xtickstep, ytickstep, ylabeldx, cuando la familia admite la clave |
xmax=2*pi |
| Funciones y curvas | domain, samples, maxsamples, rangesamples, barwidth, cuando corresponden |
samples=100+101 |
| Función por tramos | Extremos del intervalo y fórmula | \NoctiFunctionPiece{0:pi}{sin(x)} |
| Relleno e integral | domain, baseline, samples, n, según el comando |
baseline=-amplitud |
| Bandas | domain, samples |
domain=0:tiempo_final |
| Campo escalar | xdomain, ydomain, nx, ny, levels, levelcount, zmin, zmax |
levels=0:amplitud:doble |
| Campo vectorial | xdomain, ydomain, nx, ny, scale |
scale=1/2 |
| Trayectoria y línea de corriente | Semilla, step, steps y fórmulas |
steps=10*50 |
| Datos explícitos | Coordenadas y distancias de error de NoctiPlot |
0,amplitud;pi,doble |
| Anotaciones | Coordenadas de Point, Segment, Vector y Region; posición de XLine/YLine y XTick/YTick; componentes de operaciones vectoriales | \NoctiXLine{pi} |
Un parámetro entero sigue exigiendo resultado entero: samples=2.5 es inválido. No se expanden macros TeX dentro de fórmulas. Las etiquetas no sustituyen nombres por sus valores; escribe su contenido tipográfico explícitamente.
Colores, grosor, opacidad, dimensiones del lienzo, márgenes, tolerancia adaptativa, identificadores, nombres de columnas, valores de CSV/TSV y geometría de diagramas mantienen su sintaxis propia. Una constante no convierte cualquier campo de texto en una expresión. ylabeldx es una excepción explícita de desplazamiento que sí se normaliza.
Ejemplos de errores de constantes y su corrección:
| Caso rechazado | Motivo | Corrección |
|---|---|---|
a=b+1, b=a+1 |
Dependencia circular | Expresar una de ellas mediante un valor independiente |
masa=2*masa en el mismo contexto |
Autorreferencia; no significa multiplicar un valor anterior | Declarar masa_base y usar masa=2*masa_base |
a=sqrt(-1) |
Resultado fuera del dominio real | Corregir la expresión o su supuesto físico |
Dos declaraciones locales de a |
Duplicado en el mismo alcance | Conservar una declaración o separar escenarios en paneles |
2masa |
Multiplicación implícita no admitida | 2*masa |
mi_constante no declarada |
Nombre desconocido | Añadir su declaración en un alcance visible |
Estilos comunes, colores y paletas
Las opciones de estilo siguientes forman la base compartida. Cada comando indica cuáles acepta; por ejemplo, los grupos semánticos rechazan arrow. Los rellenos científicos pueden definir valores por defecto diferentes de los de esta tabla.
| Parámetro | Valor base | Valores y unidad | Ejemplo |
|---|---|---|---|
stroke |
black |
Nombre admitido o RGB; color del contorno | stroke=blue |
fill |
Ausente: sin relleno geométrico | Nombre, RGB o none; algunos símbolos usan el color del trazo si no se fija |
fill=0.9:0.95:1 |
width |
0.8 |
(0,100] bp |
width=1.4 |
dash |
Ausente: trazo continuo | Hasta 8 longitudes en (0,1000] bp, separadas con : |
dash=5:3, dash=1:3:5:3 |
arrow |
none en el estilo base |
none, end, both; un comando puede establecer end como su valor propio |
arrow=end |
opacity |
1 |
[0,1]; afecta al dibujo nativo, no al texto LaTeX superpuesto |
opacity=0.25 |
stroke=none no es un color válido. Para desactivar un relleno se usa fill=none. Los trazos usan extremos y uniones redondeados. Un símbolo, un área o un conector puede tener semántica adicional descrita en su sección.
| Color | RGB exacto |
|---|---|
black |
0:0:0 |
white |
1:1:1 |
blue |
0.08:0.3:0.7 |
red |
0.8:0.16:0.12 |
green |
0.08:0.5:0.35 |
gray |
0.6:0.6:0.6 |
cyan |
0:0.65:0.75 |
orange |
0.95:0.45:0.1 |
purple |
0.5:0.2:0.65 |
No se interpretan colores hexadecimales, expresiones de xcolor ni nombres definidos con \definecolor en las opciones de Noctiks. Para un color propio, escribe tres componentes RGB entre 0 y 1.
\documentclass{article}
\usepackage{noctiks}
\setlength{\parindent}{0pt}
\begin{document}
\begin{noctikspicture}[width=320,height=160]
\NoctiksRect[stroke=blue,fill=0.9:0.95:1,width=1.4]{20,30}{100,80}
\NoctiksLine[stroke=red,width=2,dash=5:3,arrow=both]{145,40}{285,110}
\NoctiksCircle[stroke=purple,fill=cyan,opacity=0.35]{220,75}{30}
\NoctiksLabel{70,70}{Relleno RGB}
\end{noctikspicture}
\end{document}

Estilos de serie reutilizables
Firma:
\NoctiStyle{nombre}{opciones de estilo}
\NoctiPlot[style=nombre,...]{...}
NoctiStyle se declara dentro de una figura. Acepta las seis claves de estilo base más marker y markersize. No acepta kind, dominios, muestreo ni límites de eje. El nombre debe ser único en la figura, no vacío y de hasta 32 caracteres ASCII entre letras, números y _. Se recopilan todas las definiciones de la figura antes de aplicarlas; pueden aparecer antes o después de su uso. Los nombres de estilos no son constantes numéricas.
| Parámetro | Predeterminado | Valores y unidad | Ejemplo |
|---|---|---|---|
style en una serie |
Ausente | Nombre de estilo declarado en la figura | style=medida |
marker |
auto |
auto, none, circle, square, triangle, diamond, cross |
marker=diamond |
markersize |
2.5 |
(0,20] bp |
markersize=3 |
palette en eje o panel |
none |
none, scientific, gray |
palette=scientific |
Los estilos reutilizables se aplican a Plot, Function, Table, Parametric, Polar y FunctionPiece. No se aplican mediante style= a bandas, rellenos, trayectorias ni comandos de geometría. Un estilo declarado en un panel pertenece a toda la figura; no declares dos veces el mismo nombre en paneles diferentes.
La precedencia es: paleta del eje o panel → estilo nombrado → opciones escritas en la serie. Una clave explícita gana sobre la heredada. Una paleta reinicia su contador al comenzar cada eje o panel. Cada serie de las seis familias anteriores consume una posición, incluidas las que especifican su color explícitamente; las anotaciones y bandas no la consumen.
| Paleta | Comportamiento |
|---|---|
none |
No asigna estilo automático; se conservan el estilo base, el nombrado y las opciones de la serie |
scientific |
Repite blue, orange, green, purple, cyan, red; en barras también establece el relleno de ese color |
gray |
Trazo negro; alterna continuo, 5:3, 1:3; las barras alternan rellenos RGB 0.25:0.25:0.25, 0.55:0.55:0.55, 0.8:0.8:0.8; scatter/error alternan circle, square, triangle, diamond y cross |
\documentclass{article}
\usepackage[letterpaper,margin=15mm]{geometry}
\usepackage{noctiplots}
\setlength{\parindent}{0pt}
\begin{document}
\begin{noctiaxis}[width=420,height=250]
[xmin=0,xmax=3,ymin=0,ymax=5,palette=scientific]
\NoctiStyle{medida}{width=1.1,marker=diamond,markersize=3}
\NoctiPlot[kind=scatter,style=medida]{0,1;1,2;2,2.5;3,4}
\NoctiFunction[domain=0:3,width=1.5]{1+x}
\NoctiFunction[domain=0:3,style=medida,stroke=purple,marker=none]{0.4+x}
\NoctiLegend{Medidas}
\NoctiLegend{Modelo}
\NoctiLegend{Color explícito}
\end{noctiaxis}
\par\medskip
\begin{noctiaxis}[width=380,height=230]
[xmin=0,xmax=3,ymin=0,ymax=5,palette=gray]
\NoctiPlot[kind=scatter]{0,1;1,2;2,2.5;3,4}
\NoctiPlot[kind=scatter]{0,1.5;1,2.5;2,3;3,4.5}
\NoctiFunction[domain=0:3]{x+1}
\end{noctiaxis}
\end{document}

auto utiliza el símbolo que corresponde al tipo de serie: scatter/error muestran símbolos; una línea ordinaria permanece sin símbolos por defecto. Usa un nombre concreto para añadirlos expresamente o none para retirarlos.
Plantilla científica del repositorio
El siguiente ejemplo define un entorno ScientificPlot y un comando \MeasurementStyle reutilizables. Pueden copiarse al proyecto; son una plantilla de autoría y no comandos incorporados de noctiplots.
ScientificPlot usa lienzo 500 × 240 bp y opciones axes=box,palette=scientific,grid=major. Su argumento opcional añade otras opciones del eje. No repitas axes, palette o grid, porque las claves duplicadas fallan. \MeasurementStyle declara dentro de la figura un estilo measurement con marker=diamond,markersize=3,width=1.1.
Ejemplo autocontenido equivalente a cargar la plantilla:
\documentclass{article}
\usepackage[letterpaper,margin=15mm]{geometry}
\usepackage{noctiplots}
\newenvironment{ScientificPlot}[1][]{%
\begin{noctiaxis}[width=500,height=240]
[axes=box,palette=scientific,grid=major,#1]%
}{\end{noctiaxis}}
\newcommand{\MeasurementStyle}{%
\NoctiStyle{measurement}{marker=diamond,markersize=3,width=1.1}%
}
\setlength{\parindent}{0pt}
\begin{document}
\begin{ScientificPlot}[xmin=0,xmax=3,ymin=0,ymax=5]
\MeasurementStyle
\NoctiPlot[kind=scatter,style=measurement]{0,1;1,2;2,3;3,4}
\NoctiFunction[domain=0:3]{x+1}
\end{ScientificPlot}
\end{document}

Archivos CSV y TSV
Firma:
\NoctiTable[opciones de serie y columnas]{ruta relativa}
La primera fila contiene encabezados únicos y no vacíos. Debe existir al menos una fila de datos; todas las filas tienen el mismo número de columnas. El archivo debe ser UTF-8, con BOM opcional. Se admiten finales de línea LF, CRLF y CR, campos entre comillas dobles y comillas escapadas mediante "". Se eliminan espacios exteriores de los campos y se ignoran filas completamente vacías.
Los nombres de columna distinguen mayúsculas y minúsculas. Cada celda utilizada como dato debe contener un número finito de valor absoluto no mayor que 1e12. La notación científica es válida. No se evalúan constantes ni fórmulas dentro del archivo: 2*pi, NA, NaN y Inf no son números de tabla válidos. Las columnas que no se representan pueden contener texto; ese texto no se convierte en LaTeX.
| Parámetro de tabla | Predeterminado | Valores y condición | Ejemplo |
|---|---|---|---|
| Ruta, argumento obligatorio | Sin valor | Ruta relativa al proyecto; sin componentes vacíos, . o .., ni \, :, NUL o / inicial |
datos/ensayo.csv |
x |
x |
Encabezado de columna horizontal | x=tiempo |
y |
y |
Encabezado de columna vertical | y=altura |
delimiter |
tab si la extensión es .tsv, ignorando mayúsculas; comma en otros casos |
tab o comma; puede anularse explícitamente |
delimiter=comma |
xerror |
Ausente: cero | Columna de distancia de error simétrico X, no negativa | xerror=sigma_t |
yerror |
Ausente: cero | Columna de distancia de error simétrico Y, no negativa | yerror=sigma_h |
xminus, xplus |
Ausentes: cero | Pareja de columnas para distancias asimétricas X, no negativas | xminus=tm,xplus=tp |
yminus, yplus |
Ausentes: cero | Pareja de columnas para distancias asimétricas Y, no negativas | yminus=hm,yplus=hp |
missing |
error |
error o gap; sólo una celda Y vacía se convierte en interrupción |
missing=gap |
kind |
line |
line, scatter, bar, error; significado igual al de Plot |
kind=error |
barwidth |
0.8 |
Positivo, en unidades de datos X | barwidth=0.5 |
id |
Ausente | Identificador de serie para FillBetween; véase su sección | id=medicion |
| Estilo de serie | Estilo común | stroke, fill, width, dash, arrow, opacity, marker, markersize, style |
stroke=blue,marker=circle |
No combines error simétrico y asimétrico en el mismo eje. Una pareja asimétrica debe contener ambos encabezados, aunque una de las distancias sea cero. Los errores son distancias respecto al dato central, no extremos absolutos. Las columnas X e Y y sus errores deben producir coordenadas compatibles con las escalas del eje.
Una tabla de una sola muestra requiere un tipo distinto de line, por ejemplo kind=scatter. Una línea necesita al menos dos muestras finitas. missing=gap no ordena ni interpola la tabla: mantiene el orden de las filas e interrumpe la polilínea. X sigue siendo obligatorio en una fila con Y vacía; NA no representa una celda vacía.
Ejemplo con columnas propias y errores simétricos. En un proyecto normal, guarda el contenido CSV en datos-simetricos.csv y elimina el entorno filecontents*; aquí se incluye para que el documento sea autocontenido.
\documentclass{article}
\usepackage[letterpaper,margin=15mm]{geometry}
\usepackage{noctiplots}
\begin{filecontents*}{datos-simetricos.csv}
tiempo,altura,sigma_t,sigma_h
0,1.0,0.05,0.15
1,2.2,0.05,0.20
2,2.8,0.08,0.18
3,4.1,0.10,0.25
\end{filecontents*}
\setlength{\parindent}{0pt}
\begin{document}
\begin{noctiaxis}[width=400,height=240]
[xmin=-0.2,xmax=3.3,ymin=0,ymax=5]
\NoctiTable[x=tiempo,y=altura,xerror=sigma_t,yerror=sigma_h,
kind=error,marker=diamond,stroke=blue]{datos-simetricos.csv}
\NoctiXLabel{Tiempo (s)}
\NoctiYLabel{Altura (m)}
\end{noctiaxis}
\end{document}

Ejemplo con errores asimétricos en ambos ejes:
\documentclass{article}
\usepackage[letterpaper,margin=15mm]{geometry}
\usepackage{noctiplots}
\begin{filecontents*}{datos-asimetricos.csv}
x,y,xm,xp,ym,yp
1,2,0.1,0.2,0.2,0.4
2,3,0.2,0.1,0.3,0.5
3,4,0.1,0.3,0.4,0.2
\end{filecontents*}
\setlength{\parindent}{0pt}
\begin{document}
\begin{noctiaxis}[width=400,height=240]
[xmin=0,xmax=4,ymin=0,ymax=5]
\NoctiTable[kind=error,xminus=xm,xplus=xp,yminus=ym,yplus=yp,
marker=square,stroke=purple]{datos-asimetricos.csv}
\end{noctiaxis}
\end{document}

Ejemplo con un hueco explícito. Las filas antes y después de x=2 forman segmentos separados.
\documentclass{article}
\usepackage[letterpaper,margin=15mm]{geometry}
\usepackage{noctiplots}
\begin{filecontents*}{datos-hueco.csv}
x,y
0,0
1,1
2,
3,2
4,3
\end{filecontents*}
\setlength{\parindent}{0pt}
\begin{document}
\begin{noctiaxis}[width=400,height=240]
[xmin=0,xmax=4,ymin=0,ymax=4]
\NoctiTable[missing=gap,marker=circle,stroke=green]{datos-hueco.csv}
\end{noctiaxis}
\end{document}

Para TSV, crea por ejemplo datos.tsv con un tabulador real entre cada campo y usa \NoctiTable{datos.tsv}. No escribas los dos caracteres \t en lugar del tabulador. Si un archivo tabulado tiene otra extensión, especifica delimiter=tab; si un archivo .tsv contiene comas, especifica delimiter=comma.
Límites predeterminados: 8 000 000 bytes por archivo, 128 columnas, 8192 bytes de contenido por campo y hasta 100 000 filas de datos, además del presupuesto compartido de puntos de la figura. El encabezado no cuenta como fila de datos. Los campos entre comillas pueden contener delimitadores; para representar un número sigue siendo necesario que el campo completo sea numérico.
Ejes y área de dibujo
noctiaxis recibe dos listas opcionales distintas: dimensiones físicas y configuración del eje. Las coordenadas interiores usan unidades de datos; el ancho, alto, grosores y desplazamientos usan bp. Un bp equivale a 1/72 de pulgada.
\begin{noctiaxis}[width=420,height=260][opciones del eje]
comandos de series, anotaciones y etiquetas
\end{noctiaxis}
Si se omite la primera lista, el lienzo mide 320 × 200 bp. Para configurar únicamente el eje, escribir \begin{noctiaxis}[][axes=box]. width en la primera lista mide el lienzo completo, incluidos los márgenes y las leyendas; en una serie mide el grosor del trazo.
Límites y presentación
| Parámetro | Valores y predeterminado | Efecto y ejemplo |
|---|---|---|
xmin, xmax |
Números finitos dentro de ±1e12; automáticos al omitirlos | Límites horizontales. Debe cumplirse mínimo < máximo. xmin=-2,xmax=2. |
ymin, ymax |
Igual contrato; automáticos | Límites verticales. ymin=-1,ymax=4. |
xscale, yscale |
linear o log; linear |
Escala lineal o logaritmo base 10. yscale=log. |
axes |
edge, origin, box, origin-box; edge |
Ejes inferior/izquierdo; cruce en cero; marco; marco y cruce en cero, respectivamente. |
ticks |
axis o edge |
edge por defecto con origin-box; axis en los demás. Decide dónde van marcas y números. |
axisarrows |
none, end, both; none |
Puntas en los dos ejes principales, no en todos los bordes del marco. end apunta hacia X/Y positivos. |
aspect |
auto o equal; auto |
equal conserva la misma longitud física por unidad X e Y; requiere ejes lineales. |
xmargin, ymargin |
Fracción de 0 a 1; 0 |
Añade esa fracción del rango a cada extremo automático. ymargin=0.1 añade 10 % por lado. |
ylabeldx |
De −40 a 40 bp; 0 |
Ajusta la etiqueta Y horizontal. Positivo la acerca al eje. Requiere \NoctiYLabel y espacio sin invadir números. |
labelcollision |
manual o avoid; manual |
Colocación opcional de etiquetas de puntos; véase Anotaciones y referencias. |
bars |
overlay, grouped, stacked; overlay |
Disposición de todas las series de barras del eje. |
palette |
none, scientific, gray; none |
Estilos por orden de serie. Véase Estilos y colores. |
El autorango incluye muestras de series, extremos de errores, anchura y altura de barras, límites de bandas directas y extensión de mallas escalares. Puntos anotados, líneas de referencia, vectores explícitos, campos vectoriales, regiones y rellenos bajo curva no lo amplían. Para dibujar solo con estas decoraciones, declarar los cuatro límites. Si existen series pero ninguna aporta muestras finitas ni otros datos de rango, el eje falla aunque se hayan escrito límites; una línea exige además sus dos muestras finitas.
Los límites explícitos tienen prioridad y recortan la geometría; el dominio de evaluación de una función se configura por separado. Un rango automático constante se expande. En origin y origin-box, los extremos automáticos lineales incluyen cero antes de aplicar márgenes. Si cero queda fuera de un rango explícito, el eje cruza en el borde más cercano y emite diagnóstico; en escala log cruza en el límite inferior.
Las escalas log requieren coordenadas y extremos de error positivos, incluso cuando los datos están fuera de la ventana visible. Los márgenes log se calculan en espacio log10. aspect=equal conserva los límites y centra un área reducida dentro del lienzo; no fuerza un marco cuadrado cuando los rangos X/Y son distintos. El área útil debe medir al menos 70 × 60 bp después de reservar textos.
Ejemplo con origen, marco, flechas y proporción geométrica:
\begin{noctiaxis}[width=420,height=280]
[axes=origin-box,ticks=edge,axisarrows=end,aspect=equal,
xmin=-2,xmax=2,ymin=-1.5,ymax=1.5]
\NoctiParametric[domain=0:2*pi,samples=301]{cos(t)}{sin(t)}
\NoctiXLabel{$x$}\NoctiYLabel{$y$}
\end{noctiaxis}

Ejemplo de escala logarítmica y márgenes automáticos:
\begin{noctiaxis}[width=400,height=250]
[axes=box,yscale=log,xmargin=0.05,ymargin=0.1]
\NoctiFunction[domain=0:4,samples=101]{exp(x)}
\NoctiXLabel{$x$}\NoctiYLabel{$e^x$}
\end{noctiaxis}

Cuadrícula y marcas
| Parámetro | Valores y predeterminado | Efecto y ejemplo |
|---|---|---|
grid |
true, false, major, minor, both, none; true |
true equivale a major; false, a none. |
gridaxis |
both, x, y; both |
Líneas verticales de X, horizontales de Y o ambas. |
xtickstep, ytickstep |
Paso positivo; selección automática si se omiten | Solo en escalas lineales. xtickstep=0.5. Máximo 200 marcas mayores por eje. |
xminor, yminor |
Enteros de 1 a 10; 2 |
Subdivisiones por intervalo mayor. 1 no añade líneas menores. |
gridcolor |
Color; 0.86:0.88:0.9 |
Color de líneas mayores. gridcolor=gray. |
gridwidth |
Grosor de trazo en (0,100] bp; 0.4 |
gridwidth=0.6. |
griddash |
Lista positiva con :; continua |
griddash=3:2; griddash= vuelve a continuo. |
gridopacity |
De 0 a 1; 1 |
gridopacity=0.5. |
minorgridcolor |
Color; 0.94:0.94:0.94 |
Color de líneas menores. |
minorgridwidth |
Grosor en (0,100] bp; 0.25 |
minorgridwidth=0.3. |
minorgriddash |
Lista positiva con :; continua |
minorgriddash=1:3. |
minorgridopacity |
De 0 a 1; 1 |
minorgridopacity=0.6. |
Cambiar el estilo no activa una cuadrícula apagada. Las subdivisiones menores no añaden números ni pequeñas marcas al eje. En log se espacian geométricamente: con dos subdivisiones entre 1 y 10, la línea intermedia está en √10. El recorrido menor se limita a 2000 candidatos por eje y al presupuesto de figura.
\begin{noctiaxis}[width=420,height=260]
[xmin=-2,xmax=2,ymin=0,ymax=4,axes=box,grid=both,gridaxis=both,
xtickstep=1,ytickstep=1,xminor=4,yminor=2,
gridcolor=gray,gridwidth=0.5,griddash=3:2,gridopacity=0.7,
minorgridcolor=cyan,minorgridwidth=0.25,minorgriddash=1:3,
minorgridopacity=0.35]
\NoctiFunction[domain=-2:2,stroke=blue]{x^2}
\end{noctiaxis}

\NoctiXTick{posición}{texto TeX} y \NoctiYTick{posición}{texto TeX} sustituyen todas las marcas automáticas del eje correspondiente. No amplían límites. Se admiten hasta 200 por eje, con posiciones distintas y dentro del rango final. No combinarlas con xtickstep/ytickstep del mismo eje. La cuadrícula mayor sigue las posiciones; la menor subdivide los intervalos entre marcas, sin extrapolar fuera de las personalizadas. Una única marca no genera subdivisiones.
\begin{noctiaxis}[width=420,height=250]
[xmin=-pi,xmax=pi,ymin=-1.2,ymax=1.2,axes=origin-box,grid=both]
\NoctiFunction[domain=-pi:pi,samples=301]{sin(x)}
\NoctiXTick{-pi}{$-\pi$}\NoctiXTick{0}{$0$}
\NoctiXTick{pi/2}{$\pi/2$}\NoctiXTick{pi}{$\pi$}
\NoctiYTick{-1}{$-1$}\NoctiYTick{1}{$1$}
\end{noctiaxis}

Títulos y leyendas
| Comando | Argumento y comportamiento |
|---|---|
\NoctiTitle{texto} |
Un título por eje. |
\NoctiXLabel{texto} |
Una etiqueta X, exterior al área de datos. |
\NoctiYLabel{texto} |
Una etiqueta Y horizontal, exterior. |
\NoctiLegend{texto} |
Una entrada por serie, en el orden de series. Puede omitirse la leyenda de las últimas series. |
Los textos aceptan TeX y se miden con su tipografía real. Los rellenos, regiones, bandas, referencias y vectores explícitos no consumen entradas de leyenda. Trayectorias y líneas de flujo sí son series. Las leyendas reproducen trazo, marcadores, relleno de barras y errores; su posición no se optimiza para evitar curvas.
| Parámetro | Valores y predeterminado | Ejemplo y efecto |
|---|---|---|
legendpos |
right, topright, topleft, topcenter, bottomleft, bottomcenter, bottomright, center, custom; right |
right es exterior; las demás son interiores. |
legendsize |
inherit, tiny, scriptsize, footnotesize, small, normalsize, large; inherit |
legendsize=small aplica la fuente antes de medir. |
legendgap |
De 0 a 100 bp; automático al omitirlo | Sin valor explícito, paso de fila = máximo entre 18 bp y altura mayor + 6 bp. Con valor: altura mayor, mínimo 5 bp, + gap. |
legendpadding |
De 0 a 100 bp | Interior: 8 bp horizontales y 6 verticales si se omite; legendpadding=5 usa 5 en ambos. |
legenddx, legenddy |
De −2000 a 2000 bp; 0 |
Desplazan derecha/arriba con signo positivo. |
legendat |
u:v, ambos de 0 a 1; obligatorio en custom |
legendat=0.5:0.98: posición relativa al área de datos, independiente de la escala. |
legendanchor |
northwest, north, northeast, center, southwest, south, southeast; northwest |
Punto del recuadro que se fija en legendat; solo con custom. |
legendat y legendanchor requieren legendpos=custom. Una leyenda interior debe caber en el área útil; la exterior, en su espacio disponible. Si se sale, se produce error. El fondo blanco interior tapa geometría; los textos TeX de otras etiquetas se componen encima. Una fuente explícita dentro de una entrada puede prevalecer sobre legendsize.
\begin{noctiaxis}[width=440,height=280]
[xmin=-2,xmax=2,ymin=-2,ymax=6,axes=box,
legendpos=custom,legendat=0.5:0.98,legendanchor=north,
legendsize=small,legendgap=2,legendpadding=5,legenddx=0,legenddy=-2,
ylabeldx=2]
\NoctiFunction[domain=-2:2,stroke=blue]{x^2}
\NoctiFunction[domain=-2:2,stroke=red,dash=4:2]{x}
\NoctiLegend{$x^2$}\NoctiLegend{$x$}
\NoctiTitle{Dos modelos}\NoctiXLabel{$x$}\NoctiYLabel{$f(x)$}
\end{noctiaxis}

Series de datos y barras de error
\NoctiPlot[opciones]{x,y;...}
\NoctiTable[opciones]{ruta relativa del CSV o TSV}
Las muestras se conservan en orden; Noctiks no ordena ni agrega datos. Una línea requiere al menos dos muestras finitas; para un punto aislado usar scatter, bar o error. Todas las opciones de trazo comunes se admiten, además de las siguientes:
| Parámetro | Valores y predeterminado | Ejemplo y alcance |
|---|---|---|
kind |
line, scatter, bar, error; line |
error conecta muestras y dibuja errores; scatter dibuja puntos desconectados, incluidos sus errores. |
barwidth |
Positivo, hasta el límite numérico general; 0.8 unidades X |
Anchura de barras; barwidth=0.6. |
marker |
auto, none, circle, square, triangle, diamond, cross; auto |
auto: círculo en scatter/error; sin marcador en líneas/barras. |
markersize |
Semiextensión en (0,20] bp; 2.5 |
markersize=3. No es diámetro. |
id |
Nombre único de 1–32 caracteres ASCII alfanuméricos o _; sin ID |
Disponible en Plot, Table y Function para NoctiFillBetween. id=modelo. |
style |
Nombre de NoctiStyle; sin estilo nombrado |
Se expande antes de validar la serie. style=medida. |
errors |
symmetric o asymmetric; symmetric |
Solo NoctiPlot: cambia la interpretación de tuplas. |
x, y |
Encabezados; x, y |
Solo NoctiTable: x=tiempo,y=senal. |
xerror, yerror |
Encabezados opcionales; sin error | Distancias simétricas en cada eje. |
xminus, xplus, yminus, yplus |
Pares de encabezados opcionales | Distancias asimétricas. Proporcionar ambos lados del eje elegido. |
delimiter |
comma o tab; según extensión |
.tsv → tab; cualquier otra extensión → comma. |
missing |
error o gap; error |
Una celda Y vacía corta la serie en gap; X sigue siendo numérica. |
Los símbolos usan fill si se declara; de lo contrario, stroke. cross usa solo trazo. Las barras de error tienen terminales de 6 bp y participan en el autorango. Los errores son distancias no negativas desde la medición, nunca extremos absolutos. Por ejemplo, (y=10, yminus=2, yplus=5) cubre [8,15].
Formato simétrico de NoctiPlot: x,y[,yerror[,xerror]], de dos a cuatro campos. Asimétrico: x,y,yminus,yplus[,xminus,xplus], exactamente cuatro o seis campos. Para tablas no se utiliza errors: los encabezados seleccionados definen el formato. Se puede combinar Y simétrico con X asimétrico; no mezclar yerror con yminus/yplus, ni el equivalente en X.
Ejemplo con errores simétricos y asimétricos, marcadores distintos y línea de modelo:
\begin{noctiaxis}[width=460,height=280]
[xmin=0,xmax=4,ymin=0,ymax=7,legendpos=topleft]
\NoctiFunction[domain=0:4,stroke=black,dash=4:2]{1+x}
\NoctiPlot[kind=scatter,stroke=blue,marker=square,markersize=3]
{1,2,0.3,0.1;2,3,0.4,0.2;3,4,0.3,0.1}
\NoctiPlot[kind=error,errors=asymmetric,stroke=red,marker=diamond]
{1,3,0.2,0.5,0.1,0.2;2,4,0.3,0.6,0.1,0.2;3,5,0.2,0.4,0.1,0.3}
\NoctiLegend{Modelo}\NoctiLegend{Simétricos}\NoctiLegend{Asimétricos}
\end{noctiaxis}

Ejemplo autocontenido de tabla con errores asimétricos y hueco. El bloque incluye un archivo auxiliar en el propio .tex; debe colocarse completo en el documento, según las reglas de los ejemplos iniciales:
\documentclass{article}
\usepackage[letterpaper,margin=15mm]{geometry}
\usepackage{noctiplots}
\begin{filecontents*}[overwrite]{manual-medidas.csv}
t,valor,menos,mas
0,1,0.1,0.2
1,2,0.2,0.4
2,,,
3,3,0.3,0.2
4,4,0.2,0.5
\end{filecontents*}
\setlength{\parindent}{0pt}
\begin{document}
\begin{noctiaxis}[width=400,height=260][axes=box]
\NoctiTable[x=t,y=valor,yminus=menos,yplus=mas,missing=gap,
kind=error,stroke=blue,marker=circle]{manual-medidas.csv}
\NoctiXLabel{Tiempo}\NoctiYLabel{Medición}
\end{noctiaxis}
\end{document}

missing=gap omite también los errores de esa fila. NaN, NA y texto inválido no se convierten en huecos. Una fila completamente vacía se ignora y no separa segmentos: para crear un hueco hay que conservar X y dejar Y vacía.
Barras superpuestas, agrupadas y apiladas
En Y lineal la base de las barras normales es cero; en Y log es el límite inferior. Una barra no puede cruzar el origen de una escala X log. Para bars=grouped o stacked ambos ejes deben ser lineales y debe existir al menos una serie de barras.
En grouped y stacked, las series de barras deben tener exactamente las mismas categorías X, únicas y en el mismo orden, igual barwidth, sin huecos ni errores no nulos. No se completan categorías faltantes.
| Disposición | Resultado |
|---|---|
overlay |
Cada serie usa todo su barwidth; se superponen por orden de dibujo. |
grouped |
Divide el ancho total entre las series de barras y desplaza sus centros dentro de cada categoría. |
stacked |
Acumula positivos desde cero hacia arriba y negativos hacia abajo por separado. No normaliza a porcentajes. |
\begin{noctipanels}[width=510,height=270][rows=1,columns=3,gap=12]
\begin{noctipanel}[bars=overlay,palette=scientific,legendpos=topright]
\NoctiPlot[kind=bar]{1,2;2,-3;3,4}
\NoctiPlot[kind=bar]{1,3;2,-1;3,-2}
\NoctiTitle{Superpuestas}
\end{noctipanel}
\begin{noctipanel}[bars=grouped,palette=scientific]
\NoctiPlot[kind=bar,barwidth=0.8]{1,2;2,-3;3,4}
\NoctiPlot[kind=bar,barwidth=0.8]{1,3;2,-1;3,-2}
\NoctiTitle{Agrupadas}
\end{noctipanel}
\begin{noctipanel}[bars=stacked,palette=gray]
\NoctiPlot[kind=bar]{1,2;2,-3;3,4}
\NoctiPlot[kind=bar]{1,3;2,-1;3,-2}
\NoctiTitle{Apiladas}
\end{noctipanel}
\end{noctipanels}

Funciones y curvas
Funciones cartesianas
\NoctiFunction[opciones]{f(x)} evalúa una expresión con variable x; solo admite kind=line. Puede repetirse dentro de un eje y mezclarse con datos. Los estilos de trazo, marcadores y estilos nombrados siguen el contrato de series.
| Parámetro | Valores y predeterminado | Ejemplo y significado |
|---|---|---|
domain |
Intervalo creciente a:b; -5:5 |
domain=0:2*pi. Independiente de xmin/xmax. |
samples |
Entero de 2 a 10001; 201 |
Muestras uniformes iniciales, incluidas las dos fronteras. |
sampling |
uniform o adaptive; uniform |
Refinamiento opcional del dibujo. |
tolerance |
En (0,100] bp; 0.5 |
Solo adaptive: desviación del punto medio respecto a la cuerda en coordenadas finales. |
maxsamples |
Entero; 10001 |
Solo adaptive: presupuesto de evaluaciones, al menos 2*samples-1, máximo 100001 y presupuesto de figura. |
rangesamples |
0 o entero de 2 a 10001; 0 |
Barrido adicional para autorango, independiente de muestras de dibujo. |
id |
Identificador de serie; sin ID | id=superior para relleno entre curvas; no disponible en paramétricas/polares. |
El muestreo uniforme comprueba puntos medios y separa valores indefinidos o saltos sospechosos. Puede omitir singularidades estrechas u oscilaciones alineadas con las muestras. El modo adaptativo refina hasta profundidad 16; si agota presupuesto/profundidad o encuentra un punto medio indefinido, corta el segmento y emite diagnóstico. tolerance no es una cota global del error matemático.
El autorango usa las muestras iniciales y, si se solicita, rangesamples; el refinamiento adaptativo no modifica el encuadre. rangesamples consume presupuesto adicional, descarta valores indefinidos con diagnóstico y tampoco garantiza extremos exactos. Cerca de polos, valores finitos grandes pueden ampliar mucho el eje: usar límites explícitos y separar discontinuidades conocidas.
\begin{noctiaxis}[width=440,height=260]
[xmin=-2,xmax=2,ymin=-4,ymax=4,axes=origin-box]
\NoctiFunction[domain=-2:-0.05,samples=33,sampling=adaptive,
tolerance=0.4,maxsamples=6001,rangesamples=401,stroke=blue]{1/x}
\NoctiFunction[domain=0.05:2,samples=33,sampling=adaptive,
tolerance=0.4,maxsamples=6001,rangesamples=401,stroke=blue]{1/x}
\NoctiTitle{Dominios separados alrededor del polo}
\end{noctiaxis}

Curvas paramétricas y polares
\NoctiParametric[opciones]{x(t)}{y(t)}
\NoctiPolar[opciones]{r(t)}
Utilizan t y radianes. Comparten domain, samples, sampling, tolerance, maxsamples, rangesamples, marcadores y estilos de función; el dominio predeterminado es 0:6.283185307179586. Solo kind=line; sin id. La paramétrica conserva orden, bucles y X repetidas. La polar se transforma a (r*cos(t), r*sin(t)); admite radio negativo y no crea una cuadrícula angular/radial.
No se fuerza cierre: las expresiones y el dominio determinan si los extremos coinciden. Valores indefinidos separan segmentos. En log deben ser positivas todas las coordenadas válidas en las dimensiones logarítmicas. Usar aspect=equal para conservar formas y ángulos.
\begin{noctiaxis}[width=420,height=280]
[axes=origin-box,aspect=equal,xmin=-2.3,xmax=2.3,ymin=-1.5,ymax=1.5]
\NoctiParametric[domain=0:2*pi,samples=301,stroke=blue]
{2*cos(t)}{sin(t)}
\NoctiPolar[domain=0:2*pi,samples=501,stroke=red]{cos(3*t)}
\NoctiLegend{Elipse}\NoctiLegend{Rosa polar}
\end{noctiaxis}

Funciones por tramos y extremos
\NoctiFunctionPiece[opciones]{a:b}{f(x)}
Cada tramo es una serie independiente; no une sus extremos con otro tramo. El dominio creciente es obligatorio en el argumento; no repetir domain en opciones. Admite el muestreo, estilos de función y las opciones específicas siguientes. Los marcadores de serie (marker, markersize) y id no están admitidos en FunctionPiece, tampoco cuando proceden de un estilo nombrado; los extremos se controlan con estas claves:
| Parámetro | Valores y predeterminado | Efecto y ejemplo |
|---|---|---|
start |
none, open, closed; none |
Símbolo del extremo inicial. start=closed. |
end |
none, open, closed; none |
Símbolo del extremo final. end=open. |
endpointradius |
En (0,20] bp; 3 |
Radio de los dos símbolos. endpointradius=4. |
Los extremos se evalúan numéricamente aunque el símbolo sea abierto. Si son indefinidos, un marcador solicitado falla: no se calculan límites simbólicos. El abierto tiene relleno blanco y el cerrado usa stroke; ambos son opacos, con contorno continuo, independientemente de dash/opacity/fill. Los cerrados se pintan después de todos los abiertos, por lo que prevalecen si coinciden. No cambian autorango ni leyenda.
\begin{noctiaxis}[width=420,height=260]
[xmin=-2.5,xmax=2.5,ymin=-0.5,ymax=5,axes=origin-box]
\NoctiFunctionPiece[start=closed,end=open,endpointradius=4,
stroke=blue,samples=101]{-2:0}{x^2}
\NoctiFunctionPiece[start=closed,end=open,endpointradius=4,
stroke=red,samples=101]{0:2}{1+x}
\NoctiLegend{$x^2$ para $-2\le x<0$}
\NoctiLegend{$1+x$ para $0\le x<2$}
\end{noctiaxis}

Regiones y rellenos
Regiones rectangulares
\NoctiRegion[opciones]{esquina}{esquina opuesta} sombrea un rectángulo en unidades de datos. Las esquinas pueden ir en cualquier orden, con ancho y alto no nulos. No modifica autorango ni crea leyenda.
| Parámetro | Predeterminado y límites | Ejemplo |
|---|---|---|
fill |
blue; color o none |
fill=green. none requiere border=true. |
opacity |
0.15; de 0 a 1 |
opacity=0.2, aplicado a borde y relleno. |
border |
false; booleano |
border=true dibuja el contorno original. |
stroke, width, dash |
blue, 0.8 bp, continuo |
Estilo del borde. stroke=orange,width=1,dash=3:2. |
No admite flechas. El recorte no inventa bordes en los cortes del viewport. Regiones fuera del área se omiten con diagnóstico. En log ambas esquinas deben ser positivas en las dimensiones log.
\begin{noctiaxis}[width=420,height=260]
[xmin=-2,xmax=2,ymin=-1,ymax=4,axes=box]
\NoctiRegion[fill=green,opacity=0.18]{-1,-1}{1,4}
\NoctiRegion[fill=none,border=true,stroke=orange,width=1,dash=3:2]
{1,0}{2,2}
\NoctiFunction[domain=-2:2,stroke=blue]{x^2}
\end{noctiaxis}

Relleno bajo curva y rectángulos de Riemann
\NoctiFillUnder[opciones]{f(x)}
\NoctiRiemann[opciones]{f(x)}
Requieren ejes lineales y un dominio explícito. Son decoraciones: no infieren límites ni crean leyenda. baseline es una ordenada absoluta; una función por debajo extiende el relleno hacia abajo. No se calcula ni imprime un valor de integral o suma.
| Parámetro | Valores y predeterminado | Uso y ejemplo |
|---|---|---|
domain |
a:b creciente; obligatorio |
Ambos: domain=0:2. |
baseline |
Número de datos; 0 |
Ambos: baseline=1. |
samples |
Entero de 2 a 10000; 201 |
Solo FillUnder; samples=101. El presupuesto puede imponer un máximo menor. |
n |
Entero de 1 a 10000; 10 |
Solo Riemann, rectángulos iguales; n=8. |
method |
left, right, midpoint; midpoint |
Solo Riemann, punto de evaluación en cada celda. |
fill, stroke |
blue, blue |
Color de área y borde. fill=cyan,stroke=blue. |
opacity |
De 0 a 1; 0.2 |
Afecta área y borde. |
border |
FillUnder: false obligatorio; Riemann: true |
border=false en Riemann suprime bordes. |
width, dash |
0.8 bp, continuo; límites de estilo común |
Borde de Riemann, por ejemplo width=0.5,dash=2:1. |
FillUnder une muestras linealmente y comprueba puntos medios; superponer NoctiFunction para el contorno curvo. Cada celda reserva cuatro puntos. Ambos comandos requieren valores finitos en sus evaluaciones y fallan si encuentran indefinidos; dividir o restringir el intervalo. No admiten sampling=adaptive. fill=none requiere borde visible y por ello no sirve para FillUnder.
\begin{noctipanels}[width=510,height=280][rows=1,columns=2,gap=18]
\begin{noctipanel}[xmin=0,xmax=2,ymin=0,ymax=4.5,axes=box]
\NoctiFillUnder[domain=0:2,samples=101,fill=cyan,opacity=0.3]{x^2}
\NoctiFunction[domain=0:2,stroke=blue]{x^2}
\NoctiTitle{Área bajo curva}
\end{noctipanel}
\begin{noctipanel}[xmin=0,xmax=2,ymin=0,ymax=4.5,axes=box]
\NoctiRiemann[domain=0:2,n=8,method=midpoint,baseline=0,
fill=orange,stroke=red,width=0.5,border=true,opacity=0.3]{x^2}
\NoctiFunction[domain=0:2,stroke=blue]{x^2}
\NoctiTitle{Punto medio}
\end{noctipanel}
\end{noctipanels}

Para comparar reglas, sustituir method=midpoint por left o right. Mantener dominio y n permite comparar las aproximaciones gráficas bajo las mismas particiones.
Bandas directas y relleno entre series
\NoctiBand[opciones]{límite inferior f(x)}{límite superior g(x)}
\NoctiFillBetween[opciones]{idA}{idB}
Ambos requieren ejes lineales; dibujan solo el área, sin contornos ni leyenda. Los límites de Band son valores absolutos, no distancias de error. El usuario determina su significado científico; no hay inferencia de intervalos de confianza.
| Parámetro | Band | FillBetween |
|---|---|---|
domain |
Obligatorio, a:b creciente |
Opcional: restringe el dominio común, sin extrapolar. |
samples |
Entero de 2 a 10001; 201, uniforme |
No admitido: usa muestras de las series. |
fill |
Color, blue por defecto; none inválido |
Igual. |
opacity |
De 0 a 1; 0.2 |
Igual. |
Band contribuye al autorango con ambos límites, incluso si coinciden y el área es cero. Ambos deben estar definidos y ordenados en muestras y puntos medios evaluados; si el inferior supera al superior, hay error. No dibuja la curva central ni sus fronteras automáticamente.
FillBetween admite referencias adelantadas a id de Plot, Function y Table del mismo eje. Sus límites deben ser líneas con X estrictamente creciente; se admiten datos con espaciado irregular y funciones con muestreo uniforme, pero no admite límites paramétricos, polares, adaptativos, barras ni scatter. Interpola linealmente las abscisas comunes sin exigir igual número de muestras. Divide cruces y conserva huecos. El orden A/B no cambia el relleno. Sin solapamiento positivo emite diagnóstico y conserva las series.
Los rellenos se pintan una vez por región compuesta para no oscurecer uniones entre celdas. Los rellenos distintos sí se superponen en orden de declaración. Añadir series explícitas cuando se quieran contornos.
\begin{noctiaxis}[width=440,height=270][axes=box,ymargin=0.1]
\NoctiBand[domain=0:6,samples=121,fill=cyan,opacity=0.3]
{sin(x)-0.25}{sin(x)+0.25}
\NoctiFunction[domain=0:6,samples=121,stroke=blue]{sin(x)}
\NoctiLegend{Modelo}
\end{noctiaxis}

\begin{noctiaxis}[width=420,height=260][axes=origin-box]
\NoctiFillBetween[domain=-1:1,fill=purple,opacity=0.25]{sube}{baja}
\NoctiPlot[id=sube,stroke=blue]{-2,-2;-0.5,-0.5;2,2}
\NoctiPlot[id=baja,stroke=red]{-1.5,1.5;0.5,-0.5;1.5,-1.5}
\NoctiLegend{Creciente}\NoctiLegend{Decreciente}
\end{noctiaxis}

Anotaciones y referencias
\NoctiPoint[opciones]{x,y}{texto TeX}
\NoctiXLine[estilo]{x}
\NoctiYLine[estilo]{y}
XLine es vertical y YLine horizontal; recorren el área de datos y admiten trazo común, incluidas flechas. No crean leyenda ni cambian límites. Fuera del rango se omiten con diagnóstico. Los puntos se omiten junto con su etiqueta; no se trasladan al borde. En log sus coordenadas deben ser positivas.
| Parámetro de Point | Valores y predeterminado | Efecto y ejemplo |
|---|---|---|
stroke |
Color; black |
Color del marcador si falta relleno. stroke=red. |
fill |
Color o none; ausente |
Color alternativo. fill=white. none reutiliza stroke; no crea círculo hueco. |
opacity |
De 0 a 1; 1 |
Del marcador, no del texto TeX. |
radius |
En (0,50] bp; 2.5 |
Radio del marcador circular relleno. |
labelpos |
northeast, northwest, southeast, southwest, above, below, left, right, center, auto; northeast |
Posición fija o búsqueda automática por punto. |
dx, dy |
De −2000 a 2000 bp; 0 |
Desplazamiento adicional del texto; positivos derecha/arriba. |
El marcador no usa width/dash/arrow; para estilos distintos de un círculo de anotación, usar marcadores de serie. La distancia base al texto es radio + 4 bp, más la semidimensión TeX según dirección. El texto debe caber en el lienzo, aunque puede ocupar márgenes; no se recorta parcialmente.
Con labelcollision=avoid, solo son automáticas las etiquetas sin labelpos, dx ni dy explícitos. Un dx=0 escrito fija la posición. labelpos=auto activa la búsqueda por punto incluso en un eje manual; en ese caso sus desplazamientos se aplican a todos los candidatos.
La búsqueda prueba ocho direcciones y separaciones adicionales de 0, 8, 16, 32 y 48 bp, con margen de 2 bp respecto a obstáculos. Reserva etiquetas fijas primero y luego las automáticas en orden. Considera títulos, marcas, leyendas, etiquetas de contorno y otros puntos anotados, pero no evita las curvas ni todos los marcadores de series. Máximo 256 anotaciones por eje cuando se usa colocación automática. Si no encuentra espacio, conserva texto y avisa; si no cabe ni en el lienzo, falla.
\begin{noctiaxis}[width=440,height=270]
[xmin=0,xmax=10,ymin=0,ymax=10,axes=box,labelcollision=avoid]
\NoctiXLine[stroke=gray,dash=3:2]{5}
\NoctiYLine[stroke=gray,dash=3:2]{5}
\NoctiPoint[stroke=blue,radius=3]{5,5}{$P_1$}
\NoctiPoint[stroke=red,radius=3]{5.15,5}{$P_2$}
\NoctiPoint[labelpos=below,dx=0,dy=-2]{7,7}{Fija}
\NoctiPoint[labelpos=auto,fill=orange,opacity=0.8]{2,3}{Auto}
\end{noctiaxis}

Paneles y composición científica
\begin{noctipanels}[dimensiones][configuración de rejilla]
\begin{noctipanel}[opciones de eje]
series, etiquetas y anotaciones
\end{noctipanel}
... exactamente rows * columns paneles
\end{noctipanels}
| Parámetro | Valores y predeterminado | Efecto y ejemplo |
|---|---|---|
width, height |
Lienzo físico en bp | Sin primera lista: 500 × 420. Con lista explícita, las dimensiones omitidas vuelven a la base 320 × 200. Escribir ambas. |
rows, columns |
Enteros positivos; máximo 16 celdas | Sin segunda lista: rows=2,columns=2. Con lista explícita, valores omitidos: rows=1,columns=2. Escribir ambos. |
gap |
De 0 a 100 bp; 12 |
Separación entre celdas. gap=16. |
share |
none, x, y, both; none |
Comparte límites explícitos de los ejes elegidos. |
xmin, xmax |
Obligatorios al compartir X | Límites crecientes; solo se permiten en la rejilla si share=x/both. |
ymin, ymax |
Obligatorios al compartir Y | Mismo contrato con share=y/both. |
El orden es por filas, desde arriba a la izquierda. Cada celda debe medir al menos 150 × 140 bp y dejar espacio útil suficiente. Todos los paneles requieren aspect=auto; los ejes compartidos deben ser lineales. Un panel puede repetir un límite compartido idéntico, pero no contradecirlo. No se calcula un autorango global ni se ocultan marcas interiores.
Los márgenes se miden primero y luego se usa el máximo por lado para alinear las áreas. Ambos recorridos consumen presupuesto de puntos. Los textos y sus identificadores se conservan para toda la figura. Dentro de la rejilla se admiten paneles y declaraciones que se resuelven previamente, como estilos; no anidar figuras, paneles ni rejillas.
\begin{noctipanels}[width=520,height=440]
[rows=2,columns=2,gap=16,share=both,xmin=0,xmax=4,ymin=-2,ymax=8]
\begin{noctipanel}[axes=box,palette=scientific]
\NoctiFunction[domain=0:4]{x}\NoctiTitle{Lineal}
\end{noctipanel}
\begin{noctipanel}[axes=box,palette=scientific]
\NoctiFunction[domain=0:4]{x^2/2}\NoctiTitle{Cuadrática}
\end{noctipanel}
\begin{noctipanel}[axes=box,palette=gray]
\NoctiPlot[kind=scatter]{0,1;1,2;2,3;3,4}\NoctiTitle{Datos}
\end{noctipanel}
\begin{noctipanel}[axes=box,palette=gray,bars=grouped]
\NoctiPlot[kind=bar]{1,2;2,4;3,6}
\NoctiPlot[kind=bar]{1,1;2,3;3,5}\NoctiTitle{Barras}
\end{noctipanel}
\end{noctipanels}

Orden de capas en una gráfica
Las capas se organizan para conservar legibles datos y textos: campo escalar; regiones rectangulares; bandas; FillUnder/Riemann; cuadrícula y referencias; series; ejes y marco; segmentos/vectores de anotación; extremos abiertos y cerrados; marcadores de puntos; geometría de leyendas. El texto LaTeX se coloca sobre la geometría. El campo escalar incluye su propia lógica de contornos y etiquetas; sus textos actúan como obstáculos para las anotaciones automáticas.
No se puede cambiar este orden colocando una decoración al final de la fuente. Dentro de capas equivalentes se mantiene el orden aplicable de declaración. Las leyendas interiores pueden tapar geometría, incluidos marcadores; para una figura saturada conviene moverlas, ampliar el lienzo o separar paneles.
Vectores, segmentos y operaciones vectoriales
Los comandos de este apartado se usan dentro de noctiaxis o noctipanel.
Las posiciones y componentes están en unidades de datos del eje. En cambio,
width y dash se expresan en bp, como los estilos de dibujo generales.
Para representar fielmente direcciones, ángulos y longitudes cartesianas,
usar dos escalas lineales y aspect=equal.
Segmento entre dos puntos y vector por componentes
\NoctiSegment[opciones]{x0,y0}{x1,y1}
\NoctiVector[opciones]{x0,y0}{ux,uy}
| Argumento | Tipo y significado | Restricciones |
|---|---|---|
{x0,y0} |
Punto inicial u origen del vector. | Dos números o expresiones escalares admitidas, separados por coma. |
{x1,y1} de NoctiSegment |
Punto final absoluto. | Mismas unidades del eje. |
{ux,uy} de NoctiVector |
Desplazamiento desde el origen. | El extremo calculado es (x0+ux,y0+uy). |
NoctiVector{1,1}{2,3} termina en (3,4).
NoctiSegment{1,1}{2,3} termina en (2,3).
Los argumentos numéricos pueden reutilizar constantes declaradas con
NoctiConstant; no son lugares para escribir texto matemático TeX.
Cada coordenada y cada extremo calculado deben ser finitos y cumplir
abs(valor)<=1e12.
| Opción | Predeterminado | Tipo, valores y efecto |
|---|---|---|
stroke |
black |
Color del trazo y de las puntas; nombre admitido o r:g:b. |
width |
0.8 |
Grosor en bp, mayor que 0 y hasta 100. |
dash |
Continua | Hasta 8 longitudes positivas, hasta 1000 bp cada una, separadas por :; ejemplo 4:2. |
arrow en segmento |
none |
none, end o both. |
arrow en vector |
end |
Las mismas opciones; el valor explícito prevalece. |
opacity |
1 |
Número entre 0 y 1. |
fill |
Sin relleno | Clave de estilo aceptada; al ser trazados abiertos no rellena un área. Las puntas usan stroke. |
\begin{noctiaxis}[width=430,height=300]
[xmin=0,xmax=4,ymin=0,ymax=5,axes=origin-box,aspect=equal]
\NoctiSegment[stroke=gray,dash=4:2]{1,1}{2,3}
\NoctiVector[stroke=blue,width=1.5]{1,1}{2,3}
\NoctiVector[stroke=red,arrow=both,opacity=0.5]{1,1}{2,0}
\NoctiPoint[labelpos=below]{1,1}{$O$}
\NoctiPoint[labelpos=above]{3,4}{$O+u$}
\end{noctiaxis}

Estos objetos no cambian el autorango ni crean entradas de leyenda.
Un eje formado solo por vectores necesita xmin, xmax, ymin y ymax.
También puede obtener su rango de una serie ordinaria.
Se dibujan sobre las series y los ejes, antes de los puntos etiquetados.
Se recortan al área de datos: un segmento puede atravesar la vista aunque sus
dos extremos estén fuera. Si la punta real está fuera, no se crea otra punta
en el borde. Los segmentos de longitud nula se omiten con diagnóstico.
Los segmentos y vectores explícitos admiten ejes logarítmicos si ambos extremos son positivos en cada dimensión logarítmica. Las componentes del vector se suman antes de transformar. El resultado visible une los extremos transformados con una recta; no representa un camino curvo muestreado.
\begin{noctiaxis}[width=430,height=250]
[xmin=1,xmax=100,ymin=1,ymax=100,xscale=log,yscale=log]
\NoctiSegment[stroke=gray,arrow=both]{1,1}{100,100}
\NoctiVector[stroke=blue]{10,10}{20,40}
\end{noctiaxis}

Suma, proyección y descomposición
\NoctiVectorSum[opciones]{origen}{u}{v}
\NoctiProjection[opciones]{origen}{u}{v}
\NoctiComponents[opciones]{origen}{u}
\NoctiDecompose[opciones]{origen}{u}{v}
Todos los argumentos geométricos usan pares x,y. El origen solo traslada
el dibujo. u y v son componentes cartesianas; no son nombres de vectores
declarados antes ni puntos finales absolutos. Estas cuatro operaciones
requieren ejes lineales.
| Comando | Cálculo y geometría dibujada |
|---|---|
NoctiVectorSum |
Un vector desde O hasta O+u+v. No dibuja los sumandos. |
NoctiProjection |
Un vector desde O hasta O+p, con p=((u·v)/(v·v))*v. |
NoctiComponents |
Dos segmentos dirigidos: O a O+(ux,0), y de allí a O+u. |
NoctiDecompose |
Dos segmentos dirigidos: O a O+p, y de allí a O+u; el segundo representa u-p. |
Aceptan exactamente las seis claves de estilo de segmentos y vectores.
Sus valores predeterminados son stroke=black, width=0.8, arrow=end,
opacity=1, línea continua y sin relleno. En los comandos que producen dos
segmentos ambos comparten el mismo estilo, y cada segmento recibe sus propias
puntas conforme a arrow.
\begin{noctiaxis}[width=430,height=310]
[xmin=-0.5,xmax=4,ymin=-0.5,ymax=4,axes=origin-box,aspect=equal]
\NoctiVector[stroke=blue]{0,0}{2,1}
\NoctiVector[stroke=red]{0,0}{1,2}
\NoctiVectorSum[stroke=green,width=1.6]{0,0}{2,1}{1,2}
\NoctiPoint[labelpos=above]{3,3}{$u+v=(3,3)$}
\end{noctiaxis}

\begin{noctiaxis}[width=430,height=310]
[xmin=-0.5,xmax=4,ymin=-0.5,ymax=3.5,axes=origin-box,aspect=equal]
\NoctiVector[stroke=blue,width=1.4]{0,0}{3,1}
\NoctiVector[stroke=gray,dash=3:2]{0,0}{3,3}
\NoctiProjection[stroke=green,width=1.8]{0,0}{3,1}{1,1}
\NoctiPoint[labelpos=above]{2,2}{$p=(2,2)$}
\end{noctiaxis}

\begin{noctiaxis}[width=430,height=310]
[xmin=-0.5,xmax=4,ymin=-0.5,ymax=3.5,axes=origin-box,aspect=equal]
\NoctiVector[stroke=blue]{0,0}{3,1}
\NoctiComponents[stroke=gray,dash=3:2]{0,0}{3,1}
\NoctiDecompose[stroke=orange,width=1.3]{0,0}{3,1}{1,1}
\NoctiPoint[labelpos=above]{2,2}{$p$}
\NoctiPoint[labelpos=right]{3,1}{$u=p+(u-p)$}
\end{noctiaxis}

Para u=(3,1) y v=(1,1), la proyección es (2,2) y el residuo (1,-1).
Cambiar v por un múltiplo no nulo, incluso negativo, conserva la proyección.
Proyectar sobre (0,0) produce error. Una componente o proyección de longitud
cero se omite con diagnóstico. Los resultados intermedios deben respetar el
límite numérico, igual que los extremos de un vector explícito.
No se generan etiquetas, variables TeX ni resultados simbólicos; se añaden
etiquetas con NoctiPoint cuando se necesitan.
Campos vectoriales
\NoctiVectorField[opciones]{u(x,y)}{v(x,y)}
El comando evalúa dos expresiones escalares en una malla rectangular y dibuja
un vector en cada punto válido. Los argumentos obligatorios son las componentes
cartesianas del campo. Admiten las variables x, y, los operadores y funciones
del evaluador y las constantes declaradas en el alcance vigente.
| Opción | Predeterminado | Tipo, unidad, valores y efecto |
|---|---|---|
xdomain |
Obligatoria | Intervalo creciente a:b en unidades X; incluye ambos extremos. Independiente de xmin/xmax. |
ydomain |
Obligatoria | Intervalo creciente c:d en unidades Y; incluye ambos extremos. Independiente de ymin/ymax. |
nx |
11 |
Entero entre 2 y 51; cantidad de puntos uniformes en X. |
ny |
11 |
Entero entre 2 y 51; cantidad de puntos uniformes en Y. |
scale |
0.2 |
Factor positivo, finito y hasta 1e12; multiplica las componentes antes de sumarlas al punto de origen. |
normalize |
false |
true o false; normaliza el vector no nulo antes de aplicar scale. |
stroke |
blue |
Color de cada vector y su punta. |
width |
0.8 |
Grosor en bp, mayor que 0 y hasta 100. |
dash |
Continua | Hasta 8 longitudes en bp, positivas y hasta 1000, separadas por :. |
arrow |
end |
none, end o both. |
opacity |
1 |
Número entre 0 y 1. |
fill |
Sin relleno | Aceptada como estilo de trazado abierto; no colorea una región. |
Con normalize=false, el extremo en (x,y) es
(x+scale*u(x,y),y+scale*v(x,y)). Así se conservan las magnitudes relativas.
Con normalize=true, las componentes se dividen por sqrt(u*u+v*v) y todos
los vectores válidos tienen longitud scale en coordenadas de datos.
La igualdad de longitud en datos se ve físicamente correcta con aspect=equal.
No hay ajuste automático para impedir que las flechas se solapen.
\begin{noctiaxis}[width=430,height=320]
[xmin=-2,xmax=2,ymin=-2,ymax=2,axes=origin-box,aspect=equal]
\NoctiVectorField[xdomain=-1.5:1.5,ydomain=-1.5:1.5,
nx=9,ny=9,scale=0.18,normalize=false,stroke=blue,
width=0.7,arrow=end,opacity=0.75]{-y}{x}
\end{noctiaxis}

\begin{noctiaxis}[width=430,height=320]
[xmin=-2,xmax=2,ymin=-2,ymax=2,axes=origin-box,aspect=equal]
\NoctiVectorField[xdomain=-1.5:1.5,ydomain=-1.5:1.5,
nx=7,ny=7,scale=0.25,normalize=true,stroke=gray,
dash=2:1,arrow=none]{x}{-y}
\NoctiPoint[labelpos=below]{0,0}{Equilibrio}
\end{noctiaxis}

El campo solo es una decoración: no aporta autorango ni entradas de leyenda. Se requieren los cuatro límites del eje o una serie que proporcione el rango. Solo se admiten escalas X/Y lineales. Se dibuja en la capa de segmentos, con el mismo recorte y tratamiento de puntas que los vectores explícitos.
Las componentes indefinidas, no finitas o fuera de +/-1e12 se omiten.
También se omiten los vectores nulos. Un diagnóstico resume ambas cantidades.
En cambio, si un vector válido produce un extremo calculado no finito o fuera
de los límites numéricos, el campo falla; reducir scale o restringir el dominio.
El muestreo fuera del viewport no altera los límites visibles.
Se permiten como máximo 2601 puntos de malla. Cada punto solicitado reserva dos unidades del presupuesto compartido de la figura, incluso si luego se omite. Las flechas no tienen color por magnitud automático. Para mostrar una magnitud de fondo se puede combinar un campo escalar con el campo vectorial.
Trayectorias y líneas de flujo
\NoctiTrajectory[opciones]{x0,y0}{u(x,y)}{v(x,y)}
\NoctiStreamline[opciones]{x0,y0}{u(x,y)}{v(x,y)}
Ambos comandos integran un sistema autónomo cartesiano desde una semilla:
dx/dt = u(x,y)
dy/dt = v(x,y)
La semilla es un par de números o expresiones escalares admitidas.
Las expresiones del campo admiten x, y y constantes. No admiten una
variable temporal adicional. Los ejes X/Y deben ser lineales.
NoctiTrajectory conserva la rapidez del campo. Su parámetro puede representar
tiempo si las componentes y unidades del problema se han definido así.
NoctiStreamline normaliza el campo en cada etapa de integración: su parámetro
aproxima longitud de arco en unidades cartesianas de datos. No basta con
normalizar únicamente las flechas del campo para obtener este comportamiento.
| Opción | Predeterminado | Tipo, unidad, valores y efecto |
|---|---|---|
step |
0.02 |
Paso fijo positivo, mayor que 0 y hasta 1000. En trayectoria usa unidades del parámetro; en línea de flujo aproxima unidades de longitud de datos. |
steps |
500 |
Entero entre 1 y 10000; cantidad máxima de pasos por rama. |
direction |
forward |
forward, backward o both; sentido de integración respecto al campo. |
stroke |
black |
Color del trazo. |
width |
0.8 |
Grosor en bp, mayor que 0 y hasta 100. |
dash |
Continua | Hasta 8 longitudes positivas en bp, hasta 1000 cada una, separadas por :. |
arrow |
none |
none, end o both; añade puntas según el orden del trazado. |
opacity |
1 |
Número entre 0 y 1. |
fill |
Sin relleno | Aceptada como estilo; estas curvas abiertas no rellenan áreas. |
El método es Runge–Kutta clásico de cuarto orden con paso fijo (RK4).
El horizonte máximo por rama es step*steps.
Con direction=backward se usa internamente un paso negativo, pero step
se sigue escribiendo positivo. El orden del camino va de la semilla al pasado.
Con both se invierte la rama hacia atrás y se une con la rama hacia adelante,
sin duplicar la semilla. Una punta sigue el orden del camino, por lo que en
una rama backward apunta en el sentido de la integración hacia atrás.
\begin{noctiaxis}[width=430,height=320]
[xmin=-1.5,xmax=1.5,ymin=-1.5,ymax=1.5,
axes=origin-box,aspect=equal,legendpos=topright]
\NoctiVectorField[xdomain=-1:1,ydomain=-1:1,
nx=7,ny=7,scale=0.14,stroke=gray]{-y}{x}
\NoctiTrajectory[step=0.02,steps=300,direction=forward,
stroke=blue,width=1.5,arrow=end]{1,0}{-y}{x}
\NoctiLegend{Trayectoria de rotaci\'on}
\end{noctiaxis}

\begin{noctiaxis}[width=430,height=300]
[xmin=0,xmax=3,ymin=0,ymax=3,axes=box,aspect=equal,
legendpos=topright]
\NoctiStreamline[step=0.02,steps=80,direction=both,
stroke=red,width=1.3]{1,1}{x}{-y}
\NoctiStreamline[step=0.02,steps=70,direction=backward,
stroke=blue,dash=4:2,arrow=end,opacity=0.7]{2,1}{x}{-y}
\NoctiLegend{Ambos sentidos}
\NoctiLegend{Integraci\'on hacia atr\'as}
\end{noctiaxis}

A diferencia del campo de flechas, estas curvas son series: participan en el
autorango y pueden recibir NoctiLegend. Admiten exactamente las opciones
de la tabla; no aceptan kind, id, samples, sampling, rangesamples,
maxsamples, tolerance ni normalize. El comando elegido determina si
se normaliza el campo.
El viewport recorta el dibujo; la integración puede continuar fuera de él.
No se detectan ni cierran bucles automáticamente.
Curvas solución de una ecuación diferencial
Una familia conocida analíticamente se dibuja con NoctiFunction.
Para aproximar una ecuación de primer orden dy/dx=f(x,y), puede escribirse
el sistema plano dx/dt=1, dy/dt=f(x,y) y usar NoctiTrajectory.
Como x(t)=x0+t, aquí el paso también es un incremento en X.
El siguiente ejemplo compara dy/dx=x*y, y(0)=1, con su solución analítica.
\begin{noctiaxis}[width=460,height=300]
[xmin=-2,xmax=2,ymin=0,ymax=8,axes=origin-box,
legendpos=topleft]
\NoctiFunction[domain=-2:2,samples=401,
stroke=gray,width=2,dash=4:2]{exp(x*x/2)}
\NoctiTrajectory[step=0.01,steps=200,direction=both,
stroke=blue,width=1.1]{0,1}{1}{x*y}
\NoctiPoint[labelpos=right]{0,1}{$y(0)=1$}
\NoctiXLabel{$x$}\NoctiYLabel{$y$}
\NoctiLegend{$e^{x^2/2}$}
\NoctiLegend{RK4}
\end{noctiaxis}

Esto no añade solución simbólica, cálculo de constantes de integración ni
verificación automática de una EDO. En sistemas rígidos o cerca de singularidades
el paso fijo puede ser inadecuado. Para revisar sensibilidad numérica, reducir
step a la mitad y duplicar steps, conservando el mismo horizonte.
Paradas, presupuesto y límites numéricos
La rama conserva su prefijo calculado y emite un diagnóstico si encuentra:
- Campo o etapa intermedia indefinidos, no finitos o fuera de
+/-1e12. - Un equilibrio en la posición actual.
- Una coordenada siguiente fuera del límite permitido.
- Estancamiento numérico: el siguiente punto coincide con el actual.
- En
NoctiStreamline, un equilibrio en una etapa intermedia.
Una semilla de equilibrio solo produce un punto; no aparece una línea.
Para mostrarla usar NoctiPoint.
No hay eventos, paso adaptativo, estimación de error incorporada ni resolución
especial de sistemas rígidos. Un paso grande puede saltar una singularidad.
Cada paso solicitado reserva nueve unidades del presupuesto: ocho evaluaciones
escalares de las cuatro etapas más un punto. La reserva completa es
9*steps*ramas+1, con una o dos ramas. Se calcula antes de integrar, incluso
si se alcanzará un equilibrio pronto. Con el presupuesto predeterminado de
100000 puntos por figura, steps=10000,direction=both no cabe.
Otros objetos y paneles comparten el mismo presupuesto.
Campos escalares bidimensionales
\NoctiScalarTable[opciones]{ruta-del-archivo}
\NoctiScalarFunction[opciones]{f(x,y)}
\NoctiColorLabel{texto TeX}
Un campo escalar representa un valor nodal z sobre una malla rectangular
cartesiana. Puede mostrarse mediante celdas de color, isolíneas o bandas
rellenas. Se permite un campo escalar por eje o panel.
Los ejes X/Y y la escala de color son lineales.
El campo aporta sus límites espaciales al autorango y no ocupa una entrada
de NoctiLegend.
Tabla rectangular y selección de columnas
Cada fila es un nodo (x,y,z), no un píxel ni el promedio de una celda.
El orden de las filas es libre. Las coordenadas X e Y únicas se ordenan y
forman una malla por producto cartesiano; el espaciado puede ser no uniforme.
Noctiks no convierte puntos dispersos en una malla.
| Opción exclusiva de tabla | Predeterminado | Tipo, valores y efecto |
|---|---|---|
x |
x |
Nombre exacto del encabezado para la coordenada X. |
y |
y |
Nombre exacto del encabezado para la coordenada Y. |
z |
z |
Nombre exacto del encabezado para el valor escalar. |
delimiter |
comma |
comma, tab o semicolon. En tablas escalares no se deduce de la extensión. |
Las tres columnas seleccionadas deben ser distintas. Los encabezados deben
ser no vacíos y únicos; todas las filas deben tener la misma cantidad de campos.
El formato es UTF-8, con BOM opcional, finales LF o CRLF y campos entre comillas
cuando corresponde; las comillas internas se duplican. Se omiten líneas vacías.
Las columnas numéricas contienen literales, incluida notación científica;
no contienen expresiones ni nombres de constantes.
No se permiten coordenadas duplicadas (x,y), aunque sus valores Z coincidan.
\begin{filecontents*}{noctiks-manual-temperatura.csv}
posx,posy,temperatura
0,0,10
1,0,20
0,1,15
1,1,30
\end{filecontents*}
\begin{noctiaxis}[width=460,height=290][axes=box,grid=none]
\NoctiScalarTable[x=posx,y=posy,z=temperatura,
delimiter=comma,mode=heat]{noctiks-manual-temperatura.csv}
\NoctiXLabel{$x$ (m)}\NoctiYLabel{$y$ (m)}
\NoctiColorLabel{$T$ (${}^\circ$C)}
\end{noctiaxis}

En esta malla de una sola celda, mode=heat,shading=flat pinta la celda con
el valor medio (10+20+15+30)/4=18.75.
La barra conserva el rango nodal automático 10:30.
\begin{filecontents*}{noctiks-manual-campo-semicolon.csv}
x;y;z
0;0;0
2;0;2
0;1;1
2;1;3
\end{filecontents*}
\begin{noctiaxis}[width=440,height=270][axes=box,grid=none]
\NoctiScalarTable[delimiter=semicolon,mode=filled,
levels=0.5:1.5:2.5,colormap=sequential]
{noctiks-manual-campo-semicolon.csv}
\end{noctiaxis}

Para TSV usar delimiter=tab y tabuladores reales en el archivo.
La ruta debe ser relativa al proyecto, sin componentes vacíos, ., ..,
barra inversa, :, rutas absolutas ni URLs. El archivo debe estar disponible
entre los recursos del proyecto. Vuelve a compilar después de modificar los datos.
Función de dos variables
| Opción exclusiva de función | Predeterminado | Tipo, unidad, valores y efecto |
|---|---|---|
xdomain |
Obligatoria | Intervalo creciente a:b, en unidades X. |
ydomain |
Obligatoria | Intervalo creciente c:d, en unidades Y. |
nx |
31 |
Entero entre 2 y 201; nodos uniformes en X, incluidos los extremos. |
ny |
31 |
Entero entre 2 y 201; nodos uniformes en Y, incluidos los extremos. |
El argumento obligatorio es una expresión en x e y con las funciones y
constantes del evaluador. El dominio de muestreo es independiente del viewport.
Cambiar xmin/xmax no cambia qué nodos se evalúan.
Las opciones numéricas xdomain, ydomain, nx, ny, levels, levelcount,
zmin y zmax admiten constantes y expresiones escalares.
\begin{noctiaxis}[width=460,height=310]
[axes=box,grid=none,aspect=equal]
\NoctiConstant{radius}{2}
\NoctiScalarFunction[xdomain=-radius:radius,
ydomain=-radius:radius,nx=31,ny=31,mode=heat,
colormap=jet,colorbar=true]{x*x+y*y}
\NoctiColorLabel{$x^2+y^2$}
\end{noctiaxis}

Parámetros comunes: modo, color, niveles y contornos
| Opción | Predeterminado | Tipo, valores y efecto |
|---|---|---|
mode |
heat |
heat, contour o filled; elige celdas, isolíneas o bandas. |
shading |
flat |
flat o interp; interp solo se admite con mode=heat. |
levels |
Automáticos | Lista a:b:c de 1 a 32 valores estrictamente crecientes, todos interiores al rango de color. Incompatible con levelcount. |
levelcount |
8 |
Entero entre 1 y 32; genera niveles interiores equidistantes cuando no se usa levels. |
zmin |
Mínimo nodal válido | Límite inferior del color. Incluye nodos fuera del viewport al calcular el valor automático. |
zmax |
Máximo nodal válido | Límite superior del color. Debe superar al inferior si se fija cualquiera de los dos. |
colormap |
jet |
jet, sequential, diverging o gray. |
colorbar |
true |
true o false; muestra u oculta la barra lateral. |
contours en heat/filled |
false |
true añade isolíneas; false las omite. |
contours en contour |
true |
Debe permanecer true; desactivarlo produce error. |
labels |
false |
true pide una etiqueta numérica por nivel visible si cabe. Requiere contours=true. |
missing |
error |
error o gap; controla valores o nodos ausentes. |
mask |
cells |
cells o triangles; controla qué superficie se conserva junto a nodos ausentes. |
stroke |
Dependiente del modo | En contour, color de cada nivel según la paleta si se omite. En superposiciones sobre heat/filled, negro si se omite. Un color explícito unifica las líneas. |
width |
0.8 |
Grosor de isolíneas en bp, mayor que 0 y hasta 100. |
dash |
Continua | Hasta 8 longitudes positivas en bp, hasta 1000 cada una, separadas por :. |
Estos comandos no admiten fill, opacity, arrow, kind ni opciones de
marcadores. La paleta colorea el campo. stroke, width y dash solo afectan
las isolíneas; no dibujan bordes entre celdas ni modifican la barra de color.
Si el rango es [a,b] y levelcount=N, los niveles son
a+i*(b-a)/(N+1), para i=1,...,N. No incluyen los extremos.
Por ejemplo, con zmin=0,zmax=10,levelcount=4 son 2:4:6:8.
Los valores explícitos deben ser distintos y estar estrictamente dentro del
rango de color, aunque no todos atraviesen la zona visible del campo.
Los niveles demasiado cercanos para distinguirse numéricamente producen error.
zmin y zmax cambian la correspondencia color–valor, no recortan el dominio
espacial ni borran datos. Se pueden fijar uno o ambos; el otro conserva su
valor automático y el par resultante debe ser creciente.
Los valores fuera del rango se saturan en heat. En filled, las bandas
extremas se extienden a todos los valores inferiores/superiores y usan el
color del primer/último nivel. La barra reproduce esos colores de bandas.
Si todos los nodos válidos tienen el mismo valor y no se fija ningún extremo, el campo es constante: el relleno es uniforme, los niveles automáticos están vacíos y no hay isolíneas. La barra muestra un único valor central. Para imponer un rango de color sobre un campo constante, usar dos extremos explícitos distintos.
Mapa de calor plano e interpolado
mode=heat,shading=flat colorea cada celda completa con la media aritmética
de sus cuatro valores nodales. Si mask=triangles conserva tres esquinas,
usa la media de esas tres. Es un valor uniforme por polígono.
mode=heat,shading=interp interpola linealmente el valor Z dentro de cada
triángulo y después aplica la paleta. Las celdas completas se dividen por la
diagonal suroeste–noreste. No equivale a interpolar directamente los colores
de las cuatro esquinas, ni a interpolación bicúbica.
\begin{noctiaxis}[width=460,height=310]
[axes=box,grid=none,aspect=equal]
\NoctiScalarFunction[xdomain=-2:2,ydomain=-2:2,
nx=21,ny=21,mode=heat,shading=interp,
zmin=-1,zmax=1,colormap=diverging,
contours=true,levels=-0.5:0:0.5,stroke=black,
width=0.6,dash=3:2]{sin(x)*cos(y)}
\NoctiColorLabel{$f(x,y)$}
\end{noctiaxis}

El suavizado conserva máscaras y límites de color; no crea observaciones ni mejora la precisión del modelo o del solver que originó los datos. No suaviza las derivadas entre triángulos. El campo interpolado se rasteriza en una sola imagen RGBA, con escala máxima de 4 píxeles por bp y 2048 píxeles por lado, hasta 16 MiB de píxeles. Así se evitan costuras entre degradados en ciertos visores PDF. Ejes, isolíneas y textos conservan su representación vectorial o TeX. Al ampliar mucho el PDF puede verse la resolución del mapa interpolado.
Curvas de nivel y sus etiquetas
\begin{noctiaxis}[width=460,height=310]
[axes=box,grid=none,aspect=equal]
\NoctiScalarFunction[xdomain=-2:2,ydomain=-2:2,
nx=41,ny=41,mode=contour,levels=0.5:1:2:3:4:5:6,
labels=true,colormap=sequential,width=1]
{x*x+y*y}
\NoctiColorLabel{$x^2+y^2$}
\end{noctiaxis}

El modo contour usa la paleta para el color de las líneas cuando stroke
se omite. Para líneas de un solo color, indicar por ejemplo stroke=black.
contours=true usa exactamente la misma triangulación y los mismos niveles
al superponerlas sobre heat o filled.
Las isolíneas son segmentos calculados por interpolación lineal dentro de
triángulos. No se promete una polilínea cerrada independiente por contorno.
Con labels=true, se intenta colocar como máximo una etiqueta numérica por
nivel visible, eligiendo segmentos largos dentro del gráfico y evitando
solapamientos con otras etiquetas de nivel. Si no cabe, se omite la etiqueta
con un diagnóstico. No evita de manera general colisiones con otras curvas,
anotaciones o la cuadrícula. No admite textos personalizados por nivel.
Contornos rellenos y paletas
\begin{noctiaxis}[width=460,height=310]
[axes=box,grid=none,aspect=equal]
\NoctiScalarFunction[xdomain=-2:2,ydomain=-2:2,
nx=31,ny=31,mode=filled,zmin=0,zmax=8,
levelcount=7,colormap=jet,contours=true,
labels=true,stroke=black,width=0.5]{x*x+y*y}
\NoctiColorLabel{$r^2$}
\end{noctiaxis}

filled divide cada triángulo en bandas entre niveles.
Las bandas se agrupan en trazados vectoriales antes de pintar el PDF para
reducir costuras internas. En puntos de silla, la diagonal fija puede producir
una conexión diferente de la de un método bilineal.
Los vértices que coinciden exactamente con un nivel se clasifican de forma
determinista con intervalos semiabiertos; una meseta no produce líneas
interiores artificiales.
| Paleta | Lectura visual y uso |
|---|---|
jet |
Azul oscuro, azul, cian, verde, amarillo, rojo y rojo oscuro. Predeterminada. |
sequential |
Rampa original azul oscuro, verde azulado, verde claro y amarillo. |
diverging |
Azul, blanco y rojo. El blanco cae en el punto medio del rango; usar extremos simétricos para situarlo en cero. |
gray |
Gris oscuro a gris claro. |
\begin{noctiaxis}[width=440,height=280][axes=box,grid=none]
\NoctiScalarFunction[xdomain=0:1,ydomain=0:1,
nx=11,ny=11,mode=heat,shading=interp,
colormap=gray,zmin=0,zmax=2,colorbar=false]{x+y}
\end{noctiaxis}

Valores faltantes, huecos y máscaras
missing=error exige un producto cartesiano completo y valores válidos.
missing=gap permite nodos ausentes o campos Z vacíos en tablas; en funciones
convierte valores indefinidos, no finitos o fuera del límite en nodos ausentes.
Las coordenadas X/Y de una fila siempre deben ser válidas.
Escribir NaN o Inf en CSV sigue siendo un error: representar un valor
faltante mediante un campo vacío o una fila ausente.
| Máscara | Celda con cuatro esquinas válidas | Celda con tres | Celda con dos o menos |
|---|---|---|---|
mask=cells |
Conservada. | Omitida por completo. | Omitida. |
mask=triangles |
Conservada y triangulada SW–NE. | Conserva el triángulo de las tres esquinas. | Omitida. |
No se rellenan huecos ni se extrapolan valores. La máscara triangular define una frontera geométrica concreta; no infiere la forma real de un obstáculo. Debe quedar al menos una celda completa o un triángulo válido. Los diagnósticos cuentan las celdas completamente omitidas por falta de esquinas.
\begin{filecontents*}{noctiks-manual-hueco.csv}
x,y,z
0,0,0
1,0,1
0,1,1
1,1,
2,0,2
2,1,3
\end{filecontents*}
\begin{noctiaxis}[width=440,height=280][axes=box,grid=none]
\NoctiScalarTable[missing=gap,mask=triangles,
mode=filled,levels=0.5:1.5:2.5,zmin=0,zmax=3,
colormap=sequential]{noctiks-manual-hueco.csv}
\end{noctiaxis}

\begin{noctiaxis}[width=440,height=290]
[axes=box,grid=none,aspect=equal]
\NoctiScalarFunction[xdomain=-1:1,ydomain=-1:1,
nx=21,ny=21,missing=gap,mask=cells,mode=heat,
shading=flat,colormap=sequential]{sqrt(x+y)}
\NoctiColorLabel{$\sqrt{x+y}$}
\end{noctiaxis}

Barra de color, etiqueta y composición
colorbar=true reserva espacio a la derecha para una barra vertical.
Las marcas automáticas son el mínimo, el punto medio y el máximo; si el campo
es constante solo aparece el valor central. No hay opción pública para fijar
marcas o formato numérico de la barra individualmente.
NoctiColorLabel{texto TeX} coloca una etiqueta horizontal encima de la barra.
Se permite una por eje. Requiere un campo escalar con colorbar=true.
El texto medido debe caber en 100 bp de ancho y 22 bp de alto; usar unidades
abreviadas o un tamaño TeX menor si hace falta. No hereda estilos de isolíneas.
Si también hay leyendas de series, deben situarse dentro del gráfico mediante
legendpos, porque la leyenda exterior derecha entra en conflicto con la barra.
Las leyendas siguen correspondiendo a series; el campo escalar no toma una.
\begin{noctiaxis}[width=480,height=320]
[axes=box,grid=none,aspect=equal,legendpos=topright]
\NoctiScalarFunction[xdomain=-2:2,ydomain=-2:2,
nx=21,ny=21,shading=interp,colormap=sequential,
zmin=0,zmax=3]{sqrt(x*x+y*y)}
\NoctiVectorField[xdomain=-1.5:1.5,ydomain=-1.5:1.5,
nx=7,ny=7,normalize=true,scale=0.18,
stroke=gray,opacity=0.7]{-y}{x}
\NoctiParametric[stroke=black,width=1.4,
domain=0:6.283185307179586,samples=201]{cos(t)}{sin(t)}
\NoctiColorLabel{$|v|$}
\NoctiLegend{C\'irculo unidad}
\end{noctiaxis}

El mapa se dibuja detrás de cuadrícula, curvas y anotaciones.
grid=none suele ayudar a leer un campo de color.
En comparaciones por paneles, fijar los mismos zmin, zmax y niveles:
los rangos de color automáticos se calculan por campo, no se comparten.
Los paneles conservan su mecanismo de márgenes compartidos.
Límites de datos y significado científico
Cada eje de la malla admite entre 2 y 201 coordenadas. La cantidad de nodos y
los vértices generados consumen el presupuesto compartido de puntos, que por
defecto es 100000 por figura. Una malla de 201 por 201 no garantiza que quepan
además todos sus contornos y polígonos; reducir nx/ny o la cantidad de niveles.
La composición con varios paneles también consume este presupuesto.
Todos los valores y coordenadas deben ser finitos y de magnitud hasta 1e12.
El archivo de tabla está limitado por defecto a 8000000 bytes; se mantienen
los límites generales de lectura de datos.
Noctiks representa datos y expresiones; no resuelve dentro del campo ecuaciones en derivadas parciales. Los resultados FDM, FEM o BEM pueden importarse de solvers externos si ya forman la malla requerida. No hay triangulación no estructurada, interpolación cúbica, escala logarítmica de color ni campo 3D. Un dibujo más suave no reduce por sí mismo el error del cálculo científico.
Dibujo geométrico: lienzos, coordenadas y primitivas
Los comandos de este capítulo se cargan con \usepackage{noctiks}. También están
disponibles cuando se carga noctiplots, que depende de noctiks. Cada ejemplo
TeX es un fragmento para insertar dentro de document, con ese paquete cargado.
Compila el documento en Paper Studio para ver el resultado.
La unidad geométrica es bp, equivalente a 1/72 de pulgada. El origen está en
la esquina inferior izquierda; X crece hacia la derecha e Y hacia arriba. Una
coordenada se escribe x,y, un tamaño ancho,alto y una lista de puntos
x,y;x,y;.... En los argumentos geométricos de diagramas se usan números
literales; las constantes con nombre de las gráficas no sustituyen estos campos.
Tamaño de los entornos
| Entorno / parámetro | Tipo y unidad | Predeterminado | Límite y efecto | Ejemplo |
|---|---|---|---|---|
noctikspicture / width |
Número, bp | 320 | 0 < width ≤ 2000; ancho de la caja TeX y del PDF |
width=400 |
noctikspicture / height |
Número, bp | 200 | 0 < height ≤ 2000; alto de la caja y del PDF |
height=240 |
nocticontrol sin [...] |
Alias de figura | 460 × 240 bp | Sus comandos de control también pueden declararse en noctikspicture |
\begin{nocticontrol} |
noctivenn sin [...] |
Alias de figura | 300 × 220 bp | Sus comandos semánticos también pueden declararse en noctikspicture |
\begin{noctivenn} |
Al escribir un argumento opcional en nocticontrol o noctivenn, este sustituye
la lista predeterminada del alias. Los valores que falten proceden del entorno
base: width=320,height=200. Por ejemplo, \begin{nocticontrol}[width=460]
produce 460 × 200 bp. Para conservar la altura deseada, escribir ambas dimensiones.
Un [] vacío en cualquiera de los dos alias produce 320 × 200 bp.
El lienzo no crece automáticamente y toda la geometría vectorial se recorta a sus límites. Los nodos ordinarios pueden quedar parcialmente fuera y recortarse; otras API, como etiquetas de señal, grupos semánticos y Venn, rechazan ciertos desbordamientos antes de dibujar. No se permite anidar figuras.
\begin{noctikspicture}[width=320,height=200]
\NoctiksLine[stroke=blue,width=1.5,arrow=end]{20,30}{290,30}
\NoctiksCircle[stroke=green,fill=0.9:0.98:0.94]{155,110}{38}
\NoctiksLabel{155,110}{$e^{i\pi}+1=0$}
\end{noctikspicture}

Firmas y argumentos obligatorios
\NoctiksLine[estilo]{inicio}{fin}
\NoctiksPolyline[estilo]{lista de puntos}
\NoctiksPolygon[estilo]{lista de vértices}
\NoctiksBezier[estilo]{inicio}{control 1}{control 2}{fin}
\NoctiksRect[estilo]{esquina inferior izquierda}{ancho,alto}
\NoctiksEllipse[estilo]{esquina inferior izquierda de la caja}{ancho,alto}
\NoctiksCircle[estilo]{centro}{radio}
\NoctiksLabel{centro}{texto TeX}
| Comando / argumento | Tipo y unidad | Predeterminado | Validación y significado | Ejemplo |
|---|---|---|---|---|
Line: inicio, fin |
Dos coordenadas, bp | Obligatorios | Exactamente dos puntos; segmento recto | {20,30}{120,60} |
Polyline: puntos |
Lista x,y;..., bp |
Obligatoria | Al menos dos puntos; une puntos consecutivos, sin cerrar | {20,30;70,70;120,30} |
Polygon: vértices |
Lista x,y;..., bp |
Obligatoria | Al menos tres; cierra automáticamente del último al primero | {20,30;70,70;120,30} |
Bezier: inicio, controles, fin |
Cuatro coordenadas, bp | Obligatorios | Bézier cúbica; los dos controles no son puntos que la curva deba atravesar | {20,30}{40,90}{100,90}{120,30} |
Rect: esquina |
Coordenada, bp | Obligatoria | Origen de la caja; no es el centro | {20,30} |
Rect: tamaño |
Par ancho,alto, bp | Obligatorio | Ambos estrictamente positivos | {90,50} |
Ellipse: esquina |
Coordenada, bp | Obligatoria | Esquina de su caja delimitadora; no es el centro | {20,30} |
Ellipse: tamaño |
Par ancho,alto, bp | Obligatorio | Ambos positivos; son diámetros, no radios | {90,50} |
Circle: centro |
Coordenada, bp | Obligatorio | Centro del círculo | {70,60} |
Circle: radio |
Número, bp | Obligatorio | Estrictamente positivo | {25} |
Label: centro |
Coordenada, bp | Obligatorio | Centro de colocación del texto medido por TeX | {70,60} |
Label: texto |
TeX | Obligatorio, puede ser vacío | Se mide y compone con TeX; admite fórmulas y formato | {$\alpha+\beta$} |
Los números externos deben ser finitos y de magnitud como máximo 1e12, además
de los límites específicos de cada argumento. Las listas consumen el presupuesto
de puntos de la figura; el valor predeterminado de ese presupuesto es 100 000.
Los siete comandos geométricos admiten stroke, fill, width, dash, arrow
y opacity con el contrato de estilos comunes. La siguiente distinción determina
qué cambia visualmente al usar esas claves:
| Geometría | Relleno | Flechas |
|---|---|---|
| Line, Polyline | fill se admite pero el trazado permanece abierto y sin relleno |
end y both se aplican a los segmentos terminales |
| Polygon | fill rellena el interior; el borde se conserva |
arrow no añade puntas a un trazado cerrado |
| Bezier | Se dibuja el trazo cúbico; fill no rellena la curva |
Sigue la dirección del último/primer control hacia el extremo |
| Rect, Ellipse, Circle | fill rellena la forma; none deja solo el contorno |
No se dibujan puntas aunque se suministre arrow |
| Label | No admite opciones vectoriales | Texto horizontal con el formato TeX de su argumento |
Ejemplo de cada primitiva, con coordenadas separadas para poder reconocerlas:
\begin{noctikspicture}[width=400,height=240]
\NoctiksLine[stroke=blue,arrow=both]{20,200}{110,200}
\NoctiksPolyline[stroke=orange,width=1.5]{145,180;175,215;205,180}
\NoctiksPolygon[stroke=green,fill=0.9:0.98:0.94]{255,180;300,220;345,180}
\NoctiksBezier[stroke=purple,arrow=end]{20,120}{45,170}{90,170}{115,120}
\NoctiksRect[stroke=blue,fill=0.94:0.96:1]{145,100}{70,40}
\NoctiksEllipse[stroke=red]{255,100}{90,40}
\NoctiksCircle[stroke=green,dash=3:2]{65,45}{25}
\NoctiksLabel{190,45}{\textbf{Texto} y $x^2+y^2$}
\end{noctikspicture}

NoctiksLabel no crea un nodo, una caja de fondo ni un ancla para conectores.
Para conectar una fórmula a otra se necesita NoctiksNode, que conserva su
geometría medida y le asigna un nombre.
Nodos medidos, formas y posición relativa
\NoctiksNode[opciones]{nombre}{centro}{texto TeX}
\NoctiksNodeRelative[opciones]{nombre}{texto TeX}
Un nodo combina texto TeX, una forma opcional y anclas de conexión. Los tamaños
se calculan a partir del ancho real y de la suma altura + profundidad del texto.
El nombre es único y no vacío dentro de la figura. Se recomienda usar nombres
sin puntos: la notación de anclas reserva el punto para nombre.ancla.
Parámetros de geometría
| Parámetro | Tipo y unidad | Predeterminado | Límite / efecto | Ejemplo |
|---|---|---|---|---|
shape |
Enumeración | rect |
rect, circle, ellipse, diamond, none |
shape=diamond |
paddingx |
Número, bp por lado | 6 | 0…1000000; espacio horizontal alrededor del texto |
paddingx=10 |
paddingy |
Número, bp por lado | 5 | 0…1000000; espacio vertical alrededor del texto |
paddingy=8 |
minwidth |
Número, bp | 0 | 0…1000000; ancho exterior mínimo |
minwidth=80 |
minheight |
Número, bp | 0 | 0…1000000; alto exterior mínimo |
minheight=36 |
nombre |
Identificador | Obligatorio | No vacío y único en la figura; las referencias distinguen mayúsculas | {controller} |
centro |
Coordenada, bp | Obligatorio en Node absoluto | Solo puede estar vacío si se usa una relación | {100,90} |
texto TeX |
TeX | Obligatorio, puede ser vacío | Su medida determina el tamaño; su color y tipografía son TeX | {$G(s)$} |
El ancho y alto finales deben ser positivos y como máximo 1 000 000 bp. Este límite geométrico no amplía el lienzo, cuyo máximo sigue siendo 2000 bp por lado. Un texto vacío con padding y mínimos también vacíos produce dimensiones nulas y es inválido.
Si w y h son las dimensiones del rectángulo de texto más padding, la forma
calcula sus dimensiones antes de aplicar los mínimos:
| Forma | Cálculo de tamaño exterior | Consecuencia |
|---|---|---|
rect |
w × h |
Caja rectangular que envuelve al texto |
none |
w × h |
La caja existe para disposición y anclas, pero no se pinta |
circle |
Diámetro sqrt(w²+h²) |
El rectángulo de texto cabe dentro del círculo; los mínimos conservan un diámetro único |
ellipse |
sqrt(2)*w × sqrt(2)*h |
El rectángulo de texto cabe dentro de la elipse |
diamond |
2*w × 2*h |
Rombo con vértices cardinales; contiene el rectángulo de texto |
Los nodos admiten las seis claves de estilo común. El relleno y el contorno no
modifican el texto TeX. arrow no añade flechas al borde de un nodo; shape=none
conserva siempre el contorno invisible aunque se indique un relleno.
\begin{noctikspicture}[width=440,height=180]
\NoctiksNode[minwidth=60,minheight=36,fill=0.94:0.96:1]{R}{55,95}{$R$}
\NoctiksNode[shape=circle,paddingx=8,paddingy=8]{C}{140,95}{$C$}
\NoctiksNode[shape=ellipse,fill=0.96:0.94:1]{E}{225,95}{$E$}
\NoctiksNode[shape=diamond,paddingx=10,paddingy=7]{D}{310,95}{$D$}
\NoctiksNode[shape=none,minwidth=50]{N}{395,95}{$N$}
\NoctiksConnect[arrow=end]{R.east}{C.west}
\NoctiksConnect[arrow=end]{C.east}{E.west}
\NoctiksConnect[arrow=end]{E.east}{D.west}
\NoctiksConnect[arrow=end]{D.east}{N.west}
\end{noctikspicture}

Anclas de conexión
Las anclas válidas son center, north, south, east, west, northeast,
northwest, southeast y southwest. Se escriben, por ejemplo, G.east.
Las cardinales tocan el centro de cada lado; center es el centro del nodo.
Las diagonales intersectan el contorno real en dirección a una esquina de su
caja delimitadora. En elipses y rombos no son la esquina de la caja. El ancla
se sitúa sobre la línea central del contorno, sin separación extra por su grosor.
\begin{noctikspicture}[width=300,height=190]
\NoctiksNode[shape=ellipse,minwidth=85,minheight=45]{A}{80,80}{$A$}
\NoctiksNode[shape=diamond,minwidth=70,minheight=45]{B}{225,135}{$B$}
\NoctiksConnect[arrow=end]{A.northeast}{B.southwest}
\NoctiksSignal[labelside=below,labelgap=8]{A.east}{B.west}{$u$}
\end{noctikspicture}

Disposición relativa
NoctiksNodeRelative omite la coordenada explícita y requiere exactamente una
relación. El nodo de referencia puede aparecer después en el código. La
separación se mide entre los bordes de las cajas finales, incluidos forma,
padding y mínimos; no es la distancia entre centros.
| Parámetro | Tipo y unidad | Predeterminado | Límite / efecto | Ejemplo |
|---|---|---|---|---|
rightof |
Nombre de nodo | Ninguno | Sitúa el nodo a la derecha; alinea los centros en Y | rightof=A |
leftof |
Nombre de nodo | Ninguno | Sitúa el nodo a la izquierda; alinea los centros en Y | leftof=A |
above |
Nombre de nodo | Ninguno | Sitúa el nodo arriba; alinea los centros en X | above=A |
below |
Nombre de nodo | Ninguno | Sitúa el nodo abajo; alinea los centros en X | below=A |
gap |
Número, bp | 24 | 0…1000000; separación entre cajas en la dirección elegida |
gap=30 |
shiftx |
Número, bp | 0 | Finito, magnitud ≤ 1e12; desplazamiento posterior a la disposición |
shiftx=8 |
shifty |
Número, bp | 0 | Finito, magnitud ≤ 1e12; desplazamiento posterior a la disposición |
shifty=-5 |
Los centros calculados deben seguir siendo finitos y de magnitud ≤ 1e12.
Una relación no puede combinarse con un centro explícito. gap, shiftx y
shifty requieren una relación. La forma larga equivalente a NodeRelative
es \NoctiksNode[rightof=A]{B}{}{texto}.
\begin{noctikspicture}[width=360,height=220]
\NoctiksNode[minwidth=55,minheight=30]{A}{170,110}{$A$}
\NoctiksNodeRelative[rightof=A,gap=30,shiftx=8,shifty=-5]{B}{$B$}
\NoctiksNodeRelative[leftof=A,gap=30]{C}{$C$}
\NoctiksNodeRelative[above=A,gap=25]{D}{$D$}
\NoctiksNodeRelative[below=A,gap=25]{E}{$E$}
\NoctiksConnect[arrow=end]{A.east}{B.west}
\NoctiksConnect[arrow=end]{A.west}{C.east}
\NoctiksConnect[arrow=end]{A.north}{D.south}
\NoctiksConnect[arrow=end]{A.south}{E.north}
\end{noctikspicture}

Se resuelven todos los nodos antes de pintar: funcionan las referencias adelantadas y los conectores declarados antes que sus nodos. Se rechazan nombres duplicados, referencias inexistentes, ciclos y profundidad de dependencia superior a 128. Toda cadena de dependencias necesita una raíz absoluta.
La disposición no evita colisiones ni aumenta el lienzo. El orden de dibujo sigue el orden de las declaraciones, aunque la geometría se haya resuelto antes. Los nodos bajo una transformación distinta de la identidad no están admitidos.
Conectores y etiquetas de señal
\NoctiksConnect[opciones]{origen.ancla}{destino.ancla}
\NoctiksSignal[opciones]{origen.ancla}{destino.ancla}{texto TeX}
Connect dibuja un cable; Signal dibuja el cable y una etiqueta medida. Ambos
reciben anclas de nodos existentes, no coordenadas libres. Para extremos libres
se usa NoctiksLine o una polilínea. Las ramas de control también exponen anclas
del tipo sample.tap.
Rutas y parámetros
| Parámetro | Tipo y unidad | Predeterminado | Límite / efecto | Ejemplo |
|---|---|---|---|---|
route |
Enumeración | straight |
Una de las nueve rutas de la tabla siguiente | route=hvh |
bend |
Coordenada X o Y, bp | Punto medio de los extremos | Solo con hvh o vhv; fija la coordenada del tramo central |
bend=180 |
clearance |
Número, bp | 20 | 0 < clearance ≤ 1000000; solo con above, below, left, right |
clearance=35 |
arrow en Connect sin [...] |
Estilo de flecha | end, insertado por TeX |
El argumento omitido es [arrow=end] |
\NoctiksConnect{A.east}{B.west} |
arrow en Connect con [...] |
Estilo de flecha | none si falta la clave |
La lista explícita sustituye el valor TeX; incluir arrow=end para conservarlo |
[stroke=blue,arrow=end] |
arrow en Signal |
Estilo de flecha | end |
Noctiks conserva end aunque haya otras opciones; none lo desactiva |
[stroke=blue,arrow=none] |
Las demás claves de estilo común se aplican al trazado. fill no convierte un
conector en una región rellena. bend y clearance no son intercambiables: usar
una clave con una ruta ajena produce error.
| Ruta | Recorrido desde A hasta B | Interpretación de ajuste |
|---|---|---|
straight |
Segmento directo | No admite bend ni clearance |
hv |
Horizontal, después vertical | La esquina es (Bx,Ay) |
vh |
Vertical, después horizontal | La esquina es (Ax,By) |
hvh |
Horizontal, vertical, horizontal | X del tramo central = bend o (Ax+Bx)/2 |
vhv |
Vertical, horizontal, vertical | Y del tramo central = bend o (Ay+By)/2 |
above |
Desvío por arriba de ambos extremos | Y = max(Ay,By)+clearance |
below |
Desvío por debajo de ambos extremos | Y = min(Ay,By)-clearance |
left |
Desvío a la izquierda de ambos extremos | X = min(Ax,Bx)-clearance |
right |
Desvío a la derecha de ambos extremos | X = max(Ax,Bx)+clearance |
Ejemplo de una ruta con tramo central controlado y de un retorno lateral:
\begin{noctikspicture}[width=360,height=220]
\NoctiksNode[minwidth=60,minheight=32]{A}{70,150}{$A$}
\NoctiksNode[minwidth=60,minheight=32]{B}{285,90}{$B$}
\NoctiksSignal[route=hvh,bend=180,stroke=blue,labelat=0.25]{A.east}{B.west}{$u$}
\NoctiksSignal[route=below,clearance=35,labelside=below]{B.south}{A.south}{$y$}
\end{noctikspicture}

Para probar cada ruta sin superponer nueve cables, sustituir el primer conector
del ejemplo por una sola de estas listas de opciones: route=straight,
route=hv, route=vh, route=hvh,bend=180, route=vhv,bend=110,
route=above,clearance=25, route=below,clearance=25,
route=left,clearance=25 o route=right,clearance=25.
Los vértices consecutivos idénticos se eliminan. Las flechas siguen el último tramo no nulo, por lo que una ruta ortogonal puede terminar con una punta vertical u horizontal. La separación lateral se mide desde los extremos del cable y no desde el conjunto de obstáculos o desde todos los nodos de la figura.
Parámetros exclusivos de las etiquetas
| Parámetro | Tipo y unidad | Predeterminado | Límite / efecto | Ejemplo |
|---|---|---|---|---|
labelat |
Fracción de longitud | 0.5 | 0…1; posición sobre la longitud total de la polilínea |
labelat=0.7 |
labelside |
Dirección de página | above |
above, below, left, right; no depende de la inclinación del cable |
labelside=below |
labelgap |
Número, bp | 4 | No negativo y magnitud ≤ 1e12; separación desde el punto de referencia al borde del texto |
labelgap=8 |
labeldx |
Número, bp | 0 | Finito, magnitud ≤ 1e12; ajuste adicional hacia la derecha si es positivo |
labeldx=6 |
labeldy |
Número, bp | 0 | Finito, magnitud ≤ 1e12; ajuste adicional hacia arriba si es positivo |
labeldy=-3 |
El desplazamiento inicial añade la mitad del ancho del texto en los lados
izquierdo/derecho, o la mitad de su alto medido en arriba/abajo. Después aplica
labeldx y labeldy. No gira los glifos. El rectángulo completo de la etiqueta
debe caber en el lienzo; una señal de longitud cero no puede llevar etiqueta.
\begin{noctikspicture}[width=360,height=160]
\NoctiksNode[minwidth=55,minheight=30]{A}{65,85}{$A$}
\NoctiksNode[minwidth=55,minheight=30]{B}{295,85}{$B$}
\NoctiksSignal[stroke=blue,labelat=0.7,labelside=below,labelgap=8,labeldx=6,labeldy=-3]{A.east}{B.west}{$u(t)$}
\end{noctikspicture}

NoctiksConnect no admite claves label.... Las etiquetas de Signal no se
admiten bajo transformaciones distintas de la identidad. No hay selección
automática de puertos, evitación de obstáculos ni prevención de colisiones entre
etiquetas: ajustar ruta, anclas y desplazamientos forma parte de la composición.
Grupos gráficos, transformaciones y recorte
\begin{noctiksgroup} ... \end{noctiksgroup}
\NoctiksTransform{a,b,c,d,tx,ty}
\NoctiksClip{esquina inferior izquierda}{ancho,alto}
noctiksgroup guarda el estado gráfico y lo restaura al cerrar el grupo. No
dibuja un marco ni asigna un nombre. Es distinto de NoctiGroup, que calcula
un fondo semántico alrededor de nodos de control.
| Parámetro / operación | Tipo y unidad | Predeterminado | Límite / efecto | Ejemplo |
|---|---|---|---|---|
| Profundidad de grupo | Número de grupos anidados | 0 | Máximo 32; cierres desparejados fallan | Dos grupos anidados |
a,b,c,d |
Coeficientes de matriz | No hay valor implícito | Se requieren los seis coeficientes; escala, giro, reflexión o cizalla | 0,1,-1,0 |
tx,ty |
Traslación, bp | No hay valor implícito | Dos últimos coeficientes | 20,30 |
| Determinante | a*d-b*c |
— | Su valor absoluto debe superar 1e-12; matrices singulares fallan |
Identidad: 1 |
| Matriz acumulada | Seis coeficientes | Identidad inicial | Todos finitos y de magnitud ≤ 1e8 |
1,0,0,1,20,30 |
| Clip: esquina | Coordenada, bp del sistema vigente | Obligatoria | Origen del rectángulo de recorte | {10,10} |
| Clip: tamaño | Par positivo, bp | Obligatorio | Ancho y alto estrictamente positivos | {130,90} |
La transformación cumple x'=a*x+c*y+tx e y'=b*x+d*y+ty. En una secuencia de
transformaciones, la más reciente actúa primero sobre las coordenadas locales.
Para trasladar una forma ampliada: traslación y luego escala en el código.
El grupo padre se aplica después de la transformación local del grupo hijo.
\begin{noctikspicture}[width=320,height=200]
\begin{noctiksgroup}
\NoctiksTransform{1,0,0,1,25,25}
\NoctiksTransform{1.3,0,0,1.3,0,0}
\NoctiksPolygon[fill=0.94:0.96:1,stroke=blue]{0,0;80,0;40,75}
\NoctiksLabel{40,30}{$T$}
\end{noctiksgroup}
\begin{noctiksgroup}
\NoctiksTransform{0,1,-1,0,250,40}
\NoctiksRect[stroke=purple,fill=0.97:0.94:1]{0,0}{90,45}
\end{noctiksgroup}
\end{noctikspicture}

El centro de NoctiksLabel se transforma; los glifos conservan orientación y
tamaño. El clip afecta a la geometría vectorial, no recorta parcialmente el texto
del overlay TeX. Los nodos medidos no pueden usarse bajo matrices distintas de
la identidad. Los controles y las declaraciones Venn requieren nivel de figura.
El recorte queda fijado con el sistema de coordenadas que existe cuando se invoca. El ejemplo lo fija antes de trasladar el polígono:
\begin{noctikspicture}[width=230,height=150]
\begin{noctiksgroup}
\NoctiksClip{20,20}{150,100}
\NoctiksTransform{1,0,0,1,35,25}
\NoctiksPolygon[fill=0.9:0.95:1,stroke=blue]{0,0;170,0;85,140}
\end{noctiksgroup}
\NoctiksRect[stroke=gray,dash=3:2]{20,20}{150,100}
\end{noctikspicture}

Transform y Clip fuera de un grupo producen error. Cerrar el grupo restaura
la matriz y el recorte anteriores. El recorte obligatorio del lienzo siempre
sigue vigente.
Diagramas de control: bloques, cadenas y realimentación
Los comandos de control coloca nodos a partir de sus medidas TeX, dibuja conexiones y registra los signos de entrada a sumadores. Representa el diagrama; las funciones de transferencia escritas en los bloques son etiquetas, sin cálculo de respuesta temporal, estabilidad, Bode, Nyquist ni álgebra de control.
\begin{nocticontrol}[width=460,height=240] ... \end{nocticontrol}
\NoctiInput[opciones]{nombre}{texto TeX}
\NoctiOutput[opciones]{nombre}{texto TeX}
\NoctiBlock[opciones]{nombre}{texto TeX}
\NoctiSum[opciones]{nombre}
\NoctiChain[opciones]{nodo -> nodo -> ...}
\NoctiFeedback[opciones]{fuente}{sumador}
\NoctiBranch[opciones]{nombre de rama}{origen de cable}{destino de cable}
\NoctiChainLabel[opciones]{origen de cable}{destino de cable}{texto TeX}
\NoctiGroup[opciones]{nombre de grupo}{nodo -> nodo -> ...}{título TeX}
\NoctiConnect[opciones]{origen.ancla}{destino.ancla}
Primitivas de control
| Comando | Texto | Forma fija | Mínimos predeterminados | Relleno predeterminado |
|---|---|---|---|---|
NoctiInput |
Obligatorio | none, caja rectangular invisible |
0 × 0 bp | Ninguno |
NoctiOutput |
Obligatorio | none, caja rectangular invisible |
0 × 0 bp | Ninguno |
NoctiBlock |
Obligatorio | rect |
60 × 32 bp | white |
NoctiSum |
Vacío, sin argumento de texto | circle |
Diámetro 18 bp | white |
La medida real más padding puede superar estos mínimos. Input y Output tienen padding aunque su caja sea invisible. Sum es un círculo vacío: los signos se sitúan junto a sus puertos de entrada, no como texto central.
| Parámetro | Tipo y unidad | Predeterminado | Límite / efecto | Ejemplo |
|---|---|---|---|---|
paddingx |
Número, bp por lado | 6 | 0…1000000; contrato de nodo medido |
paddingx=10 |
paddingy |
Número, bp por lado | 5 | 0…1000000; contrato de nodo medido |
paddingy=8 |
minwidth |
Número, bp | Según primitiva | 0…1000000; sustituye el mínimo de la tabla anterior |
minwidth=85 |
minheight |
Número, bp | Según primitiva | 0…1000000; en Sum conserva forma circular |
minheight=38 |
westinput |
+ o - |
Signo de Chain si se omite | Solo Sum; sustituye el signo de su entrada izquierda desde Chain | westinput=- |
stroke, fill, width, dash, arrow, opacity |
Estilo común | Negro, 0.8 bp, continuo, sin flecha, opacidad 1; fill según primitiva | La forma no usa puntas; el texto conserva formato TeX | stroke=blue,fill=0.94:0.96:1 |
No se admite shape en estas primitivas: la determina el comando. Tampoco
admiten coordenadas o relaciones rightof: su posición debe asignarse mediante
Chain o, para un Block de retorno, mediante Feedback con via.
Cadenas horizontales
NoctiChain recibe entre 2 y 128 nombres distintos separados por ->. Coloca
el primero en (x,y) y el resto a su derecha, con un hueco gap entre cajas
medidas. Conecta east con west y dibuja los signos de los Sum que reciben
una entrada desde la izquierda.
| Parámetro | Tipo y unidad | Predeterminado | Límite / efecto | Ejemplo |
|---|---|---|---|---|
| Lista de nodos | Identificadores separados por -> |
Obligatoria | 2…128 distintos; todos declarados como primitivas de control | {r -> error -> G -> y} |
gap |
Número, bp | 32 | 0…1000000; distancia entre bordes medidos |
gap=50 |
x |
Número, bp | 40 | Finito, magnitud ≤ 1e12; centro del primer nodo |
x=35 |
y |
Número, bp | 65 % del alto de la figura | Finito, magnitud ≤ 1e12; centro vertical de la cadena |
y=160 |
sign |
+ o - |
+ |
Entrada izquierda de cada Sum, salvo su westinput local |
sign=- |
| Estilo común | Opciones de línea | Flecha end; resto estándar |
Se aplica a los cables, no a las cajas | stroke=blue,width=1.2 |
Un nodo de control pertenece a una única Chain o, si es Block, a una única lista
via. Declarar un nodo sin asignarle posición produce error. Pueden existir
varias cadenas separadas con posiciones independientes. Las referencias a
nodos y cadenas no dependen del orden en que aparezcan las declaraciones.
\begin{nocticontrol}[width=460,height=240]
\NoctiInput{r}{$r$}
\NoctiSum{error}
\NoctiBlock[paddingx=10,paddingy=8,minwidth=85,minheight=38,stroke=blue,fill=0.94:0.96:1]{G}{$\displaystyle\frac{K}{s+1}$}
\NoctiOutput{y}{$y$}
\NoctiChain[gap=50,x=35,y=160,sign=+,stroke=blue,width=1.2]{r -> error -> G -> y}
\NoctiFeedback{y}{error}
\end{nocticontrol}

Realimentación directa y signos
NoctiFeedback conecta una fuente distinta del destino a un Sum. En un nodo
ordinario de control sale de east. Si la fuente es Output sale de output.tap,
el punto medio de su cable de entrada, y conserva la flecha original después
del punto de derivación. Si la fuente es una rama nombrada, usa su .tap.
| Parámetro | Tipo y unidad | Predeterminado | Límite / efecto | Ejemplo |
|---|---|---|---|---|
fuente |
Nombre de nodo de control o rama | Obligatoria | Distinta del Sum destino; Output necesita cable entrante de Chain | {y} o {sample} |
sumador |
Nombre de Sum | Obligatorio | Debe existir; se rechaza otro tipo de primitiva | {error} |
side |
below o above |
below |
Debajo entra por south; arriba por north |
side=above |
sign |
+ o - |
- |
Signo junto al puerto de entrada | sign=+ |
clearance |
Número, bp | 45 | 0 < clearance ≤ 1000000; sin via se mide desde extremos del retorno |
clearance=35 |
via |
Lista de Blocks separados por -> |
Sin bloques de retorno | 1…128 distintos; recorrido de derecha a izquierda | via=H -> K |
| Estilo común | Opciones de línea | Flecha end; resto estándar |
Estilo de los tramos de retorno | stroke=red,dash=4:2 |
No pueden entrar dos conexiones al mismo puerto del mismo Sum. La comprobación
es compartida por Chain, Feedback y NoctiConnect. Un Sum puede recibir una
entrada en west, otra en north y otra en south.
\begin{nocticontrol}[width=460,height=240]
\NoctiInput{r}{$r$}
\NoctiSum[westinput=-]{error}
\NoctiBlock{G}{$G(s)$}
\NoctiOutput{y}{$y$}
\NoctiChain[gap=55,x=40,y=85,sign=+]{r -> error -> G -> y}
\NoctiFeedback[side=above,clearance=35,sign=+,stroke=red,dash=4:2]{y}{error}
\end{nocticontrol}

En este caso la entrada izquierda es negativa por westinput=-, y la entrada
superior es positiva por Feedback[sign=+]. Las opciones cambian los signos
dibujados; no transforman las fórmulas escritas en el bloque.
Bifurcaciones nombradas y retorno con bloques
NoctiBranch crea un punto negro de unión de 3 bp de diámetro sobre un cable de
Chain existente, sin duplicar el cable ni su flecha. El punto no tiene opciones
propias de color o tamaño. Sus dos extremos deben ser vecinos en la
misma cadena y estar en el mismo orden dirigido.
| Parámetro | Tipo y unidad | Predeterminado | Límite / efecto | Ejemplo |
|---|---|---|---|---|
| Nombre de rama | Identificador | Obligatorio | No vacío, sin ., único frente a ramas y nodos |
{sample} |
| Origen, destino | Nombres de nodos vecinos de Chain | Obligatorios | Cable dirigido y de longitud positiva | {G}{y} |
pos |
Fracción de longitud | 0.5 | Estrictamente 0 < pos < 1; no admite extremos |
pos=0.7 |
En Feedback se usa {sample}; en Connect o Signal se usa {sample.tap}. El
punto de unión se dibuja aunque la rama todavía no tenga una conexión adicional.
Los Blocks listados en via se declaran con NoctiBlock, pero no se incluyen en
Chain. Se ordenan desde la fuente hacia el Sum, de derecha a izquierda, con
huecos iguales entre cajas. Cada hueco debe medir al menos 12 bp. Si no caben,
aumentar el hueco de la cadena principal o reducir anchos de los bloques.
Con via, la fuente debe estar a la derecha del Sum y ambos deben pertenecer
a cadenas, directamente o mediante una rama. El carril considera los límites
de los nodos de cadena en ese tramo horizontal. clearance mide la distancia
desde esos límites hasta el borde del bloque de retorno más alto. No evita
otros retornos, cajas ajenas ni cables arbitrarios.
\begin{nocticontrol}[width=460,height=240]
\NoctiInput{r}{$r$}
\NoctiSum{error}
\NoctiBlock{G}{$G(s)$}
\NoctiOutput{y}{$y$}
\NoctiBlock{H}{$H(s)$}
\NoctiBlock{K}{$K_f$}
\NoctiChain[gap=75,y=65]{r -> error -> G -> y}
\NoctiBranch[pos=0.7]{sample}{G}{y}
\NoctiFeedback[via=H -> K,side=above,clearance=30,sign=-]{sample}{error}
\end{nocticontrol}

Etiquetas sobre cables existentes
NoctiChainLabel añade texto al cable entre dos vecinos dirigidos de Chain.
Admite una etiqueta por cable y no dibuja una segunda flecha. Puede declararse
antes de la cadena; se coloca después de resolver las medidas y posiciones.
| Parámetro | Tipo y unidad | Predeterminado | Límite / efecto | Ejemplo |
|---|---|---|---|---|
| Origen, destino | Nombres de vecinos de Chain | Obligatorios | Mismo orden dirigido que Chain | {error}{G} |
| Texto | TeX medido | Obligatorio | Debe caber entero en el lienzo | {$E(s)$} |
labelat |
Fracción | 0.5 | 0…1; longitud del cable existente |
labelat=0.6 |
labelside |
Dirección de página | above |
above, below, left, right |
labelside=below |
labelgap |
Número, bp | 4 | No negativo; separa el borde del texto | labelgap=8 |
labeldx |
Número, bp | 0 | Finito, magnitud ≤ 1e12 |
labeldx=3 |
labeldy |
Número, bp | 0 | Finito, magnitud ≤ 1e12 |
labeldy=-2 |
Se aplican las mismas reglas de medidas y dirección que a la etiqueta de
Signal. Este comando no admite stroke, arrow, route ni otras opciones de
línea: el estilo del cable se establece en Chain. Un cable de longitud cero no
puede llevar una etiqueta ni una bifurcación nombrada.
\begin{nocticontrol}[width=460,height=220]
\NoctiInput{r}{$r$}
\NoctiSum{error}
\NoctiBlock{G}{$\displaystyle\frac{K}{s+1}$}
\NoctiOutput{y}{$y$}
\NoctiChain[gap=60,y=150]{r -> error -> G -> y}
\NoctiChainLabel{r}{error}{$R(s)$}
\NoctiChainLabel[labelat=0.6,labelside=below,labelgap=8,labeldx=3,labeldy=-2]{error}{G}{$E(s)$}
\NoctiChainLabel{G}{y}{$Y(s)$}
\NoctiFeedback[clearance=55]{y}{error}
\end{nocticontrol}

Grupos semánticos con título
NoctiGroup calcula un rectángulo a partir de las cajas de sus miembros. Admite
nodos ordinarios y Blocks colocados en Chain o via. El título medido reserva una
banda propia y puede ensanchar el grupo. Un título vacío no reserva banda.
| Parámetro | Tipo y unidad | Predeterminado | Límite / efecto | Ejemplo |
|---|---|---|---|---|
| Nombre de grupo | Identificador | Obligatorio | No vacío, sin ., distinto de nodos, ramas y grupos |
{plant} |
| Miembros | Nombres separados por -> |
Obligatorios | 1…128 distintos; no admite grupos ni ramas | {G -> H} |
| Título | TeX medido | Obligatorio, puede ser vacío | En banda superior/inferior según titlepos |
{Modelo de planta} |
padding |
Número, bp | 12 | 0…1000; margen alrededor de miembros y banda |
padding=16 |
titlegap |
Número, bp | 6 | 0…1000; distancia entre miembros y título |
titlegap=8 |
titlepos |
above o below |
above |
Sitúa la banda encima o debajo de los miembros | titlepos=below |
fill |
Color o none |
0.94:0.96:1 |
Fondo; none deja solo el contorno |
fill=0.98:0.96:0.90 |
stroke |
Color | 0.55:0.62:0.72 |
Color del borde | stroke=blue |
width, dash, opacity |
Estilo común | 0.8 bp, continuo, 1 | Solo fondo y contorno; no cambian título | width=1,dash=4:2,opacity=0.8 |
arrow se rechaza en un grupo. El borde exterior, incluido medio grosor de
línea, debe caber en el lienzo. Los grupos no desplazan los nodos ni recogen
automáticamente cables de retorno, etiquetas de Chain o nodos ajenos. Se pueden
solapar y compartir miembros; un fondo posterior puede cubrir otro anterior.
\begin{nocticontrol}[width=460,height=250]
\NoctiInput{u}{$u$}
\NoctiBlock{A}{$A(s)$}
\NoctiBlock{B}{$B(s)$}
\NoctiOutput{y}{$y$}
\NoctiChain[gap=45,y=130]{u -> A -> B -> y}
\NoctiGroup[padding=16,titlegap=8,titlepos=below,fill=0.98:0.96:0.90,stroke=blue,width=1,dash=4:2,opacity=0.8]{plant}{A -> B}{Modelo de planta}
\NoctiChainLabel{A}{B}{$v$}
\end{nocticontrol}

Conexiones adicionales con signo
NoctiConnect comparte las nueve rutas, bend, clearance y estilos de
NoctiksConnect. No coloca nodos ni crea automáticamente un punto negro de unión.
Su flecha final predeterminada se conserva al especificar otras opciones.
| Parámetro | Tipo y unidad | Predeterminado | Límite / efecto | Ejemplo |
|---|---|---|---|---|
| Origen | Ancla de nodo o .tap |
Obligatorio | Debe existir; puede ser una rama | {K.west} |
| Destino | Ancla de nodo o .tap |
Obligatorio | Debe incluir nombre y ancla; para Sum solo west, north, south |
{error.south} |
sign |
+ o - |
+ al entrar a Sum |
Solo para destino Sum; no puede reutilizar un puerto ocupado | sign=- |
arrow |
none, end, both |
end |
Se conserva con opciones personalizadas | arrow=none |
route, bend, clearance |
Contrato de conectores | straight, punto medio, 20 bp |
Mismas combinaciones válidas que NoctiksConnect | route=below,clearance=30 |
stroke, fill, width, dash, opacity |
Estilo común | Estándar | Estilo del cable; sin etiqueta incorporada | stroke=purple,width=1.2 |
Para un destino que no sea Sum se rechaza un sign explícito. Las conexiones
de bajo nivel NoctiksConnect y NoctiksSignal no registran signos ni ocupación
de puertos: usar NoctiConnect cuando se necesite esa comprobación de control.
\begin{nocticontrol}[width=460,height=280]
\NoctiInput{r}{$r$}
\NoctiSum{error}
\NoctiBlock{G}{$G(s)$}
\NoctiOutput{y}{$y$}
\NoctiInput{v}{$v$}
\NoctiBlock{K}{$K(s)$}
\NoctiChain[gap=50,x=40,y=205]{r -> error -> G -> y}
\NoctiChain[gap=45,x=180,y=65]{v -> K}
\NoctiConnect[route=hv,sign=-,stroke=purple,width=1.2]{K.north}{error.south}
\end{nocticontrol}

Todas las declaraciones Nocti... de control deben estar a nivel de figura,
fuera de ejes y de noctiksgroup, incluso si el grupo conserva matriz identidad.
Los fondos semánticos se pintan primero; los cables y signos generados se
añaden después de las declaraciones. El texto queda en la capa TeX superior.
Conjuntos y diagramas de Venn semánticos
Estos comandos describen conjuntos y operaciones booleanas. El resultado es una región vectorial nativa: una intersección no se simula superponiendo discos transparentes. Se permiten dos o tres conjuntos, circulares o elípticos y alineados con los ejes.
\begin{noctivenn}[width=300,height=220] ... \end{noctivenn}
\NoctiUniverse[opciones]{esquina inferior izquierda}{ancho,alto}
\NoctiSet[opciones]{nombre semántico}{centro}{etiqueta TeX}
\NoctiShade[opciones]{expresión de conjuntos}
Cada figura Venn necesita exactamente un Universe explícito y dos o tres Set. Puede contener entre cero y 32 declaraciones Shade. Las referencias adelantadas funcionan: el orden de Universe, Set y Shade no altera la región seleccionada. Todos se declaran a nivel de figura, fuera de ejes y grupos gráficos.
Universo
| Parámetro | Tipo y unidad | Predeterminado | Límite / efecto | Ejemplo |
|---|---|---|---|---|
| Esquina | Coordenada, bp | Obligatoria | Esquina inferior izquierda del universo | {10,10} |
| Tamaño | Par ancho,alto, bp | Obligatorio | Positivos; el rectángulo debe caber completo en el lienzo | {280,200} |
stroke |
Color | black |
Estilo del contorno | stroke=gray |
width |
Número, bp | 0.8 | 0 < width ≤ 100 |
width=1.2 |
dash |
Lista numérica separada por : |
Continua | Como máximo ocho longitudes, cada una en (0,1000] bp |
dash=4:2 |
opacity |
Número | 1 | 0…1; opacidad del contorno |
opacity=0.8 |
Universe no tiene nombre ni etiqueta incorporada. Para rotularlo usar
NoctiksLabel. No admite fill ni arrow: el interior se rellena mediante Shade,
incluida la selección del universo entero con una expresión booleana.
Conjuntos circulares y elípticos
| Parámetro | Tipo y unidad | Predeterminado | Límite / efecto | Ejemplo |
|---|---|---|---|---|
| Nombre | Identificador ASCII | Obligatorio | Empieza con letra; luego letras, dígitos o _; máximo 32 caracteres |
{A_1} |
| Centro | Coordenada, bp | Obligatorio | El conjunto completo debe quedar dentro del universo | {115,110} |
| Etiqueta | TeX medido | Obligatoria, puede ser vacía | Independiente del nombre; debe caber en el lienzo | {$\mathcal{A}$} |
radius |
Número, bp | 50 | Positivo; fija ambos radios; no se combina con rx ni ry |
radius=60 |
rx |
Número, bp | 50 si se omite | Positivo; radio horizontal, no diámetro | rx=65 |
ry |
Número, bp | 50 si se omite | Positivo; radio vertical, no diámetro | ry=45 |
labeldx |
Número, bp | 0 | Desplazamiento de etiqueta respecto al centro en X | labeldx=-15 |
labeldy |
Número, bp | 0.65*ry |
Desplazamiento de etiqueta respecto al centro en Y | labeldy=28 |
stroke, width, dash, opacity |
Estilo de contorno | Negro, 0.8 bp, continuo, 1 | Mismos límites que Universe | stroke=blue,width=1.2 |
Cada nombre es único y distingue mayúsculas de minúsculas. union,
intersection, difference y complement están reservados. Los nombres de
conjuntos son independientes de los nombres de nodos. La etiqueta puede usar
un texto distinto del nombre sin alterar las expresiones booleanas.
Si se especifica solo rx=65, ry conserva 50; si se especifica solo ry=45,
rx conserva 50. Usar radius=60,rx=65 es inválido incluso si ambos valores
son positivos. Los contornos de Set no admiten fill ni arrow. No hay giro
de elipses ni colocación automática para diagramas de Euler.
Sombreado y operaciones
| Parámetro | Tipo | Predeterminado | Límite / efecto | Ejemplo |
|---|---|---|---|---|
| Expresión | Nombre u operación funcional | Obligatoria | Máximo 512 bytes; profundidad de análisis 32; nombres existentes | {difference(A,B)} |
fill |
Color | cyan |
Se requiere un color; none produce error |
fill=purple |
opacity |
Número | 0.3 | 0…1; opacidad de esta región completa |
opacity=0.35 |
Shade solo admite esas dos claves de estilo. No añade un borde propio: los contornos del universo y de los conjuntos se dibujan después de los rellenos. Una región booleana se compone y se rellena una sola vez, por lo que su propia intersección no oscurece la opacidad. Varias llamadas a Shade sí se superponen en orden y pueden acumular opacidad donde coinciden.
| Expresión | Aridad | Región elegida | Ejemplo de caso |
|---|---|---|---|
A |
Nombre único | El conjunto A entero | Pertenencia simple |
union(A,B) |
2 o 3 argumentos | Puntos que pertenecen a algún argumento | Unión de dos conjuntos |
union(A,B,C) |
3 | Unión de los tres | Unión triple |
intersection(A,B) |
2 o 3 argumentos | Puntos que pertenecen a todos los argumentos | Intersección doble |
intersection(A,B,C) |
3 | Zona común a los tres | Intersección triple |
difference(A,B) |
Exactamente 2 | A excluyendo B | Diferencia dirigida |
complement(A) |
Exactamente 1 | Universo excluyendo A | Complemento relativo al universo |
difference(union(A,B),C) |
Composición | Unión de A y B, sin C | Operaciones anidadas |
complement(union(A,B,C)) |
Composición | Exterior de los tres dentro del universo | Ninguno de los conjuntos |
difference(A,A) |
Exactamente 2 | Vacío | Resultado válido sin área rellena |
union(A,complement(A)) |
Composición | Universo entero | Selección del fondo completo |
La sintaxis permite espacios y operaciones anidadas. No admite operadores
infijos (A ∩ B, A|B, A-B) ni comandos TeX en la expresión; el TeX se reserva
para las etiquetas. La diferencia es dirigida: difference(A,B) y
difference(B,A) representan regiones distintas.
Ejemplo de dos conjuntos
\begin{noctivenn}[width=300,height=220]
\NoctiUniverse[stroke=gray,width=1.2,dash=4:2,opacity=0.8]{10,10}{280,200}
\NoctiSet[radius=60,labeldx=-15,labeldy=28,stroke=blue]{A}{115,110}{$\mathcal{A}$}
\NoctiSet[radius=60,labeldx=15,labeldy=28,stroke=red]{B}{185,110}{$\mathcal{B}$}
\NoctiShade[fill=cyan,opacity=0.35]{intersection(A,B)}
\NoctiksLabel{25,195}{$U$}
\end{noctivenn}

Para los casos simples de la tabla, sustituir únicamente la expresión de Shade
por A, union(A,B), difference(A,B), complement(A), difference(A,A) o
union(A,complement(A)). Es una sustitución de la línea, no una suma de llamadas
que oscurezca regiones por superposición.
Ejemplo de tres conjuntos elípticos
\begin{noctivenn}[width=300,height=240]
\NoctiUniverse{10,10}{280,220}
\NoctiSet[rx=65,ry=50,labeldx=-24,labeldy=25]{A}{115,145}{$A$}
\NoctiSet[rx=65,ry=50,labeldx=24,labeldy=25]{B}{185,145}{$B$}
\NoctiSet[rx=60,ry=48,labeldy=-25]{C}{150,90}{$C$}
\NoctiShade[fill=purple,opacity=0.3]{difference(union(A,B),C)}
\NoctiksLabel{25,215}{$U$}
\end{noctivenn}

Sustituir la expresión por union(A,B,C), intersection(A,B,C) o
complement(union(A,B,C)) permite ver, respectivamente, la unión triple, el
núcleo común y el exterior de los tres conjuntos. La geometría puede representar
conjuntos separados, tangentes, contenidos o coincidentes, además de intersecciones
no vacías. No se limita a la disposición clásica de tres círculos.
Orden de dibujo y límites prácticos
El orden fijo es: fondos de grupos de control, regiones sombreadas Venn, contorno del universo y de los conjuntos, y después comandos gráficos ordinarios. Las etiquetas se colocan en la capa TeX. Por eso un Shade declarado al final no tapa el contorno de sus propios conjuntos, mientras que un Rect ordinario puede cubrirlos. Los contornos conservan su propia opacidad.
La composición booleana consume el presupuesto de puntos de la figura. Se utilizan operaciones nativas de trazados y precisión gráfica numérica; no se promete aritmética simbólica exacta de fronteras. Más de tres conjuntos, formas arbitrarias como conjuntos y varios universos independientes en una misma figura quedan fuera de esta API. Para universos independientes, crear figuras distintas.
Errores frecuentes al componer diagramas
| Situación | Resultado / corrección |
|---|---|
Usar 20pt o 2cm como coordenada |
Las coordenadas requieren números en bp; convertir y escribir el número |
| Usar constantes o macros TeX en posiciones de nodos | Esos campos no pasan por el evaluador de constantes; escribir literales |
NoctiksEllipse{100,80}{30,20} esperando un centro |
100,80 es esquina; para centro (100,80), usar esquina (85,70) |
Añadir [stroke=blue] a Connect y perder la flecha |
Añadir arrow=end en la misma lista explícita |
| Usar dos relaciones en NodeRelative | Dejar una sola; aplicar shiftx/shifty si hace falta un ajuste |
Añadir bend a route=hv |
bend solo corresponde a hvh o vhv |
Añadir clearance a route=straight |
Usar un desvío lateral o retirar la clave |
| Etiqueta de Signal fuera del lienzo | Aumentar lienzo o ajustar lado, fracción y desplazamientos |
| Nodo control fuera de Chain/via | Incluirlo en exactamente una de esas disposiciones |
Sum recibe dos entradas en south |
Elegir otro puerto o corregir la conexión duplicada |
| Branch sobre dos nodos no vecinos | Elegir el cable real entre vecinos de Chain |
Branch o etiqueta sobre cable con gap=0 |
Dejar longitud positiva al cable |
| Blocks via no caben | Aumentar espacio horizontal; se necesitan huecos de al menos 12 bp |
| Group fuera del lienzo | Considerar título, padding y medio grosor del borde, además de los nodos |
Set con radius y rx simultáneos |
Elegir círculo con radius o elipse con rx/ry |
Shade con fill=none |
Usar color o retirar el Shade si no se desea relleno |
| Dos universos en una figura | Crear dos figuras; cada Venn acepta uno |
Índice de comandos y entornos
Consulta los comandos por nombre. Sus argumentos, opciones, valores predeterminados y ejemplos están en la sección enlazada.
| Entorno | Función |
|---|---|
noctikspicture |
Dibujo geométrico: lienzos, coordenadas y primitivas |
noctiksgroup |
Grupos gráficos, transformaciones y recorte |
noctiaxis |
Ejes y área de dibujo |
noctipanels |
Paneles y composición científica |
noctipanel |
Paneles y composición científica |
nocticontrol |
Diagramas de control: bloques, cadenas y realimentación |
noctivenn |
Conjuntos y diagramas de Venn semánticos |
Diagnósticos, errores y límites operativos
Los diagnósticos no fatales describen decisiones de dibujo; no equivalen a aceptación matemática o visual del resultado. Los errores invalidan la generación. Usa la figura indicada en el diagnóstico para localizar el problema.
| Situación | Resultado | Acción práctica |
|---|---|---|
| Muestras indefinidas en curva | Se separan segmentos; diagnóstico | Revisar dominio, singularidades y muestreo |
| Intervalos adaptativos sin resolver | Se interrumpe la unión; diagnóstico | Aumentar presupuesto o ajustar tolerancia y dominio |
| Discontinuidad sospechosa | Se separa la curva; diagnóstico | Revisar la gráfica y el comportamiento analítico |
| Origen fuera del rango o escala logarítmica | El cruce usa un borde válido; diagnóstico | Fijar ejes y límites adecuados a la intención |
| Punto, referencia o región fuera de rango | Se omite el elemento; diagnóstico | Ajustar coordenada o rango explícitamente |
| Segmento/vector de longitud cero | Se omite; diagnóstico | Corregir puntos o componentes |
| Etiquetas de punto sin posición libre | Se conserva el texto; diagnóstico de colisión | Cambiar lado/desplazamientos o ampliar gráfica |
| Curva de nivel sin espacio para texto | Se omite esa etiqueta; diagnóstico | Reducir etiquetas o ampliar gráfica |
| Celdas escalares sin esquinas válidas suficientes | Se enmascaran; diagnóstico | Revisar datos y huecos |
| Campo vectorial indefinido o vector nulo | Se omiten las flechas afectadas; diagnóstico | Revisar ecuaciones y dominio |
| Trayectoria detenida anticipadamente | Se conserva el tramo calculado; diagnóstico con motivo | Revisar paso, semilla y campo |
| Banda sin solapamiento o con intervalos indefinidos | Se omiten zonas sin datos; diagnóstico | Revisar dominio compartido y huecos |
| Opción desconocida, duplicada o mal formada | Error | Usar sólo claves documentadas una vez |
| Archivo ausente, ruta insegura o CSV inválido | Error | Corregir recurso, ruta o formato |
| Valor no finito, fuera de rango o incompatible con log | Error en datos/configuración explícitos | Corregir valor y escala |
| Constante desconocida, ciclo o duplicado | Error | Corregir definición o alcance |
| Escena incompleta o estructura mal cerrada | Error | Revisar compilación y cierres de entornos |
| Límite de complejidad superado | Error | Reducir la complejidad o dividir la figura |
La compilación aplica límites concretos: lienzo de hasta 2000 × 2000 bp; 32 niveles de grupos gráficos; expresiones de 2048 bytes y 256 nodos; 64 niveles de dependencias; 128 columnas y 8192 bytes por campo de tabla. Las familias científicas y semánticas incluyen otros máximos que se indican junto a sus parámetros. Si una figura supera los límites, reduce su complejidad o divide la composición.
Las fórmulas admiten las expresiones matemáticas descritas en este manual; no ejecutan código ni comandos del sistema. No necesita shell-escape. Su alcance es 2D: no incorpora ajuste estadístico, cálculo simbólico, simulación de control, 3D, animación ni disposición automática general de grafos. Utiliza una versión de Paper Studio que incluya las funciones utilizadas.