Em uma tabela, como ter certeza de que a linha anterior terminou?

Em uma tabela, como ter certeza de que a linha anterior terminou?

Se alguém estiver em um tabularambiente, como pode ter certeza de que a linha anterior terminou (com \\)?

Pode-se querer adicionar \hlineou fazer alguma outra coisa apenas no início de uma nova linha.

Se alguém adicionar \\antes, isso poderá adicionar uma linha vazia adicional indesejada.

Portanto , a questão é, em comparação com \clearpagevs. \newpage, se existe um comando semelhante para tabular \???vs.\\

Responder1

A seguir, é apresentada uma macro tabular new ine que verifica se ela é seguida pelo uso de . Como deixa o "token espreitado" no fluxo de entrada, os concatenados chamados são todos ignorados, exceto o último:l\tnl\tnl\@ifnextchar\@ifnextchar\tnl

insira a descrição da imagem aqui

\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}

Isso remove a especificação de argumento opcional que acompanha o arquivo \\. Não tenho certeza se isso é necessário.

Responder2

Apenas para ilustrar a sugestão que fiz emum comentário:

% 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 Carlislecomentou, o \ifvmodeteste não funciona se pcolunas do tipo - forem usadas, porque o TeX também está no modo vertical nessas colunas. Observe que, mais precisamente, TeX éinternomodo vertical tanto dentro pde colunas do tipo quanto entre as linhas de um alinhamento (O TeXbook, pág. 282), portanto um \ifinnerexame complementar também não ajudaria. Uma distinção que funcionaem situações simplesé baseado no nível atual do grupo, que pode ser consultado por meio da primitiva e-TeX \currentgrouplevel.

O código a seguir é apenas uma prova de conceito: não faz sentido refiná-lo, a menos que você saiba o contexto preciso no qual ele será usado.

% 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}

Você pode descomentar os comandos de diagnóstico para obter informações adicionais sobre o que está acontecendo.

Responder3

Principalmente você pode usar o primitivo TeX \crcrpara conseguir isso. \crcrage como \crse o comando anterior fosse, \crnesse caso, não faz nada.

Esta é a razão pela qual o látex pode ignorar a \\no final da linha final.

o único problema é que, se você terminar a linha anterior com \crcrentão, é como se tivesse terminado com, \crem vez de \\, mas na maioria dos casos isso resulta na mesma coisa.

informação relacionada