我正在处理的文档中有一张表格,它非常复杂,我尝试使用 来制作它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
。