Problemas extraños de alineación en longtable

Problemas extraños de alineación en longtable

He escrito algunos entornos para formatear casos de uso. Por alguna razón, tengo problemas extraños de alineación en mi archivo longtable. Creo que hay un marcador de posición invisible ahí que lo estropea todo, pero después de varias horas y después de eliminar todos los espacios innecesarios, no puedo encontrarlo.

Aquí están mis entornos:

\newenvironment{ucflowofevents}{%
\newcommand{\event}[1]{\item{##1}}%
\begin{enumerate}
}{%
\end{enumerate}
}

\newenvironment{ucentryconditions}{%
\newcommand{\cond}[1]{\item{##1}}%
\begin{itemize}
}{%
\end{itemize}
}

\newenvironment{ucexitconditions}{%
\newcommand{\cond}[1]{\item{##1}}%
\begin{itemize}
}{%
\end{itemize}
}

\newenvironment{ucrequirements}{%
\newcommand{\req}[1]{\item{##1}}%
\begin{itemize}
}{%
\end{itemize}
}

\newenvironment{pcusecase}[1]{%
    \newcommand{\row}[3][\hline]{##2 & ##3 \\ ##1}
    \newcolumntype{L}{>{\vspace{-1.0\baselineskip}\flushleft\arraybackslash}p{4cm}}%
    \newcolumntype{R}{>{\vspace{-1.0\baselineskip}\raggedright\arraybackslash}b{10cm}}%
    \newcommand{\giveninitactors}{REQUIRED!!!}%
    \newcommand{\givenevents}{REQUIRED!!!}%
    \newcommand{\givencommswith}{}%
    \newcommand{\givenentries}{}%
    \newcommand{\givenexits}{}%
    \newcommand{\givenreqs}{}%
    \newcommand{\initactors}[1]{\gdef\giveninitactors{##1}}%
    \newcommand{\commswith}[1]{\gdef\givencommswith{##1}}%
    \newcommand{\events}[1]{\gdef\givenevents{\begin{ucflowofevents}##1\end{ucflowofevents}}}%
    \newcommand{\entries}[1]{\gdef\givenentries{\begin{ucentryconditions}##1\end{ucentryconditions}}}%
    \newcommand{\exits}[1]{\gdef\givenexits{\begin{ucexitconditions}##1\end{ucexitconditions}}}%
    \newcommand{\reqs}[1]{\gdef\givenreqs{\begin{ucrequirements}##1\end{ucrequirements}}}%
    \let\givencommswith\empty%
    \let\givenentries\empty%
    \let\givenexits\empty%
    \let\givenreqs\empty%
    \centering%
    \begin{longtable}{|LR|}\hline %
        \row{Use Case:}{#1}
}{%
        \row{Initiating Actors:}{\giveninitactors}%
        \ifx\givencommswith\empty\else \row[]{Communicates With:}{\givencommswith} \fi %\hline %
        \hline\row{Flow of Events:}{\givenevents} %
        \ifx\empty\givenentries\else \row{Entry Conditions:}{\givenentries} \fi %
        \ifx\empty\givenexits\else \row{Exit Conditions:}{\givenexits} \fi %
        \ifx\empty\givenreqs\else \row{Quality Requirements:}{\givenreqs} \fi%
    \end{longtable}%
}

Los primeros cuatro simplemente establecen listas para el flujo de eventos, las condiciones de entrada y salida y los requisitos de calidad. Pero pcusecaseconfigura el longtable.

Observe las \newcolumntypedefiniciones:

    \newcolumntype{L}{>{\vspace{-1.0\baselineskip}\flushleft\arraybackslash}p{4cm}}%
    \newcolumntype{R}{>{\vspace{-1.0\baselineskip}\raggedright\arraybackslash}b{10cm}}%

Lo que realmente quiero es que ambos estén alineados en la parte superior, pero especifiqué bpara la columna de la derecha (R) porque exagera lo que sucede. Aquí está mi caso de uso:

\begin{pcusecase}{TestUseCase}%
    \initactors{Rider, Admin}%
    \commswith{GPSService}%
    \events{\item{Event 1}%
                    \item{Event 2}}%
    \entries{\cond{Entry Condition 1}%
                     \cond{Entry Condition 2}}%
    \exits{\cond{Exit Condition 1}%
                 \cond{Exit Condition 1}}%
    \reqs{\req{Requirement 1}%
                \req{Requirement 2}
                \req{Requirement 3}}%
\end{pcusecase}

lo que da esta salida:

¿Alineado arriba a la izquierda? ¿Alineado abajo a la derecha?

Observe que para las primeras tres filas, las celdas de la derecha están alineadas hacia abajo como deberían estar, pero para las filas restantes, las celdas de la izquierda están alineadas hacia abajo y las celdas de la derecha están alineadas hacia arriba.

Si especifico que la izquierda debe estar alineada hacia abajo y la derecha hacia arriba con

    \newcolumntype{L}{>{\vspace{-1.0\baselineskip}\flushleft\arraybackslash}b{4cm}}%
    \newcolumntype{R}{>{\vspace{-1.0\baselineskip}\raggedright\arraybackslash}p{10cm}}%

Entiendo esto:

¿Alineado arriba a la izquierda? ¿Alineado abajo a la derecha?

La izquierda está de alguna manera alineada arriba y la derecha alineada abajo, más o menos. El más extraño, y probablemente el que le dará una pista a alguien, es cuando especifico que ambos deben estar alineados hacia abajo y obtengo esto:

¿Qué carajo?

En las tres versiones, la alineación en las tres celdas superiores izquierdas no cambió. He estado mirando durante horas. Necesito algunos ojos nuevos sobre esto. Tu ayuda es muy apreciada...

Respuesta1

A continuación se muestra una demostración de cómo funcionan las opciones de alineación vertical estándar:

\documentclass{article}
\usepackage{tikz}
\begin{document}
  \newcommand\demobox[1]{%
  \fbox{%
    \begin{minipage}[#1]{.25\textwidth}
      \tikz[baseline=(n.base)]{%
        \node (n) [inner sep=0pt, outer sep=0pt, text width=\linewidth] {Top};
        \draw [red] (n.west |- n.base) -- (n.east |- n.base);}
      \par
      This is a box with some content which should be longer than can be accommodated on one line.
      \par
      \tikz[baseline=(n.base)]{%
        \node (n) [inner sep=0pt, outer sep=0pt, anchor=base, text width=\linewidth] {Bottom};
        \draw [red] (n.west |- n.base) -- (n.east |- n.base);}
    \end{minipage}}}
\demobox{t}
\demobox{b}
\demobox{c}
\end{document}

alineaciones

Las líneas rojas marcan las líneas de base de la primera y última línea de cada uno minipage. Debido a que el primero está alineado con ty el segundo con b, la línea base de la primera línea del primero y la línea base de la línea final del segundo están alineadas. ( cestá ahí solo para comparar).

Lo mismo ocurre si la alineación es con la línea base de una línea de texto normal:

This is a line of regular text across the page. Here we go\dots\par
and some text \demobox{t}
and some more \demobox{b}\par

alineaciones con el texto

La otra complicación es que enumeratelos entornos, de forma predeterminada, incluyen espacios verticales antes del primer elemento y después del último:

\documentclass{article}
\begin{document}
  \fbox{%
    \parbox[t]{.25\textwidth}{%
      \begin{enumerate}
        \item Item
        \item Item
        \item Item
      \end{enumerate}}} and here is the line of text.
  \fbox{%
    \parbox[t]{.25\textwidth}{%
      Top line of text.\par Next line.\par Bottom line.}}

  \fbox{%
    \parbox[b]{.25\textwidth}{%
      \begin{enumerate}
        \item Item
        \item Item
        \item Item
      \end{enumerate}}} and here is the line of text.
  \fbox{%
    \parbox[b]{.25\textwidth}{%
      Top line of text.\par Next line.\par Bottom line.}}
\end{document}

alineamientos de enumeración

información relacionada