我正在尝试构建一个动态表,其中每个单元格包含一个 tikzpicture,而其周围没有任何附加边距。
整个结构比较复杂,我做了一个例子:
\documentclass[10pt]{article}
\usepackage{ifthen}
\usepackage{tikz}
\usepackage{forloop}
\newcounter{Row}
\newcounter{Col}
\newcommand{\Foo}{%
\par\raggedright\centering
\setlength\tabcolsep{0pt}\renewcommand{\arraystretch}{0}%
\begin{tabular}{|c|c|c|c|}
\hline
\forLoop{1}{3}{Row}
{
\forLoop{1}{4}{Col}
{
\begin{tikzpicture}
\draw[black] (0,0) rectangle (1, -1);
\end{tikzpicture}
\ifthenelse{\equal{\theCol}{4}}{\\ \hline}{&}
}
}
\end{tabular}
}%
\begin{document}
\Foo
\end{document}
该代码的结果是每个 tikzpicture 的左侧都有不想要的边距。
我尝试编写不使用 for 循环的相同代码,但边距并未出现。
有人能帮我找出代码中的问题吗?
答案1
虚假的空间!
\documentclass[10pt]{article}
\usepackage{ifthen}
\usepackage{tikz}
\usepackage{forloop}
\newcounter{Row}
\newcounter{Col}
\newcommand{\Foo}{%
\par\raggedright\centering
\setlength\tabcolsep{0pt}\renewcommand{\arraystretch}{0}%
\begin{tabular}{|c|c|c|c|}
\hline
\forLoop{1}{3}{Row}
{% <--- HERE
\forLoop{1}{4}{Col}
{% <--- HERE
\begin{tikzpicture}
\draw[black] (0,0) rectangle (1, -1);
\end{tikzpicture}
\ifthenelse{\equal{\theCol}{4}}{\\ \hline}{&}
}% <--- not so important
}% <--- not so important
\end{tabular}% <--- not so important
}
\begin{document}
\Foo
\end{document}
标记为 的两个行尾表示HERE
不需要的空格。我添加了一些%
字符以保持一致性。
答案2
我刚刚用一些(刚刚测试过的)负 hspace 替换了你的表头c
,结果如下:
\documentclass[10pt]{article}
\usepackage{ifthen}
\usepackage{tikz}
\usepackage{forloop}
\newcounter{Row}
\newcounter{Col}
\newcommand{\Foo}{%
\par\raggedright\centering
\setlength\tabcolsep{0pt}\renewcommand{\arraystretch}{0}%
\begin{tabular}{c@{\hskip -3.5pt}c@{\hskip -3.5pt}c@{\hskip -3.5pt}c}
\forLoop{1}{3}{Row}
{
\forLoop{1}{4}{Col}
{
\begin{tikzpicture}
\draw[draw=black] (0,0) rectangle (1, -1);
\end{tikzpicture}
\ifthenelse{\equal{\theCol}{4}}{\\}{&}
}
}
\end{tabular}
}%
\begin{document}
\Foo
\end{document}