0

I was just doing a project in sharelatex and from one time to another the white spaces shown in the figure appeared, the white spaces are the ones between subsections.

enter image description here

I've spent 20 minutes trying to trace the problem but have not managed to remove it, I'm a newbie in latex and I really don't know what could have caused it. The things that I have added (apart from the text, images and other things) are.

\usepackage{xcolor}

To use colors that color package couldn't handle.

\usepackage{moresize}

To use \ssmal

\definecolor{mygreen}{rgb}{0,0.6,0}
\definecolor{mygray}{rgb}{0.5,0.5,0.5}
\definecolor{mymauve}{rgb}{0.58,0,0.82}

\lstset{ %
  backgroundcolor=\color{white},   % choose the background color; you must add \usepackage{color} or \usepackage{xcolor}
  basicstyle=\footnotesize,        % the size of the fonts that are used for the code
  breakatwhitespace=false,         % sets if automatic breaks should only happen at whitespace
  breaklines=true,                 % sets automatic line breaking
  captionpos=b,                    % sets the caption-position to bottom
  commentstyle=\color{mygreen},    % comment style
  deletekeywords={...},            % if you want to delete keywords from the given language
  escapeinside={\%*}{*)},          % if you want to add LaTeX within your code
  extendedchars=true,              % lets you use non-ASCII characters; for 8-bits encodings only, does not work with UTF-8
  frame=single,                    % adds a frame around the code
  keepspaces=true,                 % keeps spaces in text, useful for keeping indentation of code (possibly needs columns=flexible)
  keywordstyle=\color{blue},       % keyword style
  language=Octave,                 % the language of the code
  morekeywords={*,...},            % if you want to add more keywords to the set
  numbers=left,                    % where to put the line-numbers; possible values are (none, left, right)
  numbersep=5pt,                   % how far the line-numbers are from the code
  numberstyle=\tiny\color{mygray}, % the style that is used for the line-numbers
  rulecolor=\color{black},         % if not set, the frame-color may be changed on line-breaks within not-black text (e.g. comments (green here))
  showspaces=false,                % show spaces everywhere adding particular underscores; it overrides 'showstringspaces'
  showstringspaces=false,          % underline spaces within strings only
  showtabs=false,                  % show tabs within strings adding particular underscores
  stepnumber=0,                    % the step between two line-numbers. If it's 1, each line will be numbered
  stringstyle=\color{mymauve},     % string literal style
  tabsize=1,                       % sets default tabsize to 2 spaces
  title=\lstname                   % show the filename of files included with \lstinputlisting; also try caption instead of title
}

\lstdefinestyle{customc}{
  belowcaptionskip=1\baselineskip,
  breaklines=true,
  frame=L,
  xleftmargin=\parindent,
  language=C,
  showstringspaces=false,
  basicstyle=\footnotesize\ttfamily,
  keywordstyle=\bfseries\color{green!40!black},
  commentstyle=\itshape\color{purple!40!black},
  identifierstyle=\color{blue},
  stringstyle=\color{orange},
}

\lstdefinestyle{customasm}{
  belowcaptionskip=1\baselineskip,
  frame=L,
  xleftmargin=\parindent,
  language=[x86masm]Assembler,
  basicstyle=\footnotesize\ttfamily,
  commentstyle=\itshape\color{purple!40!black},
}

\lstset{escapechar=@,style=customc}

To show source code on my PDF (source).

\setlength{\parindent}{0pt}

To remove the tab globally.

---------------------------- The complete code is here -----------------------------

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Source: http://en.wikibooks.org/wiki/LaTeX/Hyperlinks %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage[english]{babel}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 'dedication' environment: To add a dedication paragraph at the start of book %
% Source: http://www.tug.org/pipermail/texhax/2010-June/015184.html            %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newenvironment{dedication}
{
   \cleardoublepage
   \thispagestyle{empty}
   \vspace*{\stretch{1}}
   \hfill\begin{minipage}[t]{0.66\textwidth}
   \raggedright
}
{
   \end{minipage}
   \vspace*{\stretch{3}}
   \clearpage
}

\setlength{\parindent}{0pt}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Chapter quote at the start of chapter        %
% Source: http://tex.stackexchange.com/a/53380 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeatletter
\renewcommand{\@chapapp}{}% Not necessary...
\newenvironment{chapquote}[2][2em]
  {\setlength{\@tempdima}{#1}%
   \def\chapquote@author{#2}%
   \parshape 1 \@tempdima \dimexpr\textwidth-2\@tempdima\relax%
   \itshape}
  {\par\normalfont\hfill--\ \chapquote@author\hspace*{\@tempdima}\par\bigskip}
\makeatother

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% First page of book which contains 'stuff' like: %
%  - Book title, subtitle                         %
%  - Book author name                             %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Book's title and subtitle
\title{\Huge \textbf{Lenguaje C}  \footnote{This is a footnote.} \\ \huge Conociendo C a fondo \footnote{This is yet another footnote.}}
% Author
\author{\textsc{cursillosonline}\thanks{\url{www.example.com}}}

\begin{document}
\frontmatter
\maketitle

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Auto-generated table of contents, list of figures and list of tables %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\tableofcontents
\mainmatter

%%%%%%%%%%%%%%%%
% NEW CHAPTER! %
%%%%%%%%%%%%%%%%
\chapter{Introduccion}

\section{Estandares del lenguaje}

Desde el desarrollo del lenguaje C, que empezo en 1969 en los laboratorios Bell de AT\&T el lenguaje a sufrido varios cambios, las principales transformaciones, a continuacion se puede ver un resumen de estas.

\subsection{K\&R C}

En 1978, cuando se publico la primera edición de "El Lenguaje de Programación C", esta fue considerada durante muchos años como una especificacion informal del lenguaje C, ya que en un principio no existia un estandar para el lenguaje, muchos programadores se referian a esta version de C como K\&R C. 

\subsection{ANSI/ISO C}

Esta version propone la primera especificacion formal del lenguaje C, este estandar tambíen es conocido como ANSI C, C89 o C90, y en este estandar se definio el lenguaje C asi como sus bibliotecas estandares. El ANSI C original fue adoptado por el ANSI en 1989 y por la ISO en 1990, de alli vienen los nombres C89 y C90, aunque ambos terminos se refieren a exactamente el mismo lenguaje.

\subsection{C99}

El proceso de la estandarizacion del ANSI C hizo que la especificacion del lenguaje permaneciera estable por un tiempo, pero aun asi el lenguaje continuo bajo revision a finales de la decada del 90, lo que culmino en el estandar C99 que fue adoptado como un estandar ANSI en el año 2000. Este estandar propone nuevas caracteristicas, tales como el uso de funciones inline, nuevos tipos de datos, arreglos de largo variable y soporte para comentarios de una linea, entre otras cosas.

\subsection{C11}

El ultimo estandar a la fecha que remplaza al C99, agrega nuevas funcionalidades, tales como para el soporte de programacion multithread, un mejor soporte Unicode, entre otras cosas.

\section{Creando un programa ejecutable en C}

El proceso de convertir un codigo fuente a un programa ejecutable en C, a grandes razgos, se hace en dos pasos: Compilacion y enlazado, el proceso de compilacion es efectuada por el compilador que toma el codigo fuente y lo convierte a un codigo intermedio (generalmente a lenguaje de maquina en un archivo objeto), y aca es donde entra el enlazador, que combina este archivo compilado resultante de la compilacion con librerias precompiladas para crear el programa ejecutable.

Falta especificar lo del start-up code.

En la siguiente imagen se puede apreciar a grandes razgos el proceso de compilacion y enlazado.

\hfill \break
\includegraphics[width=\textwidth]{complinkc.png}

{\ssmall \textbf{Notas}
\begin{itemize}
\item{En algunos sistemas se debe de ejecutar el compilador y el enlazador separadamente, en otros el compilador automaticamente ejecuta el enlazador.}

\item{El archivo objecto es la traduccion del codigo fuente a lenguaje de maquina, pero no es un programa todavia.}
\end{itemize}}

\section{El primer programa en C}

\begin{lstlisting}
#include <stdio.h>

int main() {
    int num;
    num = 1;

    printf("I am a simple ");
    printf("computer.\n");
    printf("My favorite number is %d.\n", num);

    return 0;
}
\end{lstlisting}

Podemos ver en el codigo varias instrucciones que quizas no se entiendan a primera vista, pero no se preocupen, estas las explicare detalladamente a continuacion. \vspace{\baselineskip}

\textbf{Directiva de preprocesador include} \\
La directiva de preprocesador include incluye en nuestro codigo fuente otro archivo, lo que hace esta directiva es literalmente un copy-paste del archivo especificado a incluir. \vspace{\baselineskip}

{\ssmall \textbf{Nota}: Cuando incluimos archivos de la biblioteca estandar, se incluye informacion acerca de funciones, constantes, macros, entre otras cosas, pero el codigo real se encuentra en una libreria precompilada.} \vspace{\baselineskip}

\textbf{La funcion main} \\
La funcion main es la funcion principal del programa y es por donde se empieza la ejecucion de un programa en C (la gran mayoria de las veces), el int que esta antes de la palabra main nos esta diciendo que la funcion main va a retornar un valor de tipo entero. \vspace{\baselineskip}

Ademas de esto se tienen los parentesis () y las llaves \{\}, los parentesis sirven para definir los argumentos de la funcion main, en este caso no le hemos pasado ningun argumento, pero podriamos hacerlo, por ultimo tenemos las llaves que son para definir el bloque de instrucciones de la funcion main. En general, todas las funciones en C usan las llaves para delimitar el principio y fin de estas. \vspace{\baselineskip}

\textbf{Comentarios} \\
Los comentarios sirven para hacer mas legible el codigo fuente (para otras personas y para uno mismo) de un programa, por lo que son ignorados por el compilador, los comentarios en C se pueden hacer de do formas, una es usando /* */, donde todo lo escrito entre los simbolos /* y */ seran comentarios, ademas de esto tambien se pueden hacer comentarios usando dos slashs seguidos //, en donde todo lo que este escrito al lado derecho de los slashs sera considerado como un comentario hasta el fin de la linea. \vspace{\baselineskip}

{\ssmall \textbf{Nota}: El uso de doble slashs para hacer comentarios es una caracteristica que se definio en el c99.}  \vspace{\baselineskip}

\textbf{Declaraciones} \\
La sentencia \textit{int num;} hace una declaracion (y mas correctamente una definicion) en donde le espicifica al compilador que el programa usara una variable que tendra un identificador (un nombre que identificara a la variable) que en este caso sera num, y que ademas esta variable sera de tipo int (el tipo int en C indica un numero entero). El compilador usara esta infomacion para almacenar de forma adecuada a la variable en la memoria.

Vale la pena mencionar que en contraste con otros lenguaje de programacion, en C es necesario declarar las variables (con su tipo e identificador correspondiente) antes de la ejecucion del programa. \vspace{\baselineskip}

\begin{itemize}
    \item{\textbf{Identificador:} Al momento de elegir un nombre es recomendable usar uno que tenga un significado intuitivo y que uno pueda darse una idea de que para que se va a usar, esto es un principio basico de las buenas practicas de la programacion.
    Ademas de esto, a las variables no se les puede dar cuaquier nombre, sino que hay reglas que seguir, por ejemplo el estandar de C especifica que solo se pueden usar letas (mayusculas o minusculas), numeros y el signo '\_', con la regla de que el primer termino del identificador no puede ser un numero.} \vspace{\baselineskip}

    \textbf{Ejemplo}

\begin{center}
    \begin{tabular}{ | p{5cm} | p{5cm} |}
        \hline
        \textbf{Identificadores validos} & \textbf{Identificadores invalidos} \\ \hline
        camion & 1abc \\ \hline
        juan\_01 & name? \\ \hline
        numero\_estudiantes & dia-semana \\ \hline
    \end{tabular}
\end{center}
\end{itemize}

\end{document}
OiciTrap
  • 171
  • Welcome to TeX.SX! You can have a look at our starter guide to familiarize yourself further with our format. Thank you for posting an example! At the same time, much of your code does not seem to be relevant to the question you're asking here. Please limit the example to code required for your issue to appear. You can have a look at the guide for how to minimalize your code. And, as it stands, your code will not compile. E.g. no \documentclass and missing graphics files. – cfr Dec 17 '14 at 00:06
  • 1
    Well there's your problem: Including of an oversized graphic that won't fit on the current page (\includegraphics[..]{complinkc.png}). Since it won't fit on the page and your issue of \break is not followed by an empty line, TeX want's to put it on the current page. Why not make it float? – Werner Dec 17 '14 at 00:09
  • Yeah, I know, but the part where should be the problem has nothing abnormal (I think), so I guess something somewhere else must generate the white spaces. – OiciTrap Dec 17 '14 at 00:10
  • @Werner You are right, removing the image fixed the problem, I will try your advice then, thanks. – OiciTrap Dec 17 '14 at 00:12
  • 1
    probably http://tex.stackexchange.com/questions/184211/big-space-between-subsection-text-and-graphics/184212#184212 – David Carlisle Dec 17 '14 at 00:13
  • Yep, sorry, \raggedbottom did the job. Thanks guys. – OiciTrap Dec 17 '14 at 00:15
  • Well, I didn't know it was duplicated because my problem was white spaces between subsection and subsection and I didn't see any problem with the space around my graphic, should I delete this post?. – OiciTrap Dec 17 '14 at 00:20
  • no need to delete but we can close as duplicate, thanks for confirming. – David Carlisle Dec 17 '14 at 00:47

0 Answers0