Mi Propuesta de Estructura de una Tesis Doctoral

English version of this post.
Hace tiempo que quería escribir este post y no había tenido la oportunidad. Por lo general, uno quisiera tener la mayor información posible y disponible para poder estructurar tu documento de la manera deseada. Éste no ha sido mi caso, y en un intento de facilitar las cosas a alguien más en la misma situación, he decidido hacer este escrito. Aprender $\LaTeX$ para escribir todo tipo de documentos ¡es una verdadera delicia! Mas sin embargo no es cosa fácil, aquí pretendo reflejar algunos tips que me han sido útiles para escribir mi documento de tesis doctoral que al final se convirtió en libro y se puede encontrar en el siguiente enlace.

Prácticas

Probablemente estos tips no sean para todas las personas. Recordemos que ante todo mi pasión y ocupación principal es la de programar. Y como programador tengo en la mente algunos conceptos de los cuales no puedo deshacerme fácilmente. Al utilizar $\LaTeX$ estás prácticamente programando, la diferencia es, que al compilar, en vez de ver un programa, página, componente, app, robot o cualquier cosa que estés creando, verás un precioso documento en formato pdf. Aunque en realidad puede ser otro formato, pero al final del día, en éste artículo me refiero a un documento y en específico, un pdf.

Al programar un sistema, me gusta siempre y en la medida de lo posible tener organización en el código. Me gusta separar las piezas del programa en entidades lógicas fácilmente manejables. Ésto mismo he aplicado a la escritura de mi documento doctoral. Y es que al igual que cualquier lenguaje de programación, $\LaTeX$ te permite modular archivos de múltiples formatos en el documento en sí, sin la necesidad de tener todo embebido en un archivo monolítico. Y al hablar de archivos me refiero a múltiples formatos, en mi tesis, he separado archivos de contenido de texto en múltiples niveles, archivos de imágenes, archivos de código, archivos de bibliografía, entre los que puedo pensar por el momento.

Estructura de la Tesis

Más que una tesis, siempre he estado acostumbrado a leer libros y gran parte de las decisiones hechas para escribir una tesis, se basa precisamente, en el formato de los libros que he leído tomando en cuenta la facilidad de lectura, la calidad del contenido, la facilidad de encontrar conclusiones y referencias sobre algo rápidamente, y en general, la experiencia del usuario final. Probablemente la estructura sugerida se parezca más a un libro que a un documento de tesis.

  • Portada
    Para la portada no hay mucho que decir, en gustos se rompen géneros, no hay una manera estándar de hacerla. Por lo cual, se vuelve un tanto un arte y más por el lado de diseño. Lo único a enfatizar es el cumplimiento de incluir toda la información requerida por la universidad.

  • Dedicatoria
    Para mi gusto, esta es una parte breve pero indispensable en el documento. Los estilos varían pero más que buscar una recomendación es buscar la inspiración que dicte las palabras adecuadas que reflejen estos sentimientos.

  • Resumen
    Aunque por lo regular esta sección no es estrictamente necesaria, siempre me ha gustado saber de que se trata un documento especialmente cuando éste es de un tamaño considerable. De cualquier manera, algunos autores advierten no extender demasiado esta sección por la posibilidad de duplicar contenido o desalentar al lector. A mi parecer y como se hace en los artículos de ciencia, siempre es bueno saber de que se trata un documento y sus objetivos antes de sumergirse en su lectura.

  • Prefacio
    Cabe mencionar que esta sección no es estrictamente necesaria pero es de mi agrado el incluirla en la estructura.

  • Agradecimientos
    Espacio para los agradecimientos.

  • Tabla de Contenido
    La típica tabla que muestra el contenido de la tesis.

  • Lista de Figuras
    El común listado de figuras.

  • Listas de Código
    He decidido incluir listados de código para legibilidad y facilidad.

  • Capítulos
    Una de las decisiones importantes de la estructura de una tesis es el diseño en la escritura de capítulos. En recientes fechas, He visto algunas tesis y libros que producen capítulos como unidades independientes en cuanto a bibliografía se refiere, ésto, siempre ha sido de mi agrado ya que es más fácil encontrar las referencias que pertenecen al capítulo que se está leyendo y no tener que irse al final del libro para localizar una referencia. En mi caso, he ido mas allá y he decidido incluir conclusiones por cada capítulo ya que considero que este contenido debería ir incluido en la misma sección del contenido.

  • Conclusiones, Resultados y Trabajo Futuro
    En esta ocasión tanto las conclusiones como las referencias son globales, a diferencia de las conclusiones y referencias de cada capítulo. Con esto se tiene la oportunidad de expresar en un contexto global los resultados y conclusiones a los que se ha llegado.

  • Apéndices
    Listado de apéndices.

Directorios

Ya que se pretende tener todo el contenido de la tesis separado, se ha decidido hacer una separación lógica de acuerdo a la estructura definida, es decir, cada sección contará con su directorio separado y cada directorio contendrá a su vez un directorio hijo para las figuras y otro para los archivos de código. Prácticamente todos los archivos estarán separados e independientes y solo se generará un documento con esta información embebida al momento de compilar la solución.

LaTeX

Una vez teniendo disponible la estructura deseada. Se procede a plasmar el código $\LaTeX$ para construir nuestro documento. A continuación se enlista el archivo principal de código.

thesis.tex

\documentclass[12pt,letterpaper]{report}
 
% the structure file contains all the packages that needs to be included to generate
% the main structure of the document
\include{structure/structure}
 
% Define a new glossary types
\newglossary[glg]{glossary}{gls}{glo}{Glosario}
\newglossary[slg]{symbol}{sym}{sbl}{Lista de Símbolos}
\newglossary[alg]{acronym}{acr}{acn}{Lista de Abreviaturas}
\makeglossaries
 
\include{acronyms/acronyms}  % include acronyms
\include{symbols/symbols}    % include symbols
\include{glossary/glossary}  % include glossary
 
\begin{document}
 
% custom background image command
\AddToShipoutPicture*{\BackgroundLogo}
 
\showboxdepth=-1
 
\include{front/front}
 
\thispagestyle{empty}
\hbox{}\vfill\hbox{}\pagebreak
\setcounter{page}{1}
 
% with this we prevent the paragraph alignment issue
\raggedbottom
 
% first use roman numerals for page numbers
\pagenumbering{roman}
 
% adding custom headers/footers defined above
\noneheads
\nonechapterheads
 
% including sections
\include{dedication/dedication}
\include{abstract/abstract}
\include{preface/preface}
\include{acknowledgments/acknowledgments}
 
% table of contents
\tableofcontents
\newpage % Begins on a new page instead of on the same page as the table of contents
 
% figure listings
\renewcommand\listfigurename{Lista de Figuras}
\listoffigures
\newpage
 
% code listings
\addcontentsline{toc}{chapter}{\lstlistlistingname}
\lstlistoflistings
\newpage
 
% set one blank space between paragraphs in empty line
%\setlength{\parskip}{\baselineskip}
 
% return page numbering to arabic
\pagenumbering{arabic}
 
\chapterheads
\commonheads
 
% including chapters
\include{chapters/1/introduction}
\include{chapters/2/theory}
 
% including appendixes
\begin{appendices}
  \include{appendixes/a/computer_programs}
\end{appendices}
 
% include glossaries
\printglossaries
 
\end{document}

Como se puede observar en el código, se utiliza el comando include de latex para incluir las otras partes del documento desde el archivo de código principal. La misma técnica es usada para los capítulos en donde se agrega el directorio de los archivos de código así como también el directorio de las figuras. También, se agregan los archivos de bibliografía por cada capítulo incluyendo los directorios. De esta manera $\LaTeX$ construye el documento por partes de acuerdo a las definiciones en el código. A continuación se muestra el ejemplo de un capítulo con la definición de imágenes, código y bibliografía.

introduction.tex

\chapter{Introducción}
 
% code and figures paths
\graphicspath{{chapters/1/figures/}}
\lstset{inputpath=chapters/1/code/}
 
\lipsum. \cite{0071548297}
 
\section{Sección}
\lipsum
 
% abreviatura
\gls{fdtd}
 
% glosario
\glspl{debian}
 
\subsection{Subsección}
\lipsum
 
\section{Conclusiones}
\lipsum 
 
\bibliographystyle{unsrt}
\bibliography{chapters/1/introduction}

Compilación

$\LaTeX$ cuenta con múltiples comandos para compilar el código y generar un hermoso documento. Algunos de estos comandos son pdflatex, makeindex, makeglossaries, bibtex, entre otros. Cada uno de estos comandos tiene un mecanismo específico para crear un pdf y puede que requiera varias pasadas para completar la construcción el documento completo. Para documentos sencillos existen varios IDEs populares que te construyen automáticamente el documento seleccionando opciones de configuración de manera gráfica. También es posible definir el flujo de la compilación gráficamente. Un ejemplo sencillo de un IDE que yo personalmente uso y recomiendo es Kile, por supuesto libre, open source y cross platform.

El caso es que aunque se tienen estas poderosas herramientas para definir el proceso de compilación de nuestro documento. Yo en lo personal siempre he preferido tener el control de este proceso y he decidido construir un archivo makefile que contenga los pasos de la compilación de mi documento. No estoy tan seguro de que tanto se utilice hacer un archivo de este tipo pero a mi me ha funcionado bastante bien y por lo cual recomiendo ampliamente. A continuación anexo mi archivo de compilación.

makefile

shell := /bin/bash
curr_date := $(shell /bin/date '+%Y-%m-%d_%H.%M.%S')
 
main_file = "./thesis"
output_file = "./thesis"
 
papers = "../papers"
output_file_papers = "../build/thesis_papers_"$(curr_date)
paper1_name = "ACES_Journal_20150117_v3.pdf"
paper2_name = "APL_101_261902_2012.pdf"
 
#chapters = "chapters/1/introduction" "chapters/2/conclusions"
 
# main entry point
all: aux glossary acronyms symbols bibliography pdf add_papers clean
 
# PDFLaTeX - first pass to generate aux files
aux:
    echo ">>>>> AUX"
    pdflatex -interaction=nonstopmode $(main_file).tex
     
# MakeIndex - generate glossary files
glossary:
    echo ">>>>> GLOSSARY"
    makeindex $(main_file).glo -s $(main_file).ist -t $(main_file).glg -o $(main_file).gls
 
# MakeIndex - generate acronyms files
acronyms:
    echo ">>>>> ACRONYMS"
    makeindex $(main_file).acn -s $(main_file).ist -t $(main_file).alg -o $(main_file).acr
 
# MakeIndex - generate symbols files
symbols: 
    echo ">>>>> SYMBOLS"
    makeindex $(main_file).sbl -s $(main_file).ist -t $(main_file).slg -o $(main_file).sym
 
# BibTex - generate chapters bibliography 
bibliography:
    echo ">>>>> BIBLIOGRAPHY"
    # find name of chapters .tex files, remove extension and execute bibtex on the result
    find ./chapters -type f -name '*.tex' | while read f; do bibtex "$${f%.*}"; done
    #for chapter in $(chapters); do \
    #   bibtex $$chapter; \
    #done
 
# PDFLaTeX - last pass to generate final pdf files
pdf:
    echo ">>>>> PDF"
    pdflatex -interaction=nonstopmode $(main_file).tex
    makeglossaries $(main_file).glo
    makeglossaries $(main_file).acn
    makeglossaries $(main_file).sbl
    pdflatex -interaction=nonstopmode $(main_file).tex
 
# Append papers pdf to generated thesis pdf
add_papers:
    echo ">>>>> ADD_PAPERS"
    pdftk $(output_file).pdf $(papers)/$(paper1_name) $(papers)/$(paper2_name) cat output $(output_file_papers).pdf
 
# cd -; returns to previous dir
clean:
    echo ">>>>> CLEAN";
    # find and remove unneded extension files
    find . -name "*.acn" -o -name "*.acr" -o -name "*.alg" -o -name "*.aux" -o -name "*.glg" -o -name "*.glo" -o -name "*.gls" -o -name "*.idx" -o -name "*.ist" -o -name "*.slg" -o -name "*.sym" -o -name "*.lof" -o -name "*.blg" -o -name "*.bbl" -o -name "*.toc" -o -name "*.sbl" -o -name "*.lol" -type f | xargs rm;

Existen muchas otras consideraciones a tener en cuenta cuando se estructura un documento de tesis doctoral pero la verdad no es mi intención entrar en detalles sobre cada problema que se tuvo que resolver para llegar al documento deseado. En vez de eso, he preparado un ejemplo tipo template el cual puedes explorar y adaptarlo a tus necesidades fácilmente y con suerte te puedas ahorrar un buen porcentaje de las horas que le tuve que invertir para llegar a este resultado. A continuación anexo el archivo del ejemplo y un pdf con el resultado de ejemplo en formato pdf. Por supuesto estos archivos están diseñados para funcionar en Linux.

Archivos de template de ejemplo
pdf_icon

Pdf del template del ejemplo
pdf_icon

¡Enjoy! 😀
-Yohan

Leave a Reply

Your email address will not be published. Required fields are marked *