表形式で、前の行が終了したことをどのように確認すればよいですか?

表形式で、前の行が終了したことをどのように確認すればよいですか?

環境内にいる場合、前の行が ( で)tabular終了していることをどのように確認できますか?\\

\hline新しい行の先頭にのみを追加したり、他の操作を実行したりしたい場合があります。

前に何かを追加すると\\、不要な空行が追加される可能性があります。

そこで疑問なのは、\clearpagevs.と比較して、 vs.\newpageにも同様のコマンドがあるかどうかです。tabular \???\\

答え1

以下は、 が後に続くかどうかをチェックする、abular ew ine マクロを導入します。はt入力nストリームlに「覗かれたトークン」を残すので、 から まで連結されたものは、最後のものを除いてすべて無視されます。\tnl\tnl\@ifnextchar\@ifnextchar\tnl

ここに画像の説明を入力してください

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

これにより、 に付随するオプションの引数指定が削除されます\\。それが必要かどうかはわかりません。

答え2

私が提案したことを例証するためにコメント:

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

編集:デビッド・カーライル述べた\ifvmodeテストは機能しませんpなぜなら、これらの列でもTeXは垂直モードになっているからです。より正確には、TeXは内部垂直モード両方内側p、 - 型の列の内側と配置の行間の両方で使用できます (TeXbook について、p. 282)、補足\ifinnerテストも役に立たない。単純な状況では現在のグループ レベルに基づいており、e-TeX プリミティブを使用して照会できます\currentgrouplevel

次のコードは単なる概念実証です。コードが使用される正確なコンテキストがわからない限り、コードを改良してもあまり意味がありません。

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

診断コマンドのコメントを解除すると、何が起こっているかについての追加情報を取得できます。

答え3

ほとんどの場合、これを実現するには TeX プリミティブを使用できます\crcr。は、前のコマンドが でない限り のよう\crcrに動作しますが、その場合は何も実行されません。\cr\cr

\\これが、LaTeX が最終行の末尾のa を無視できる理由の核心です。

唯一の問題は、前の行を で終了した場合、ではなく\crcrで終了したかのようになることですが、ほとんどの場合、これは同じ結果になります。\cr\\

関連情報