표 형식에서 이전 줄이 끝났는지 확인하는 방법은 무엇입니까?

표 형식에서 이전 줄이 끝났는지 확인하는 방법은 무엇입니까?

환경 에 있는 경우 tabular이전 줄이 (로) 끝났는지 어떻게 확인할 수 있습니까 \\?

\hline새 줄의 시작 부분에만 추가하거나 다른 작업을 수행하고 싶을 수도 있습니다 .

이전에 추가하면 \\원치 않는 추가 빈 줄이 추가될 수 있습니다.

따라서 질문은 \clearpagevs. 와 비교하여 vs. \newpage에 대해서도 유사한 명령이 있는지 여부입니다 .tabular \???\\

답변1

다음은 를 사용하여 뒤에 있는지 확인하는 tabular newine 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}

편집하다:데이비드 칼라일 역언급했다, -type 열을 사용하는 \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

\\이것이 라텍스가 마지막 행의 끝에서 a를 무시할 수 있는 이유의 핵심입니다 .

유일한 문제는 이전 행을 다음으로 끝내면 마치 '~' \crcr로 끝나는 것처럼 보이지만 대부분의 경우 동일한 결과가 나온다는 것입니다.\cr\\

관련 정보