
A4 용지에 직사각형 격자(5행, 4열)를 만들려고 합니다. 모든 셀의 크기는 5cm x 5cm입니다. 이를 위해 코드에서 볼 수 있듯이 테이블을 사용합니다. 이 테이블은 왼쪽과 위쪽으로 약간 이동하여 종이에 맞을 수 있습니다. 셀의 크기는 고정되어 있으며 \makecell 명령을 사용하여 생성된 그림이나 여러 줄의 텍스트와 같은 내용과 독립적으로 유지되어야 합니다. 내 시도가 제공되었지만 셀 높이에는 작동하지 않으며 계속 변경됩니다. 내가 도대체 뭘 잘못하고있는 겁니까?
안부 인사, 디미트리
\documentclass[12pt, a4paper]{article}
\usepackage{amsmath}
\usepackage{pdfpages}
\usepackage{array}
\usepackage{makecell}
\graphicspath{{./}{./Pictures/}}
\renewcommand{\arraystretch}{0}
\renewcommand{\tabcolsep}{0cm}
\begin{document}
\thispagestyle{empty}
\begin{table}
\begin{center}
\vspace*{-2.5cm}
\hspace*{-3.25cm}
\begin{tabular}{|m{5cm}|m{5cm}|m{5cm}|m{5cm}|}
\hline
\centering{\includegraphics[width=4.5cm,height=4.5cm,keepaspectratio]{Stanford_Bunny}} &
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6} &
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6} &
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6}\\[5cm]
\hline
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6} &
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6} &
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6} &
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6}\\[5cm]
\hline
\makecell{\textbf{line 1}} &
\makecell{\textbf{line 1}} &
\makecell{\textbf{line 1}} &
\makecell{\textbf{line 1}}\\[5cm]
\hline
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6} &
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6} &
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6} &
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6}\\[5cm]
\hline
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6} &
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6} &
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6} &
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6}\\[5cm]
\hline
\end{tabular}%
\end{center}
\end{table}
\end{document}
출력은 다음과 같습니다(마지막 열도 잘못 동작함).
답변1
두 가지 가능성
아래에서는 두 가지 다른 솔루션을 설명합니다.
calstable
답변 끝에 a에 대한 코드를 포함했지만 두 솔루션 모두 출력이 동일하므로 결과 그림은 포함하지 않았습니다.
표와 친구들
첫 번째 가능성은 표 형식에 보이지 않는 5cm의 수직 눈금이 있는 '유령' 열을 추가하는 것입니다. 이를 수행하여 새 열 유형을 정의했습니다. 너비가 같은 4개의 열이 있으므로 이 열도 새로운 열 유형으로 정의했습니다. 그런 다음 콘텐츠를 수평으로 한 위치에만 중앙에 배치하는 데 필요한 명령을 추가할 수 있습니다.
테이블 형식의 너비에 유의하세요.아니다20cm. 다섯 개의 수직선의 너비를 더해야 합니다(arrayrulewidth
기준은 0.4pt,즉2점). 따라서 메시지를 제거하려면 MWE의 왼쪽 및 오른쪽 여백을 변경해야 했습니다 overfull hbox
. 높이는 비슷하며 25cm + 6 입니다 arrayrulewidth
.
20190807 편집:표 형식이 용지 크기(여백 아님)를 기준으로 페이지의 수직 및 수평 중앙에 위치하도록 하기 위해 다음을 기반으로 하는 새로운 환경에 표를 포함시켰습니다.Andrew Swann의 답변은 여기에 있습니다..
0.9cm
댓글에서 언급한 행 사이의 간격을 정확하게 맞추기 위해 '속임수'를 사용하여 \hline\hline
행 사이에 이중 수직 규칙( )을 추가하고 두 규칙 사이의 간격을 0.9cm minus two \arrayrulewidth
s로 늘렸습니다. 첫 페이지가 비어 있는 것을 방지하기 위해 모든 문서 여백을 0cm
.
\usepackage[left=0cm,top=0cm,right=0cm,bottom=0cm]{geometry} % Zero margin
\setlength\doublerulesep{\dimexpr(0.9cm-(2\arrayrulewidth))} % Increased space between horizontal rules
표 형식을 부동 환경으로 묶었지만 이 유형의 전체 페이지 표 형식은 부동해서는 안 됩니다.
\documentclass[12pt, a4paper, demo]{article}
\usepackage{amsmath}
\usepackage{pdfpages}
\usepackage{array, hhline}
\usepackage[left=0cm,top=0cm,right=0cm,bottom=0cm]{geometry}
%% This code is modified from Andrew Swann's code in this answer
%% https://tex.stackexchange.com/a/154736/9632
\newenvironment{preface}{\clearpage\setlength{\topskip}{0pt}%
\newgeometry{margin=0cm,ignoreheadfoot}%
\thispagestyle{empty}%
\centering%
\vspace*{\fill}\nointerlineskip\small}%
{\vspace*{\fill}\clearpage\restoregeometry}
%\graphicspath{{./}{./Pictures/}}
\renewcommand{\arraystretch}{0}
\renewcommand{\tabcolsep}{0cm}
\newcolumntype{M}{>{\centering\arraybackslash}m{5cm}}
\newcolumntype{F}{>{\rule{0pt}{5cm}}m{0pt}}
\begin{document}
\pagestyle{empty}
\begin{preface}
\setlength\doublerulesep{\dimexpr(0.9cm-(2\arrayrulewidth))}
\begin{tabular}{*{4}{|M}|@{}F@{}}
\hline
\includegraphics[width=4.5cm,height=4.5cm,keepaspectratio]{bunny}
&
\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6
&
\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6
&
\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6
&\\
\hline\hline
\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6
&
\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6
&
\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6
&
\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6
&\\
\hline\hline
\textbf{line 1}
&
\textbf{line 1}
&
\textbf{line 1}
&
\textbf{line 1}
&\\
\hline\hline
\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6
&
\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6
&
\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6
&
\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6
&\\
\hline\hline
\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6
&
\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6
&
\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6
&
\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6
&\\
\hline
\end{tabular}\par
\end{preface}
\end{document}
안정된
내 생각에는 열과 행의 너비와 높이를 수정하기가 매우 쉽기 때문에 cals 패키지가 이러한 유형의 표 형식에 더 적합합니다. 그러나 '가상' 선을 사용하는 것은 cal에서도 작동합니다.
행 사이의 0.9cm 공간은 해당 높이의 추가 행으로 쉽게 고정됩니다.
cals에서 이 명령 \cals@setpadding{<wd>}
은 와 동일 tabcolsep
하지만 행 사이의 거리도 설정합니다. 규칙(테두리)은 환상이기 때문에 패딩을 로 설정했습니다 0.3pt
. 그러면 셀 내부가 5cmx5cm가 됩니다.
이 명령은 \alignC
셀 내용을 수평으로 중앙에 배치하고 다른 정렬 명령으로 꺼질 때까지 작동합니다. \vfil
셀 내용을 세로로 가운데에 배치하고 명령을 정의하여 전역적으로 설정할 수 있습니다 cals@AtBeginCell
. 즉 , 또는 를 \def\cals@AtBeginCell{\vfil}
사용할 수도 있습니다 . \newcommand*
\renewcommand*
코드의 주석도 살펴보세요.
\documentclass[12pt, a4paper, demo]{article}
\usepackage{amsmath}
\usepackage{pdfpages}
\usepackage{cals}
\usepackage[left=0cm,top=0cm,right=0cm,bottom=0cm]{geometry}
%% This code is modified from Andrew Swann's code in this answer
%% https://tex.stackexchange.com/a/154736/9632
\newenvironment{preface}{\clearpage\setlength{\topskip}{0pt}%
\newgeometry{margin=0cm,ignoreheadfoot}%
\thispagestyle{empty}%
\vspace*{\fill}\nointerlineskip\small}%
{\vspace*{\fill}\clearpage\restoregeometry}
%\graphicspath{{./}{./Pictures/}}
\begin{document}
\pagestyle{empty}
\begin{preface}
\begin{calstable}[c] % Centre the calstable
% Defining 4 equal columns
\colwidths{{5cm}{5cm}{5cm}{5cm}
}
% Set up the tabular
\makeatletter
\def\cals@framers@width{0.3pt} % Outside frame rules, reduce if the rule is too heavy
\def\cals@framecs@width{0.03pt}
\def\cals@bodyrs@width{0.3pt}
\cals@setpadding{0.3pt} % To ensure that the inside of cell is 5 cm
\def\cals@cs@width{0.3pt} % Inside rules, reduce if the rule is too heavy
\def\cals@rs@width{0.3pt}
\def\rb{\ifx\cals@borderR\relax % Right Border switch (off-on)
\def\cals@borderR{0.0pt}
\else \let\cals@borderR\relax\fi}
\def\lb{\ifx\cals@borderL\relax % Left Border switch (off-on)
\def\cals@borderL{0.0pt}
\else \let\cals@borderL\relax\fi}
\def\cals@AtBeginCell{\vfil} % Vertically centre content of all cell
%\def\cals@AtEndCell{}
%% Start of tabular body, no header row
% R1B1
\brow
\alignC\cell{\includegraphics[width=4.5cm,height=4.5cm,keepaspectratio]{bunny}}
\cell{\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6}
\cell{\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6}
\cell{\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6}
\ht\cals@current@row=5cm
\erow
% R2B1b %% Fore creating space between rows
\brow
\lb\rb\cell{} % \lb&\rb - shortcuts for tuning off left and right border this row
\cell{}
\cell{}
\cell{}\lb\rb % use shortcuts for tuning on left and right border for next row
\ht\cals@current@row=0.9cm
\erow
%R3B2
\brow
\cell{\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6}
\cell{\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6}
\cell{\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6}
\cell{\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6}
\ht\cals@current@row=5cm
\erow
% R4B2b
\brow
\lb\rb\cell{}
\cell{}
\cell{}
\cell{}\lb\rb
\ht\cals@current@row=0.9cm
\erow
%R5B3
\brow
\cell{\textbf{line 1}}
\cell{\textbf{line 1}}
\cell{\textbf{line 1}}
\cell{\textbf{line 1}}
\ht\cals@current@row=5cm
\erow
% R6B3b
\brow
\lb\rb\cell{}
\cell{}
\cell{}
\cell{}\lb\rb
\ht\cals@current@row=0.9cm
\erow
%R7B4
\brow
\cell{\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6}
\cell{\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6}
\cell{\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6}
\cell{\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6}
\ht\cals@current@row=5cm
\erow
% R8B4b
\brow
\lb\rb\cell{}
\cell{}
\cell{}
\cell{}\lb\rb
\ht\cals@current@row=0.9cm
\erow
%R2B5
\brow
\cell{\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6}
\cell{\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6}
\cell{\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6}
\cell{\textbf{line 1} \par line 2 \par line 3 \par line 4 \par line 5 \par line 6}
\ht\cals@current@row=5cm
\erow
\end{calstable}\par
\end{preface}
\end{document}
답변2
11시간의 검색 끝에 공유하고 싶은 해결책을 얻었습니다. 코드는 따라하기 매우 쉽고 핵심은 테이블 내부의 미니페이지 환경입니다. 이 미니페이지 설정에서는 첫 번째 열만 사용하는 것이 트릭이지만 나중에 수행한 작업을 쉽게 인식할 수 있도록 모든 셀에 대해 이를 유지했습니다. 또한 사용할 수 있는 "페이지 공간"의 여백은 원하는 대로 그리드에 맞게 조정됩니다. 아마도 이 반복적인 미니페이지 타이핑을 수행하는 더 짧은 방법이 있을 것 같지만 이것이 어떻게 수행되는지는 모르겠습니다. 이것이 누군가에게 도움이 되기를 바랍니다.
안부 인사, 디미트리
\documentclass[12pt, a4paper]{article}
\usepackage{amsmath}
\usepackage{pdfpages}
\usepackage{array}
\usepackage{makecell}
\usepackage[export]{adjustbox}
\usepackage[left=0.5cm,top=2.35cm,right=0.5cm,bottom=2.35cm]{geometry}
\graphicspath{{./}{./Pictures/}}
\renewcommand{\arraystretch}{0}
\renewcommand{\tabcolsep}{0cm}
\begin{document}
\pagestyle{empty}
\begin{table}[h!]
\begin{tabular}{|m{5cm}|m{5cm}|m{5cm}|m{5cm}|}
\hline
\begin{minipage}[c][5cm][c]{5cm}
\begin{center}
\includegraphics[width=4.5cm,height=4.5cm,keepaspectratio]{Bunny}
\end{center}
\end{minipage} &
\begin{minipage}[c][5cm][c]{5cm}
\begin{center}
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6}
\end{center}
\end{minipage} &
\begin{minipage}[c][5cm][c]{5cm}
\begin{center}
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6}
\end{center}
\end{minipage} &
\begin{minipage}[c][5cm][c]{5cm}
\begin{center}
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6}
\end{center}
\end{minipage}\\
\hline
\begin{minipage}[c][5cm][c]{5cm}
\begin{center}
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6}
\end{center}
\end{minipage} &
\begin{minipage}[c][5cm][c]{5cm}
\begin{center}
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6}
\end{center}
\end{minipage} &
\begin{minipage}[c][5cm][c]{5cm}
\begin{center}
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6}
\end{center}
\end{minipage} &
\begin{minipage}[c][5cm][c]{5cm}
\begin{center}
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6}
\end{center}
\end{minipage}\\
\hline
\begin{minipage}[c][5cm][c]{5cm}
\begin{center}
\makecell{\textbf{line 1}}
\end{center}
\end{minipage} &
\begin{minipage}[c][5cm][c]{5cm}
\begin{center}
\makecell{\textbf{line 1}}
\end{center}
\end{minipage} &
\begin{minipage}[c][5cm][c]{5cm}
\begin{center}
\makecell{\textbf{line 1}}
\end{center}
\end{minipage} &
\begin{minipage}[c][5cm][c]{5cm}
\begin{center}
\makecell{\textbf{line 1}}
\end{center}
\end{minipage}\\
\hline
\begin{minipage}[c][5cm][c]{5cm}
\begin{center}
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6}
\end{center}
\end{minipage} &
\begin{minipage}[c][5cm][c]{5cm}
\begin{center}
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6}
\end{center}
\end{minipage} &
\begin{minipage}[c][5cm][c]{5cm}
\begin{center}
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6}
\end{center}
\end{minipage} &
\begin{minipage}[c][5cm][c]{5cm}
\begin{center}
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6}
\end{center}
\end{minipage}\\
\hline
\begin{minipage}[c][5cm][c]{5cm}
\begin{center}
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6}
\end{center}
\end{minipage} &
\begin{minipage}[c][5cm][c]{5cm}
\begin{center}
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6}
\end{center}
\end{minipage} &
\begin{minipage}[c][5cm][c]{5cm}
\begin{center}
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6}
\end{center}
\end{minipage} &
\begin{minipage}[c][5cm][c]{5cm}
\begin{center}
\makecell{\textbf{line 1} \\ line 2 \\ line 3 \\ line 4 \\ line 5 \\ line 6}
\end{center}
\end{minipage}\\
\hline
\end{tabular}
\end{table}
\end{document}
이제 출력은 다음과 같습니다.