内容に関係なく固定サイズの正方形のセルを持つグリッド

内容に関係なく固定サイズの正方形のセルを持つグリッド

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

2つの可能性

以下に2つの異なる解決策を説明します

  1. 表形式を使用すると、配列hhline
  2. パッケージの使用cals

calstable回答の最後にa のコードを含めましたが、両方のソリューションの出力は同じであるため、結果の画像は含めていません。

表形式と友達

最初の可能性は、表に 5 cm の目に見えない垂直線を持つ「ファントム」列を追加することです。これを行うには、新しい列タイプを定義しました。同じ幅の列が 4 つあるため、それらも新しい列タイプとして定義しました。次に、コンテンツを 1 か所だけ水平方向に中央揃えするために必要なコマンドを追加できます。

表の幅に注意してくださいではありません20 cm。5本の縦罫線の幅を追加する必要があります(arrayrulewidth標準は0.4pt、つまり2 pt)。したがって、メッセージを削除するには、MWE の左右の余白を変更する必要がありましたoverfull hbox。高さも同様で、25 cm + 6 ですarrayrulewidth

編集 20190807:表が用紙サイズ(余白ではない)に基づいてページの垂直方向と水平方向の中央に配置されるように、表を新しい環境に囲みました。アンドリュー・スワンの回答はこちら

0.9cmコメントで述べられているように、行間に正確なスペースを確保するために、私は「ズル」をして、\hline\hline行間に二重の垂直罫線 ( ) を追加し、2 つの罫線の間のスペースを0.9cm minus two \arrayrulewidths に増やしました。最初のページが空白になるのを避けるために、すべてのドキュメントの余白を に減らしました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.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}

出力は次のようになります。

ここに画像の説明を入力してください

関連情報