
我正在嘗試在 A4 紙上製作一個矩形網格(5 行,4 列)。所有單元格的尺寸均為 5 公分 x 5 公分。為此,我使用了一個表格,從程式碼中可以看出。這張桌子可以透過向左和向上移動一點來適合紙張。單元格的大小是固定的,並且必須保持獨立於內容,內容可以是使用 \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
兩種可能性
下面,我描述兩種不同的解決方案
我在答案末尾包含了 a 的程式碼calstable
,但由於兩個解決方案的輸出相同,因此我沒有包含結果圖片。
表格和朋友
第一種可能性是在表格中新增一個「虛擬」列,該列具有不可見的 5 公分垂直線。我已經定義了一個新的列類型來執行此操作。由於您有四列寬度相等,因此我也將它們定義為新的列類型。然後我可以添加必要的命令,將內容僅水平居中一處。
請注意表格的寬度不是20 公分。您必須新增五個垂直線的寬度(arrayrulewidth
標準為0.4pt,IE2 分)。因此,我必須更改 MWE 的左右邊距以刪除一條overfull hbox
訊息。高度相似,均為 25 cm + 6 arrayrulewidth
。
編輯20190807:為了確保表格根據紙張尺寸(而不是邊距)在頁面上垂直和水平居中,我已將表格包含在一個新環境中,該環境基於安德魯·斯旺的回答在這裡。
為了在行之間有精確的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 套件更適合這種類型的表格,因為它很容易固定列和行的寬度和高度。然而,使用“幻像”線也適用於 cals。
行與行之間的間距為 0.9 厘米,可透過此高度的附加行輕鬆固定。
在 cals 中,該命令\cals@setpadding{<wd>}
相當於tabcolsep
,但它還設定行之間的距離。由於規則(邊框)是虛擬的,因此我將填充設為0.3pt
,這應該會導致內部的單元格大小為 5cmx5cm。
這些命令\alignC
將單元格內容水平居中,並一直有效,直到被另一個對齊命令關閉為止。\vfil
單元格內容垂直居中,可以透過定義指令cals@AtBeginCell
ie進行全域設定\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}
輸出現在如下圖所示: