tikz 在表格单元格中调整大小

tikz 在表格单元格中调整大小

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就可以做到。我使用过 TiZpic的机制而不是您的命令,因为它更灵活(您可以用它调用选项)。

最后,考虑不使用垂直规则,在此示例中,我删除了垂直规则并使用了和,\toprule它们在规则和文本之间提供了更好的间距。结果:\midrule\bottomrulebooktabs

在此处输入图片描述

编辑:由于 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}

避免最严重的麻烦?

相关内容