矩阵定位大于边距

矩阵定位大于边距

我正在处理的文档中有一张表格,它非常复杂,我尝试使用 来制作它pgf matrix of nodes。但是,最终得到的矩阵对于页面来说有点太大了。

我可以接受它稍微超出边距,因为缩小它可能会让它更难阅读。但让它超出边距就不行了偏离中心。所以我一直在尝试将其重新定位到页面的中心。但是,我常用的方法在这里毫无用处:[xy]shift 不起作用,我尝试将其中心锚定到节点,current page.center但无济于事。

那么,如何定位对于页面来说过大的矩阵?

MWE 如下:

\documentclass{article}
\usepackage{tikz}
\usepackage{pgf}
\usetikzlibrary{matrix}

\begin{document}

\begin{tikzpicture}
  \matrix [matrix of nodes,
      nodes={
        text depth=4em,
        text height=5em,
        minimum width=10em,
        draw
      },
      row sep=-\pgflinewidth,
      column sep=-\pgflinewidth,
    ]
  {
    A & B & C & D \\
    A & B & C & D \\
    A & B & C & D \\
    A & B & C & D \\
  };
\end{tikzpicture}

\end{document}

答案1

您可以定义一个新的环境:

\documentclass{article}
\usepackage[pass,showframe]{geometry} % just to show the margins

\usepackage{tikz}
\usetikzlibrary{matrix}

\newenvironment{xcenter}
 {\par\setbox0=\hbox\bgroup\ignorespaces}
 {\unskip\egroup\noindent\makebox[\textwidth]{\box0}\par}

\begin{document}

\begin{xcenter}
\begin{tikzpicture}
  \matrix [matrix of nodes,
      nodes={
        text depth=4em,
        text height=5em,
        minimum width=10em,
        draw
      },
      row sep=-\pgflinewidth,
      column sep=-\pgflinewidth,
    ]
  {
    A & B & C & D \\
    A & B & C & D \\
    A & B & C & D \\
    A & B & C & D \\
  };
\end{tikzpicture}
\end{xcenter}

\end{document}

在此处输入图片描述

答案2

此方法使用堆叠命令将过宽框堆叠在空参数之上。其成功的关键在于\def\useanchorwidth{T}它告诉堆栈引擎通过锚点定义堆栈的宽度,而不是堆叠在锚点上的内容。由于锚点是空参数,因此堆栈宽度为 0pt,并且排版时不会出现居中问题,这样它就会溢出到两个边距中。

\documentclass{article}
\usepackage{tikz}
\usepackage{pgf}
\usetikzlibrary{matrix}
\usepackage{stackengine}
\begin{document}
\newsavebox\toowide
\setbox0=\hbox{%
\begin{tikzpicture}
  \matrix [matrix of nodes,
      nodes={
        text depth=4em,
        text height=5em,
        minimum width=10em,
        draw
      },
      row sep=-\pgflinewidth,
      column sep=-\pgflinewidth,
    ]
  {
    A & B & C & D \\
    A & B & C & D \\
    A & B & C & D \\
    A & B & C & D \\
  };
\end{tikzpicture}
\unskip}
\sbox\toowide{\box0}

\def\useanchorwidth{T}
\def\stacktype{L}
{\centering
\stackon[0pt]{}{\usebox{\toowide}}

}

\noindent\rule{\textwidth}{1ex}
\end{document}

在此处输入图片描述

如果经常需要这个功能,可以使用命令

\newcommand\zerowidth[2][c]{\stackengine{0pt}{}{#2}{O}{#1}{F}{T}{L}}

允许如下使用(使用此 MWE 的语法):

\centering\zerowidth{\usebox{\toowide}}

达到相同的效果。可选参数\zerowidth指定零宽度项的内容相对于零宽度“标记”是左对齐、居中还是右对齐。您可以将\zerowidth视为\hsmash

相关内容