I use xgalley
in the example below to format the page layout.
In order to keep the "header" and "first line of body text" together, I use needspace
, requesting at least the availability of 2\baselineskip
. You might want to change this slightly, depending on your layout and how the height of \xrightarrow
spans vertically, but the principle is sound.

\documentclass{article}
\usepackage{xgalley,amsmath,amssymb,needspace}
\usepackage{lipsum,geometry}% Just for this example
\geometry{showframe,paperheight=25\baselineskip}
% http://river-valley.zeeba.tv/media/conferences/tug-2015/0302-Joseph-Wright/
\ExplSyntaxOn
\cs_new_eq:NN \SetAbsMargins \galley_margins_set_absolute:nn % left, right
\cs_new_eq:NN \SetRelMargins \galley_margins_set_relative:nn % left, right
\cs_new_eq:NN \SetAllShape \galley_parshape_set_multi:nnnN % Normal, left, right, resume
\cs_new_eq:NN \SetOneShape \galley_parshape_set_single:nnnN % Normal, left, right, resume
\cs_new_eq:NN \CutoutLeft \galley_cutout_left:nn % Normal, indents
\cs_new_eq:NN \CutoutRight \galley_cutout_right:nn % Normal, indents
\cs_new_eq:NN \True \c_true_bool
\cs_new_eq:NN \False \c_false_bool
\ExplSyntaxOff
\newcommand{\Separador}{%
\noindent\hfill$\ast~\ast$\hfill\mbox{}%
}
\newenvironment{EntradaDiario}[6]{{%
\par
\Needspace{2\baselineskip}
\hspace*{-3em}% Indent into margin
%% Header section -----------------------------------------------------------------
{\footnotesize \mbox{\textit{#6} : #2 $\xrightarrow{#3~\text{km.}}$
#5.}\hfill\makebox[1.6cm][r]{\textit{#4~km.}}}
\par\nobreak
%% Body of the diary for one day: -------------------------------------------------
\hspace*{-3em}\textbf{#1~}$\rightarrowtail$~\ignorespaces
}}{\unskip\par\nobreak\Separador\par\medskip}
\setlength{\parindent}{0pt}
\AtBeginDocument{%
\SetAbsMargins{3em}{0pt}
}
\begin{document}
\begin{EntradaDiario}{Title}{Location1}{10}{20}{Location2}{Date}
\lipsum[7]
\end{EntradaDiario}
\begin{EntradaDiario}{Title}{Location1}{10}{20}{Location2}{Date}
\lipsum[7]
\end{EntradaDiario}
\begin{EntradaDiario}{Title}{Location1}{10}{20}{Location2}{Date}
\lipsum[7]
\end{EntradaDiario}
\begin{EntradaDiario}{Title}{Location1}{10}{20}{Location2}{Date}
\lipsum[7]
\end{EntradaDiario}
\begin{EntradaDiario}{Title}{Location1}{10}{20}{Location2}{Date}
\lipsum[7]
\end{EntradaDiario}
\begin{EntradaDiario}{Title}{Location1}{10}{20}{Location2}{Date}
\lipsum[7]
\end{EntradaDiario}
\begin{EntradaDiario}{Title}{Location1}{10}{20}{Location2}{Date}
\lipsum[7]
\end{EntradaDiario}
\begin{EntradaDiario}{Title}{Location1}{10}{20}{Location2}{Date}
\lipsum[7]
\end{EntradaDiario}
\begin{EntradaDiario}{Title}{Location1}{10}{20}{Location2}{Date}
\lipsum[7]
\end{EntradaDiario}
\begin{EntradaDiario}{Title}{Location1}{10}{20}{Location2}{Date}
\lipsum[7]
\end{EntradaDiario}
\begin{EntradaDiario}{Title}{Location1}{10}{20}{Location2}{Date}
\lipsum[7]
\end{EntradaDiario}
\begin{EntradaDiario}{Title}{Location1}{10}{20}{Location2}{Date}
\lipsum[7]
\end{EntradaDiario}
\begin{EntradaDiario}{Title}{Location1}{10}{20}{Location2}{Date}
\lipsum[7]
\end{EntradaDiario}
\begin{EntradaDiario}{Title}{Location1}{10}{20}{Location2}{Date}
\lipsum[7]
\end{EntradaDiario}
\begin{EntradaDiario}{Title}{Location1}{10}{20}{Location2}{Date}
\lipsum[7]
\end{EntradaDiario}
\end{document}
You'll also see that I've converted EntradaDiaro
to be an environment rather than a macro. It made more sense since it may contain (multi-)paragraph text.
scrextend
and theaddmargin
environment? – Johannes_B Sep 3 '15 at 17:18