환경 에 있는 경우 tabular
이전 줄이 (로) 끝났는지 어떻게 확인할 수 있습니까 \\
?
\hline
새 줄의 시작 부분에만 추가하거나 다른 작업을 수행하고 싶을 수도 있습니다 .
이전에 추가하면 \\
원치 않는 추가 빈 줄이 추가될 수 있습니다.
따라서 질문은 \clearpage
vs. 와 비교하여 vs. \newpage
에 대해서도 유사한 명령이 있는지 여부입니다 .tabular
\???
\\
답변1
다음은 를 사용하여 뒤에 있는지 확인하는 t
abular n
ewine 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
\\