Un poquito de LaTeX (II)

Lunes, 18 diciembre 2006

A continuación, se resuelven una serie de dudas que generó el primer artículo sobre LaTeX que publiqué en “El Trastero de Mazi“. Son un par de cosillas acerca de la compilación y la codificación de caracteres en LaTeX. Aquí van esas dos cuestioncillas que no estaban demasiado claras en su día. Espero que sea útil esta “reedición” de aquellos posts. Un saludo a todos.

“Bueno, con esta segunda entrada, espero dejar zanjadas un par de cuestiones que parecen ser que no quedaron del todo claras ayer con el primer artículo sobre LaTeX.

Lo primero, deciros que he creado la categoría “LaTeX”, donde iré dejando todos los posts que pueda escribir sobre el tema. Así, creo que satisfago, al menos en parte, la sugerencia que me hacía Javi sobre crear un enlace al posts de ayer. De esta forma, los tendrás todos juntitos, sólo te tocará buscar el que quieres :).

En segundo lugar, voy a explicar un poco más detalladamente el proceso para compilar un documento. Escribiremos el documento con un editor cualquiera. Como ya dije, nos vale cualquiera, nano, vim, joe…etc. El fichero, lo guardaremos con extensión .tex. Una vez que lo hayamos escrito, lo podemos compilar con el comando:

$ latex archivo.tex

Esto nos generará varios archivos de salida, lo único que nos interesa realmente es el archivo .dvi que nos genera, ya que los demás los podemos considerar transparentes a nosotros. Podemos convertir este .dvi a .ps o .pdf con los comandos dvips y dvipdf respectivamente. Sin embargo, nos podemos ahorrar todos estos pasos y compilar directamente sacando la salida directamente a .pdf con el comando:

$ pdfelatex archivo.tex

Bien, con esto, espero haber dejado claro el tema de la compilación al que se refería Javi.

Por otro lado, con el tema de la codificación de caracteres me meteré otro día (ayer sólo se trataba de crear una plantilla de documento estándar), sólo decir que el paquete que metía el otro día \usepackage[latin1]{inputenc}, llevaba la opción [latin1], que sirve para las codificaciones ISO, porque es la que usa LaTeX por defecto. Otro día explicaré más a fondo cómo usar UTF y varias otras.

Para acabar, quería explicar un poco mejor qué hace el paquete babel. Este paquete se encarga de que, si escribimos en un idioma distinto del inglés, todo encaje a la perfección. Me explico. Se encarga de separarnos las palabras con corrección de acuerdo a las reglas ortógraficas del idioma en el que escribimos, de traducir el nombre de las secciones y epígrafes a ese idioma (si no lo ponemos, en castellano en vez de capítulos tendremos chapters). Es, por tanto, importante incluir este paquete en las cabeceras para escribir en castellano, ya que si no el compilador creerá que nuestro idioma es el inglés (el que viene por defecto) y habrá algunas cosas que no queden como deseamos.

Si hay algo que no esté claro, ya sabéis donde preguntarlo. Un saludo.”

Anuncios

Un poquito de LaTeX

Jueves, 14 diciembre 2006

Bien el otro día publiqué el primer artículo sobre LaTeX del blog, y si bien están al alcance de la mano los primeros artículos del tema que he escrito, me parece buena idea publicarlos otra vez, ahora en este blog, y así tenerlos todos reunidos. Sin nada más que decir, aquí copio y pego el primer artículo de LaTeX de mi primer blog:

“Una de las poquitas cosas que sé hacer en este mundillo de frikis, es la edición de documentos en LaTeX. Es por eso que he decidido escribir una serie de artículos, en los que explicaré un poco cómo realizar un documento usando esta herramienta.

Por ser lo primero que escribo de este estilo, ando un poco perdido, así que pido perdón de antemano si lo que leéis os resulta muy simplón o muy complicado. Empezaré tratando de explicar la estructura básica de un documento.

La primera línea que deberemos incluir tendrá esta forma:

\documentclass[parametro1,parametro2,parametro3…]{tipo_documento}

En tipo_documento incluiremos alguno de éstos:

  • book: con esto lograremos un estilo de libro, vendrá dividido en partes (\part), capítulos (\chapter) y secciones (\section).
  • article: crearemos un documento al estilo de los artículos científicos. Es uno de los más usados junto al tipo anterior (book). Permite las divisiones en secciones (\section) y subsecciones (\subsection), y, a pesar de lo que he leído por ahí, también permite la división en partes (\part). Con este tipo podremos escribir prácticamente todos los documentos que necesitemos.
  • report: es parecido a article, pero cuenta además con una división en capítulos (\chapter) y que la numeración de tablas y fórmulas va por capítulos y no consecutivamente por todo el documento.
  • letter: este estilo sería el adecuado para escribir cartas.
  • slides: para presentar diapositivas.

Existen otros tipos como pueden ser proc, ltxdoc, ltxguide o minimal, pero no creo que necesitéis usarlos nunca, así que no contaré nada de ellos.

En el apartado de parámetros, introduciremos algunos como éstos:

  • Tamaño de letra, escrito en puntos, por ejemplo: 12pt.
  • Clase de papel, como puede ser a4paper.
  • Lenguaje del documento. Idioma en el que está escrito el documento (spanish, english,…).
  • Impresión por una o dos caras, con los parámetros oneside o twoside, respectivamente.

Después de esta línea, incluiremos varias de la forma: \usepackage{}. La cabecera usepackage nos permite incluir paquetes que proporcionan diferentes utilidades de LaTeX. La sintaxis consiste en indicar el paquete que queremos cargar y las opciones con que queremos hacerlo:

\\usepackage[opcion1,opcion2,opcion3]{nombre_paquete}

Algunos ejemplos pueden ser:

\\usepackage[spanish]{babel} % Paquete para poner el idioma en español.
\\usepackage[latin1]{inputenc} % Caracteres con acentos.
\\usepackage{latexsym} % Símbolos.
\\usepackage{graphicx} % Inclusión de gráficos.
\\frenchspacing %Espacia el contenido de una forma más elegante.

Como ya habréis observado, “%” sirve para introducir comentarios en el texto.

Después de esto, con la inclusión de todos los paquetes que mejor se adecúen a nuestras necesidades, incluiremos otras cabeceras, como:

\\title{} % Dentro de las llaves, incluiremos en cada una lo que corresponda
\\author{} %título, autor y fecha
\\date{}

\pagestyle{} % define el estilo de página. Éste puede ser:

  • plain : opción por defecto, coloca el número de página abajo y centrado, además no pone encabezado.
  • headings: coloca toda la información en el encabezado (nombre de capítulo, sección o subsección y página), dejando el pie de página vacío.
  • empty: dejaremos vacíos tanto el encabezado como el pie de página.
  • myheadings: similar a headings, pero nos da la posibilidad de añadir información propia a través de los comandos markboth y markright

Estas opciones para controlar el estilo de la página son muy limitadas. Si queremos obtener un diseño más completo podemos emplear el paquete fancyhdr. Para emplear el paquete incluiremos la cabecera \usepackage{fancyhdr}, y en la opción pagestyle incluiremos lo siguiente: fancy: sirve para que LaTeX emplee el paquete fancyhdr en el formateo de la cabecera y pie de página del documento.

Con todo esto, podríamos tener ya una plantilla tipo para la edición de nuestros documentos. La emplearemos para hacer el típico programa de “Hola Mundo”:

\\documentclass[a4paper,12pt]{article}
\\usepackage[spanish]{babel}
\\usepackage[latin1]{inputenc} % Caracteres con acentos.
\\usepackage{latexsym} % Símbolos
\\usepackage{graphicx} % Inclusión de gráficos.
\\usepackage{float}
\\frenchspacing

\\title{Hola Mundo}
\\author{ {Oficina de Software Libre}\\\\
{Escuela Universitaria Politécnica}}
\\date{Mayo, 2.005} % La doble contrabarra "\\\\" introduce una nueva línea

\\pagestyle{headings} % páginas con encabezado básico

\\begin{document}

\\maketitle % Se crea una especie de portada
\\newpage
\\tableofcontents % Se genera un índice de materias
\\newpage
\\listoffigures % Índice de figuras
\\newpage % Saltamos de página
\\listoftables % Índice de tablas
\\newpage
\\section{Hola Mundo}
Hola Mundo

\\end{document} % Evidentemente, no tiene ningún sentido tener
% todos esos índices para un "Hola Mundo", pero es sólo un
% ejemplo de plantilla :)

Si escribís y compiláis ese documento, veréis que genera 5 folios en formato .pdf.

Bueno, no sé si he sido muy chapas, si es así lo siento. Espero que haya alguien a quien le haya interesado lo que he escrito aquí. Puede venir bien en algún momento, ¿no? Un saludito.

P.D. Quizá he dado demasiadas cosas por supuestas, pero lo único que se necesita para escribir LaTeX, es un editor de texto cualquiera (nano, vim, joe…) y los paquetes básicos de LaTeX: tetex-extra y los paquetes tetex-base y tetex-bin. Creo que no me equivoco al decir que con estos tres paquetes es suficiente para echar a andar con LaTeX. El documento, deberemos guardarlo con extensión .tex, luego se compila con el comando “latex archivo.tex” y después podemos sacar la salida en formato .pdf, por ejemplo, con el comando ” pdfelatex archivo.tex”. “

Métodos en Java

Domingo, 10 diciembre 2006

Todo programa (clase) en Java, tiene una serie de elementos fijos. Un elemento que aparece siempre será el método. Cada clase Java es casi seguro que tendrá algún método. Resaltar aquí que si tenemos un programa en que una clase llame a otras, la clase desde donde empiece la ejecución, y sólo está, será la que lleve el método main, el cual ya quedó más o menos explicado aquí.

Explicaremos ahora algunas cosas más sobre los métodos en Java.

A la hora de definirlo la sintaxis será la siguiente:

tipo_devuelto nombre_metodo(parametros){
sentencias;

sentencias;

....

}

Así, si tenemos un método que se llame calculaMinimo, que nos devuelva a otro sitio el valor minimo de tres enteros que le pasemos escribiremos:

int calculaMinimo(int n1, int n2, int n3){

sentencias;

...
return minimo;
}

Con lo cual, le estaremos pasando tres enteros y devolviendo en la última línea el valor mínimo calculado al lugar donde haya sido llamado el método calculaMinimo. Un método puede recibir y devolver cualquier clase de dato:

  • Datos primitivos: puede ser cualquiera de los ocho tipos primitivos (Boolean, true o false, Char, Enteros, byte, short, int, long o Reales, float y double).
  • Puede llevar antes del nombre la palabra void en vez del tipo de dato devuelto si no queremos que devuelva ningún valor.
  • Además pueden devolver objetos. La condición es que el objeto devuelto debe corresponderse con la clase citada en la definición del método o con una subclase de la misma. Esto ya lo entenderemos cuando hablemos de qué son clases y cuando sepamos qué es la herencia.

Una cosa más a tener en cuenta es que si no definimos el método como void deberemos tener obligatoriamente una sentencia return para devolver un dato dentro del método.

En Java, podemos definir objetos con el mismo nombre que reciban distintos tipos de datos. Esto se llama sobrecargar los métodos. Eso sí los métodos deben devolver la misma clase de dato (si uno es void, el que se llame igual también será void, aunque uno y otro reciban parámetros distintos). Esto nos permite en un programa, si un método tiene que hacer algo en concreto con un tipo de dato y luego queremos hacerlo con otro tipo de dato, definir dos veces el mismo método y cambiar sólo el argumento que le pasamos, no definir dos métodos con dos nombres distintos.

Una clase especial de métodos son los constructores, que son métodos que se llaman igual que la clase en la que están definidos, y que básicamente se usan para inicializar nuevos objetos del tipo de la clase (idea de objeto y clase).

Sonido en Debian con dmix

Viernes, 1 diciembre 2006

¡Hola!

Llevaba un tiempo bastante mosqueado con mi Debian por el tema del sonido. El problema me resultaba un tanto extraño y, hasta donde llegan mis conocimiento, no tenia solución: los sonidos de sistema así como los del escritorio (Gnome, of course) y los de diversos programas (amsn, gaim, beep-media-player) funcionaban bien, pero tenía ahí la espinita clavada. Al reproducir un vídeo, en cualquier formato, podía visualizarlo, pero no escucharlo. Totalmente frustrante. A continuación explicaré como se consigue solucionar este molesto tema.

Probé mil soluciones, lo primero instalé los codecs de Windows, el paquete w32codecs, porque tengo un montón de vídeos en .avi o .wmv, del repositorio de Debian Marillat. Nada. Reconfiguré alsa. Nada. Instalé paquetes adicionales de alsa, como alsaplayer-esd. Nada. Imposible mil búsquedas en San google, que todo lo sabe, pues tampoco. Nothing de nothing. Encontré una “solución”, que no era tal, ya que conseguía sonido en los reproductores de vídeo a costa de matar el esd y quedarme sin sonido en Gnome :(. Desesperado y hasta los cojones de todo, acudí a Mario, mi “gurú” particular, jeje. En cuanto se lo expliqué dijo la palabra clave: dmix.

¿Qué es dmix? Quizá a alguien le pase lo que a mí, que le dicen dmix y es como si no le dijeran nada. El dmix es un plugin que tiene alsa para solucionar el siguiente problema, el que tienen algunas tarjetas de sonido (la mía es una de ellas, una Realtek ALC850 integrada en placa compatible con AC97) al no poder reproducir varias salidas de sonido a la vez. Lo que hace dmix es generar un mezclador virtual, por así decirlo, resolviendo el problema mediante software.

Veamos lo que hay que hacer para usarlo. Lo primero matar el esd e instalar un par de librerias:

# killall esd
# apt-get install libesd-alsa0 alsa-oss

Una vez hecho esto, ya podemos hacer uso de dmix. Para ello editamos el fichero /etc/asound.conf. Yo por ejemplo no lo tenia, pero lo creé y funcionó también.

# software mixing across all apps.

#

# http://alsa.opensrc.org/index.php?page=AlsaSharing

# http://alsa.opensrc.org/index.php?page=DmixPlugin
pcm.dmix0 {

type dmix

ipc_key 219345 # any unique number here

slave {

pcm "hw:0,0"

period_time 0

buffer_time 0

period_size 2048 # jm: much smoother than 1024/8192!

buffer_size 32768

rate 48000

}

bindings {

0 0 # from 0 => to 0

1 1 # from 1 => to 1

}

}

pcm.dsp0 {

type plug

slave.pcm "dmix0"

}

# this makes native ALSA apps default to using dmix

pcm.!default {

type plug

slave.pcm "dmix0"

}

ctl.dsp0 {

type hw

card 0

}

ctl.!default {

type hw

card 0

}

Editamos por último el fichero /etc/libao.conf, y le cambiamos por esto:

default_driver=alsa

Con esto, si Debian ya sabe que debe usar alsa como servidor de sonido. ¡Así de fácil y yo volviéndome loco dos semanas!

Sólo me resta agradecer a Mario la idea, y a Leandro Mocek y su genial post, que seguí al pie de la letra para arreglar el engorro que suponía el no poder un vídeo sin tener que perder el sonido en el sistema.

Números en LaTeX

Lunes, 27 noviembre 2006

Últimamente, tenemos que hacer una serie de trabajos en Electrónica de Potencia, en los que a causa de la aparición de numerosas fórmulas matemáticas he decidido emplear LaTeX. En este artículo intentaré dar una explicación útil sobre cómo introducir expresiones matemáticas en nuestro documento. Parto de la base de que quien lea el post sabe cómo crear un documento en este sistema de formateo de texto. Si alguien no lo tiene claro, puede mirar aquí. Bueno, al tema.

Para introducir una expresión matemática, deberemos definir un entorno matemático. Eso lo hacemos introduciendo el símbolo dólar $. Así abrimos el entorno, para cerrarlo introuciremos otro. Veamos ejemplos para entenderlo.

  • Una expresión con exponentes. Teclearemos el código:
    $ V^2 = $

    Y sacaremos una V elevada al cuadrado. Nótese que en éste y en todos los ejemplos, los símbolos “$” son nuestro delimitador del entorno matemático, no el código que crea la expresión.

  • Una expresión con exponentes y subíndices. Sigamos con el ejemplo anterior:
    $ V_{oef}^2 = $

    Ahora tendremos la V elevada al cuadrado y con oef de subíndice.
    Nota: para incluir exponentes y subíndices con más de un carácter tendremos que meterlos entre llaves, por eso el exponente, que es sólo un 2, va sin llaves y el subíndice, de tres caracteres sí va entre llaves.

  • Una fracción y el número pi.
    $ V_{oef}^2 = \\frac{1}{2\\pi} $

    Después de \frac, metemos entre llaves primero el numerador y luego en las otras dos llaves el denominador.

  • Una integral. Añadimos código:
    $ V_{oef}^2 = \\frac{1}{2\\pi}*\\int{sen x dx} $

    Hummm… no está mal, pero también es cierto que necesitaremos poner los límites a nuestras integrales, vamos a ello.

    $ V_{oef}^2 = \\frac{1}{2\\pi}*\\int_\\frac{\\pi}{2}^\\pi{sen x dx} $

    Con esto hacemos que nuestra integral sea entre pi/2 y pi.

  • Por último metamos una raíz cuadrada.
    $ V_{oef}^2 = \\frac{1}{2\\pi}*\\int_\\frac{\\pi}{2}^\\pi\\sqrt{{sen x}dx} $

    Y con esto conseguimos la integral de la raiz del sen x.

Por último decir que podemos incluir otros símbolos típicos como letras griegas o equivalencias matemáticas de una forma muy parecida y muy sencilla también. Además todo esto, aunque parece que no, es casi automático en cuanto lo hacemos un par de veces. Sólo es cuestión de habituarse un poquillo. Quería subir un fichero fuente en tex y su resultado en pdf, pero WordPress no me deja así que os dejo una captura de pantalla que con eso no se me queja. Ya sé que esto es denunciable por apología del cutrismo pero no pienso escribir todo el código que sería un fichero .tex. Si queréis ver algo más de cómo se hace esto os creáis un fichero .tex, lo compiláis y lo pasáis a .pdf.

Resultado

Creo que con esto ya es suficiente, porque si me pongo a introducir todos los símbolos y operadores que se pueden usar en matemáticas no acabo. Éstos son una muestra de los que uso habitualmente. Un saludo. Dudas al de siempre.

¿Sabes hacia dónde vas?

Martes, 21 noviembre 2006

¡Hola! Hoy quería hablar sobre la inquietud más destacable que estoy teniendo desde que empecé a buscar información sobre Java: lo diversificada y totalmente desorganizada que he encontrado la información. En cada web, libro o manual que he consultado lo único que está siempre (o casi siempre) en el mismo sitio es el “HolaMundo.java”. Lo demás cada uno como mejor le parece, unos siguen explicando los tipos de datos, otros que si hacen paquetes, ficheros .jar y demás cosillas (que creo que no es lo más adecuado para novatos), otros empiezan viendo constructores y lectura de datos por teclado… Ante todo este caos, mi pregunta es ¿por dónde cojones empiezo? ¿Qué opción es la mejor?

Respuesta sincera, aun habiendo escogido un método, no lo sé. Yo contaré lo que he hecho, y espero que a alguien le sirva de ayuda y de consejo de novato a novato. Después de mucho buscar y de mucho encontrar, me he decidido por hacerme con un libro, titulado “Aprendiendo Java en 21 días”. La razón principal es que no me gusta leer del monitor durante horas, prefieriendo una lectura en papel. ¿Es un buen libro? No está mal, no creo que sea la ostia, pero sirve para empezar, que no es poco. Quizá se pierda un poco en ejemplos estúpidos, pero vienen bien para entender conceptos que quizá en apuntes más técnicos sean más complicados de leer.

Creo que en el fondo lo principal y más importante es elegir. No creo que haya una opción más acertada que otra, puesto que esto depende mucho de cómo nos guste hacer las cosas a cada uno, simplemente es importante centrarse en algo. Ponernos una referencia que nos haga avanzar siguiendo una determinada estructura, porque, hablo ahora a título personal, yo me pierdo de no ser así. Me empiezo a ir de un manual a otra web, de ahí a un libro que he sacado de la biblioteca y al final siento que me estanco, que no adquiero una idea global de cómo se hacen las cosas en Java. Por eso considero que es importante el quedarse con algo en concreto. De todas formas, luego tenemos toda esa información, en cantidades ingentes, para completar cosas que no quedan claras y conceptos que no logramos entender con la explicación que nos ofrece nuestra referencia.

Por tanto en mi opinión este es el mejor camino para sumergirnos en un nuevo lenguaje de programación, aunque bueno, también supongo que será más fácil para el que ya sepa algún otro lenguaje. Yo he saltado de saber algo de C a Java, y creo que hay varios pasos intermedios que he pasado por alto, por lo que entiendo que pueda no haber nadie que se haya perdido tanto como yo. De todas formas, como todo lo que escribo aquí, espero que pueda serle útil a alguien. Un saludo.

Sun libera Java

Martes, 14 noviembre 2006

Bueno, a estas alturas no creo que quede nadie que no lo sepa, pero Sun ha liberado Java y varios de sus componentes, y como uno no va a ser menos, pues también hay que decirlo.

Una noticia así, creo que siempre debe ser bien recibida por todos los que defendemos el software libre y todo lo que implica esta filosofía. Nunca será negativo desde nuestro punto de vista, aunque se sea parte del sector crítico con este lenguaje de programación. Yo poco tengo que decir (hago mi PFC en Java), simplemente me parece perfecto.

Como no creo que nada de lo que diga aporte algo nuevo al tema os dejo los enlaces más interesantes a artículos relacionados.

Discusión en barrapunto

Diego Calleja

Error500

Y por supuesto, el anuncio oficial de Sun, aunque estoy vago y no he sido capaz de ponerme a leerlo (está en inglés).