![适合页面上没有空白的大型 tikz 图像](https://linux22.com/image/316234/%E9%80%82%E5%90%88%E9%A1%B5%E9%9D%A2%E4%B8%8A%E6%B2%A1%E6%9C%89%E7%A9%BA%E7%99%BD%E7%9A%84%E5%A4%A7%E5%9E%8B%20tikz%20%E5%9B%BE%E5%83%8F.png)
我正在 knitr 中制定议程(使用 XeLaTeX)。我在月度概览中将环境tikz
周围的边缘设为圆角tabular
。这是概览的几页中的第一页:
如您所见,页面顶部有一小块空白。我相信这个空白对应于 tikz 代码的位置(如此处所述:如何避免 TikZ 造成的空白)。
我的问题是:有没有办法去除这个空白?
- 我正在寻找一种不需要增加页边距或减小图形尺寸的解决方案。
- 问题如何避免 TikZ 造成的空白和使用 xelatex 将整页 Tikz 图像置于页面上且无边距?似乎正是问了我想要的,但答案要么不适用于我的情况,要么我不知道如何将答案应用到我的情况中。
这是 MWE(只有一个单元格,没有圆边;手动添加突出显示):
\documentclass{book}
\usepackage[showframe]{geometry}
\setlength{\parindent}{0pt} %no indenting of first line
\usepackage{tikz} %for rounded corners (not in mwe)
\usepackage{adjustbox} %for scaling table to fill page
\begin{document}
\raisebox{-\height}[0pt][0pt]{%
\begin{adjustbox}{totalheight=\textheight, width = \linewidth}
\begin{tikzpicture}
\node(table){%
\begin{tabular}{c}
tabular \\
\end{tabular}
};
\draw (table.north west) rectangle (table.south east);
\end{tikzpicture}
\end{adjustbox}
}
\end{document}
关于 MWE 的一些额外信息:
我
adjustbox
曾经缩放表格以填充整个页面。生成的 tikz 图像太大,这会将图像推到空白页之后的下一页上。因此我遵循Gonzola Medina 建议隐藏 tikz 图像的尺寸。这成功删除了空白页,但导致每页顶部出现不必要的空白。
答案1
如果我正确理解了要求,那么我认为问题在于包含的 TeX 框tikzpicture
具有一些非零深度。在下面,我使用键local bounding box
明确命名图片(使用不起作用current bounding box
),然后使用baseline
键将的基线设置为tikzpicture
图片底部,因此包含的框tikzpicture
没有深度。
\documentclass{book}
\usepackage[showframe]{geometry}
\setlength{\parindent}{0pt}
\usepackage{tikz}
\usepackage{adjustbox}
\begin{document}
\begin{adjustbox}{totalheight=\textheight, width=\linewidth}%
\begin{tikzpicture}[local bounding box=picture, baseline=(picture.south)]
\node (table) {Some content};
\draw (table.north west) rectangle (table.south east);
\end{tikzpicture}
\end{adjustbox}
\end{document}
另一种方法是明确将图片的边界框设置为(0,0) (\textwidth, \textheight)
。缺点是您必须确保图片的所有部分都在这些点描述的矩形内,否则它们会伸出边缘。解决这个问题的一种方法可能是将坐标系缩放到\textwidth
,\textheight
正如这个相当花哨的例子所示:
\documentclass{book}
\usepackage[showframe]{geometry}
\setlength{\parindent}{0pt}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\useasboundingbox (0,0) (\textwidth, \textheight);
\tikzset{x=\textwidth/10, y=\textheight/10}
\foreach \x in {0,...,9}
\foreach \y [evaluate={\r=rnd; \g=rnd; \b=rnd;}] in {0,...,9}
\fill [/utils/exec=\definecolor{.}{rgb}{\r,\g,\b}, fill=.]
(\x, \y) rectangle ++(1, 1);
\end{tikzpicture}
\end{document}