a) 如何调整 tikz 图片的大小以适合表格单元格?
b) 如何使第一行水平居中?
这是我到目前为止所得到的:
\documentclass{article}
\usepackage[a4paper]{geometry}
\usepackage[utf8]{inputenc} % accents
\usepackage{verbatim} % \begin{comment}
\usepackage{tcolorbox}
\usepackage{amsfonts,amsmath}
\usepackage{tikz}
\newcommand{\mmRationalPie}[1]{
\def\angle{#1}
\def\radius{1}
\def\color{blue}
\begin{tikzpicture}[]
\draw[fill=red,draw=red] (0,0) -- (0:\radius) arc (0:\angle:\radius) -- cycle;
\draw (0,0) -- (\angle:\radius) arc (\angle:360:\radius) -- cycle;
\end{tikzpicture}
}
\begin{document}
\begin{tabular}[t]{ | p{1cm} | p{1cm} |}
$ \frac{1}{3} $ & $ \frac{2}{3} $ \\
\hline
\mmRationalPie{120} & \mmRationalPie{240}
\end{tabular}
\end{document}
澄清:如果为了改变大小,最好不需要同时修改 tikz 命令和表格特征。
答案1
这是一个基于的解决方案这个答案“如何将 tikzpicture 缩放到 \textwidth”,它采用了 Ulrike Fischer 的想法。建议不要从外部缩放 tikz 图片,因此 tikz 图片要排版两次,一次不缩放,然后根据未缩放的宽度计算适当的缩放因子。
我没有删除垂直规则,以表明由于某种原因,左列中的 tikz 图片有一些额外的空间(源自图片),因此圆圈比右边的圆圈小。但这是另一个问题...
\documentclass{article}
\usepackage{tikz}
\usepackage{environ}
\makeatletter
\newsavebox{\measure@tikzpicture}
\NewEnviron{scaletikzpicturetowidth}[1]%
{\def\tikz@width{#1}%
\def\tikzscale{1}%
\begin{lrbox}{\measure@tikzpicture}%
\BODY
\end{lrbox}%
\pgfmathparse{#1/\wd\measure@tikzpicture}%
\edef\tikzscale{\pgfmathresult}%
\BODY
}
\makeatother
\newcommand{\mmRationalPie}[1]%
{\begin{scaletikzpicturetowidth}{\linewidth}%
\def\pieangle{#1}%
\def\pieradius{1}%
\begin{tikzpicture}[scale=\tikzscale]
\draw[fill=red,draw=red] (0,0) -- (0:\pieradius) arc (0:\pieangle:\pieradius) -- cycle;
\draw (0,0) -- (\pieangle:\pieradius) arc (\pieangle:360:\pieradius) -- cycle;
\end{tikzpicture}%
\end{scaletikzpicturetowidth}%
}
\begin{document}
\begin{tabular}[t]{| p{1cm} | p{1cm} |}
\multicolumn{1}{|c|}{$\frac{1}{3}$} & \multicolumn{1}{c|}{$\frac{2}{3}$} \\
\hline
\mmRationalPie{120} & \mmRationalPie{240}
\end{tabular}
\end{document}
答案2
问题在于,您将圆的半径设置为1cm
,而表格列宽1cm
也设置为 。您应该将圆的半径设置为小于0.5cm
(小于是因为表格单元格内部有内部间距)。
要使第一行居中,您必须使用居中列说明符,如果您希望设置列宽,则可以使用创建一个新的列说明符array package
,例如在这个答案中。如果您同意让 LaTeX 自行确定宽度,那么通常c
就可以做到。我使用过 Ti钾Zpic
的机制而不是您的命令,因为它更灵活(您可以用它调用选项)。
最后,考虑不使用垂直规则,在此示例中,我删除了垂直规则并使用了和,\toprule
它们在规则和文本之间提供了更好的间距。结果:\midrule
\bottomrule
booktabs
编辑:由于 OP 希望圆半径遵循列宽,因此我使用了 的定义\pieradius
作为 的函数\linewidth
。但也可以通过键本地设置半径pie radius=<dim>
梅威瑟:
\documentclass{article}
\usepackage{tikz,array,booktabs,amsmath}
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash}m{#1}}
\tikzset{
pie radius/.store in=\pieradius,
pie radius=0.45*\linewidth,
pics/rational pie/.style={code={\filldraw[red] (0,0) -- (0:.45*\pieradius) arc (0:#1:.45*\pieradius) -- cycle;%
\draw (0,0) -- (#1:.45*\pieradius) arc (#1:360:.45*\pieradius) -- cycle;}}
}
\begin{document}
\begin{tabular}[t]{C{1cm} C{2cm}}
\toprule
$ \dfrac{1}{3} $ & $ \dfrac{2}{3} $ \\
\midrule
\tikz\pic[pie radius=0.2cm]{rational pie=120}; & \tikz\pic{rational pie=240}; \\
\tikz\pic{rational pie=120}; & \tikz\pic{rational pie=240}; \\
\bottomrule
\end{tabular}
\end{document}
答案3
要在不改变原始定义的情况下调整图形大小,请使用表单的调整大小命令\resizebox{width}{height}{object}
根据需要选择所需的宽度/高度。
\documentclass{article}
\usepackage[a4paper]{geometry}
\usepackage[utf8]{inputenc} % accents
\usepackage{verbatim} % \begin{comment}
\usepackage{tcolorbox}
\usepackage{amsfonts,amsmath}
\usepackage{tikz,array,booktabs}
\newcommand{\mmRationalPie}[1]{
\def\angle{#1}
\def\radius{1}
\def\color{blue}
\begin{tikzpicture}[]
\draw[fill=red,draw=red] (0,0) -- (0:\radius) arc (0:\angle:\radius) -- cycle;
\draw (0,0) -- (\angle:\radius) arc (\angle:360:\radius) -- cycle;
\end{tikzpicture}
}
\begin{document}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\begin{tabular}[t]{ C{1cm} C{1cm} }
\toprule
$ \frac{1}{3} $ & $ \frac{2}{3} $ \\ \midrule
\resizebox{1cm}{!}{\mmRationalPie{120}} & \resizebox{1cm}{!}{\mmRationalPie{240}}\\
\bottomrule
\end{tabular}
\end{document}
答案4
我想做这个tikzscale
但却做不到,所以这只是半成品。
非常重要:\def\color{blue}
除非你真的、真的想要事情发生改变,否则永远不要写这样的东西!
我根本不会这样做,但既然你似乎决心这么做,至少要避免最明显的麻烦根源。
\documentclass{article}
\usepackage[a4paper]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{array}
\usepackage{tikz}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\tikzset{%
rat pie/.search also={/tikz/},
rat pie/.cd,
angle/.store in=\ratpieangle,
radius/.store in=\ratpieradius,
colour/.store in=\ratpiecolour,
angle=60,
radius=1,
colour=blue,
}
\newcommand{\mmRationalPie}[1]{%
\tikzset{%
rat pie/angle=#1,
rat pie/radius=.45\linewidth,
}%
\begin{tikzpicture}[baseline=(o)]
\draw [fill=\ratpiecolour, draw=\ratpiecolour] (0,0) coordinate (o) -- (0:\ratpieradius ) arc (0:\ratpieangle:\ratpieradius) -- cycle;
\draw (0,0) -- (\ratpieangle:\ratpieradius) arc (\ratpieangle:360:\ratpieradius) -- cycle;
\end{tikzpicture}%
}
\begin{document}
\begin{tabular}[t]{ | C{1cm} | C{1cm} |}
$ \frac{1}{3} $ & $ \frac{2}{3} $ \\
\hline
\mmRationalPie{120} & \mmRationalPie{240}\\
\mmRationalPie{240} & \mmRationalPie{30}\\
\end{tabular}
\end{document}