Incluir código LaTeX en las gráficas de Octave

No es raro que a la hora de hacer un gráfico con Octave se haga necesario incluir fórmulas en los ejes o en alguna etiqueta. Esto es posible con un script como el siguiente (probado en la versión 3.8.1), que obtiene la gráfica final como un archivo png:

#!/usr/bin/octave

function y = f(x)
for i=1:size(x)(2)
y(i) = (3*x(i)*x(i)-1)/2;
endfor
endfunction

function y = g(x)
for i=1:size(x)(2)
y(i) = (5*x(i)*x(i)*x(i)-3*x(i))/2;
endfor
endfunction

x = -1:0.01:1;
plot(x,f(x),"-;$\\frac{1}{2}\\left(3x^2-1\\right)$;",
x,g(x),"-;$\\frac{1}{2}\\left(5x^3-3x\\right)$;"
);
xlabel("x");
ylabel("y");
legend("location","southeast");
legend("boxoff");

print -depslatexstandalone -color "-S400,300" files/output;

system("latex -output-directory=files files/output.tex");
system("dvipng -o png/output.png files/output.dvi");

La primera línea indica que el archivo debe procesarse con Octave (esto permite que se pueda ejecutar directamente sin tener que pasárselo a Octave explícitamente). Deberá sustituirse por la salida del comando which octave.

A continuación se definen dos funciones, y en seguida se representan éstas en el intervalo [-1,1]. En el comando plot se indica que las gráficas se harán con líneas (-) y se introduce código LaTeX en la leyenda. Este código deberá estar escapado (nótese la doble barra invertida) y entre dos caracteres $.

Seguidamente se guarda el gráfico con print. En este comando se indica con -depslatexstandalone que se generarán dos archivos. Uno con extensión eps que contendrá el gráfico sin anotaciones y otro con extensión tex que incluirá las anotaciones (la leyenda, los valores en los ejes y sus etiquetas). Debido al sufijo standalone este último archivo será un documento de LaTeX válido por sí mismo. De no haberlo puesto se hubiera generado código para incluir en otro archivo. El resto de este comando se indica que queremos usar colores en el gráfico (-color), el tamaño del gráfico en píxeles (-S600,500) y el nombre de los archivos (output-inc.eps y output.tex en el directorio files).

Para terminar se procesan estos archivos desde Octave usando la función system, cuyos argumentos podrían haberse ejecutado por separado, pero por consistencia se incluyen en el mismo archivo. La primera de estas líneas genera tres archivos con nombre output y extensiones aux, log y dvi en el directorio files. La segunda obtiene el gráfico en formato png a partir de éstos. Podría haberse obtenido en formato pdf o ps cambiando dvipng por dvipdf o dvips, pero esto es una cuestión de preferencias y de cómo vaya a usarse.

El resultado final será como el siguiente:

Resultado de la ejecución del script de Octave que se ha explicado
Representación gráfica de los Polinomios de Legendre de orden 2 y 3.