En una tabla, ¿cómo asegurarse de que la línea anterior haya terminado?

En una tabla, ¿cómo asegurarse de que la línea anterior haya terminado?

Si uno está en un tabularentorno, ¿cómo puede asegurarse de que la línea anterior haya terminado (con \\)?

Es posible que desee agregar \hlineo hacer otras cosas solo al comienzo de una nueva línea.

Si se agrega \\antes, podría agregar una línea vacía adicional no deseada.

Entonces la pregunta es, en comparación con \clearpagevs. \newpage, ¿si existe un comando similar para tabular \???vs. \\?

Respuesta1

A continuación se presenta una macro tabular new ine que verifica si sigue usando . Dado que deja el "token visto" en el flujo de entrada, todas las llamadas concatenadas se ignoran, excepto la última:l\tnl\tnl\@ifnextchar\@ifnextchar\tnl

ingrese la descripción de la imagen aquí

\documentclass{article}

\makeatletter
\newcommand{\tnl}{\@ifnextchar\tnl{}{\\}}
\makeatother

\begin{document}

\begin{tabular}{ l }
  one \\ two
\end{tabular}\quad
\begin{tabular}{ l }
  one \tnl two
\end{tabular}

\bigskip

\begin{tabular}[t]{ l }
  one \\ \\ two
\end{tabular}\quad
\begin{tabular}[t]{ l }
  one \tnl \tnl two
\end{tabular}

\bigskip

\begin{tabular}[t]{ l }
  one \\ \\ \\ two
\end{tabular}\quad
\begin{tabular}[t]{ l }
  one \tnl \tnl \tnl two
\end{tabular}

\end{document}

Esto elimina la especificación de argumento opcional que acompaña \\. No estoy seguro de si eso es necesario.

Respuesta2

Sólo para ilustrar la sugerencia que hice enun comentario:

% My standard header for TeX.SX answers:
\documentclass[a4paper]{article} % To avoid confusion, let us explicitly 
                                 % declare the paper format.

\usepackage[T1]{fontenc}         % Not always necessary, but recommended.
% End of standard header.  What follows pertains to the problem at hand.

\newcommand*{\ensureLineHasEnded}{\ifvmode \else \expandafter \\\fi}
\newcommand*{\NLhline}{\ensureLineHasEnded\hline}



\begin{document}

\noindent
\begin{tabular}{|l|}
    \hline
    A one-column \texttt{tabular}, just for demo purposes.  \\
    \NLhline
    It uses both vertical and horizontal rules (arrggh\ldots!).  \\
    \NLhline
    But some of the \verb|\\|~commands are missing\ldots
    \NLhline
    \ldots yet the horizontal rules are typeset normally.  \\*[6pt]
    \NLhline
    The \verb|\ensureLineHasEnded| can take the same optional arguments\ldots
    \ensureLineHasEnded*[6pt]\hline
    \ldots as the \verb|\\|~command.
    \NLhline
    Moreover, it works as expected when used at the end of the \texttt{tabular}.
    \ensureLineHasEnded[9pt]
\end{tabular}\par

\end{document}

Editar:Como David Carlisleha comentado, la \ifvmodeprueba no funciona si pse utilizan columnas de tipo -, porque TeX también está en modo vertical en estas columnas. Tenga en cuenta que, más precisamente, TeX esinternomodo vertical tanto dentro pde columnas de tipo como entre las líneas de una alineación (El libro de texto, pag. 282), por lo que una \ifinnerprueba complementaria tampoco ayudaría. Una distinción que sí funcionaen situaciones simplesse basa en el nivel de grupo actual, que se puede consultar mediante la primitiva e-TeX \currentgrouplevel.

El siguiente código es sólo una prueba de concepto: no tiene mucho sentido perfeccionarlo a menos que conozca el contexto preciso en el que se utilizará.

% My standard header for TeX.SX answers:
\documentclass[a4paper]{article} % To avoid confusion, let us explicitly 
                                 % declare the paper format.

\usepackage[T1]{fontenc}         % Not always necessary, but recommended.
% End of standard header.  What follows pertains to the problem at hand.

\makeatletter

\@ifdefinable\@tabular@group@level{\newcount\@tabular@group@level}
\newcommand*\ensureLineHasEnded{%
    \ifnum \currentgrouplevel>\@tabular@group@level
        % % Diagnostics:
        % \count@ \currentgrouplevel
        % \typeout{Inserting \protect\\ at line \number\inputlineno,
        %     since \number\count@\space > \number\@tabular@group@level}%
        \expandafter \\%
    \fi
}
\newcommand*\saltAwayLevel{%
    \noalign{%
        \global \@tabular@group@level
            \numexpr \currentgrouplevel -\@ne \relax
        % % Diagnostics:
        % \typeout{\number\@tabular@group@level}
    }%
}

\makeatother

\newcommand*{\NLhline}{\ensureLineHasEnded\hline}



\begin{document}

With \texttt{l}~columns:
\begin{center}
    \begin{tabular}{|l|}
        \saltAwayLevel
        \hline
        A one-column \texttt{tabular}, just for demo purposes.  \\%
        \NLhline
        It uses both vertical and horizontal rules (arrggh\ldots!).  \\
        \NLhline
        But some of the \verb|\\|~commands are missing\ldots
        % \typeout{\number\currentgrouplevel}%
        \NLhline
        \ldots yet the horizontal rules are typeset normally.  \\*[6pt]
        \NLhline
        The \verb|\ensureLineHasEnded| can take the same optional arguments\ldots
        \ensureLineHasEnded*[6pt]\hline
        \ldots as the \verb|\\|~command.  \\
        \NLhline
        Moreover, it works as expected when used at the end of the \texttt{tabular}.
        \ensureLineHasEnded[9pt]
    \end{tabular}\par
\end{center}

\bigbreak

With \texttt{p}~columns:
\begin{center}
    \begin{tabular}{|p{.9\linewidth}|}
        \saltAwayLevel
        \hline
        A one-column \texttt{tabular}, just for demo purposes.  \\%
        \NLhline
        It uses both vertical and horizontal rules (arrggh\ldots!).  \\
        \NLhline
        But some of the \verb|\\|~commands are missing\ldots
        % \typeout{\number\currentgrouplevel}%
        \NLhline
        \ldots yet the horizontal rules are typeset normally.  \\*[6pt]
        \NLhline
        The \verb|\ensureLineHasEnded| can take the same optional arguments\ldots
        \ensureLineHasEnded*[6pt]\hline
        \ldots as the \verb|\\|~command.  \\
        \NLhline
        Moreover, it works as expected when used at the end of the \texttt{tabular}.
        \ensureLineHasEnded[9pt]
    \end{tabular}\par
\end{center}

\end{document}

Puede descomentar los comandos de diagnóstico para obtener información adicional sobre lo que está sucediendo.

Respuesta3

Principalmente puedes usar la primitiva TeX \crcrpara lograr esto. \crcractúa como \cra menos que el comando anterior fuera \cren cuyo caso no hace nada.

Ésta es la razón fundamental por la que el látex puede ignorar a \\al final de la última fila.

El único inconveniente es que si terminas la fila anterior con \crcrentonces es como si terminara con \cren lugar de hacerlo, \\pero en la mayoría de los casos esto viene a ser lo mismo.

información relacionada