
\newenvironment 내에서 tabular*를 사용하여 다음 표를 작성했습니다. 잘 작동했지만 한 열에 텍스트 줄 바꿈을 선호합니다. 테이블은 "유령" 셀을 사용하여 내가 원하는 것을 달성합니다. 즉, 다른 세 개의 (보이는) 열이 모두 남기는 사용 가능한 너비를 모두 차지하는 하나의 열을 갖는 것입니다. 즉, 세 개의 열은 기록된 텍스트에 따라 최소 너비를 취하고 다른 열은 열은 나머지 너비를 사용합니다. 전체 너비는 \linewidth이므로 테이블 형식 대신 테이블 형식*을 사용했습니다. MWE:
\documentclass{article}
\begin{document}
\begin{tabular*}{\linewidth {|c|l@{\extracolsep{\fill}}cc@{\extracolsep{0pt}}|r|r|}
minwidth& remaining width &&& minw & minw\\
x & x &&& x & x
\end{tabular*}
\end{document}
이제 내가 원하는 것은 두 번째로 보이는 열("큰" 열)의 텍스트 줄바꿈입니다. 동적으로 조정되는 열로 인해 parbox나 p-like 열을 사용할 수 없습니다. 텍스트 줄 바꿈을 허용하기 위해 이 너비의 parbox를 포함하기 위해 두 번째 열의 열 너비를 읽는 방법을 모르겠습니다.
tabular*가 현재 셀의 너비를 저장하는 길이를 읽을 수 있습니까? 아니면 길이를 지정하지 않고 일부 단락 상자를 포함하는 방법이 있습니까?
[1] 때문에 금기를 사용할 수 없습니다. tabularx에서도 작동할 수 있지만 새 환경에 포함할 때 enddef를 재정의해야 합니다. Tabularx에서는 지금은 기억나지 않는 또 다른 문제가 나타났지만, 필요한 것이 tabular*로는 불가능하다면 tabularx로 다시 시도하겠습니다.
[2]를 읽었습니다. lrbox를 사용하여 열 정의에 '<' 및 '>'를 사용하면 상자의 크기가 결과 열의 크기가 아니라 내용의 크기로 제한되기 때문에 문제가 해결되지 않습니다.
또한 나중에 차이를 취하고 \tabcolsep 및 \arrayrulewidth를 빼기 위해 zref-savepos를 사용하여 두 열의 x 위치를 저장해 보았습니다.
\documentclass{article}
\usepackage{zref-savepos}
\newlength{\auxleng}
\newsavebox{\auxbox}
\newenvironment{auxenviron}
{\begin{lrbox}{\auxbox}}{\end{lrbox}\usebox{\auxbox}\global\setlength{\auxleng}{\wd\auxbox}}
\begin{document}
\begin{tabular*}{\linewidth}{|c|l@{\extracolsep{\fill}}cc@{\extracolsep{0pt}}|r|r|}
minw & \zsaveposx{XX}remaining width &&& \zsaveposx{XXX} minw & minw\\
x & \setlength{\auxleng}{\zposx{XXX} sp}\addtolength{\auxleng}{-\zposx{XX} sp}\parbox{\auxleng}{asdf}&&& x & x
\end{tabular*}
\end{document}
...하지만 문서가 컴파일될 때마다 tabular*가 두 번째 열의 위치를 다시 계산하기 때문에 두 번째 참조가 오른쪽으로 이동합니다.
답변1
패키지가 tabularx
도움이 될 수 있습니다. 을 사용하고 있으므로 및 }를 \newenvironment
사용할 수 없습니다 . 왜냐하면 then이 숨겨져 있기 때문입니다. 그러나 작동 합니다.\begin{tabularx}
\end{tabularx
\end{tabularx}
\tabularx
\endtabularx
\documentclass{article}
\usepackage{tabularx}
\newenvironment{mytab}{%
\tabularx
}{%
\endtabularx
}
\begin{document}
\noindent
\begin{mytab}{\linewidth}{|c|X|r|}
minwidth& remaining width minw & minw\\
x & x & x\\
\end{mytab}
\end{document}
패키지를 통해 환경의 내용을 포착하는 것도 가능합니다 environ
(물건에 대한 일부 제한 사항 \verb
). 아마도 테이블 끝에 신비한 물건을 더 쉽게 추가할 수 있을 것입니다.
\documentclass{article}
\usepackage{tabularx}
\usepackage{environ}
\NewEnviron{mytab}{%
\expandafter\mytabaction\expandafter{\BODY}%
}
\newcommand{\mytabaction}[1]{%
\begin{tabularx}#1\end{tabularx}%
}
\begin{document}
\noindent
\begin{mytab}{\linewidth}{|c|X|r|}
minwidth& remaining width minw & minw\\
x & x & x\\
\end{mytab}
\end{document}
답변2
이미 제안한 대로 답변을 tabularx
드리겠습니다 tabulary
. 또한 표를 전체 너비로 지정하는 경우(이 방법 중 하나를 사용하여) 단락 들여쓰기로 들여쓰기되지 않았는지 확인해야 합니다. 그렇지 않으면 줄이 너무 꽉 차게 됩니다. 따라서 \noindent
여기서는 0으로 설정한 대로 테이블 앞에 or를 접두어로 붙여야 합니다 \parindent
.
tabular*
또한 추가 열이 필요하지 않은 경우 기존 열에 대해 추가 열 sep를 전환할 수 있습니다. 유일한 약간 까다로운 부분은 세로 눈금자를 다시 삽입하는 것입니다.
\documentclass{article}
\usepackage{tabulary}
% http://tex.stackexchange.com/questions/87097/is-it-possible-to-make-an-underfull-tabulary-spread-out/87543#87543
\makeatletter
\def\foo#1\def\TY@ratio#2#3!!{
\def\TY@checkmin{#1%
\@tempdima\TY@ratio\TY@tablewidth
\ifdim\@tempdima>\dimexpr\TY@linewidth+\hfuzz\relax
\advance\@tempdima-\TY@linewidth
\Gscale@div\@tempb\@tempdima\TY@tablewidth
\@tempdimb\TY@ratio\p@
\advance\@tempdimb-\@tempb\p@
\edef\TY@ratio{\strip@pt\@tempdimb}%
\fi
#3}}
\expandafter\foo\TY@checkmin!!
\makeatother
\begin{document}
\parindent0pt
\begin{tabular*}{\linewidth}
{|c|l@{\extracolsep{\fill}}cc@{\extracolsep{0pt}}|r|r|}
minwidth& remaining width &&& minw & minw\\
x & x &&& x & x
\end{tabular*}
\bigskip
\begin{tabular*}{\linewidth}
{|c|l!{\extracolsep{\fill}}>{\vline\kern\tabcolsep\hfill}r!{\extracolsep{0pt}}|r|}
minwidth& remaining width & minw & minw\\
x & x & x & x
\end{tabular*}
\bigskip
\begin{tabulary}
{\linewidth}{|c|L|r|r|}
minwidth& remaining width & minw & minw\\
x & x & x & x
\end{tabulary}
\end{document}
답변3
\documentclass{article}
\usepackage{tabularx}
\begin{document}
\noindent\rule{\linewidth}{1pt}
\bigskip\noindent
\begin{tabularx}{\linewidth} {|c|Xcc|r|r|}\hline
minwidth& remaining width &&& minw & minw\\
x & x &&& x & x
\end{tabularx}
\end{document}