使用枚举在小页面中垂直对齐 tikzpicture(覆盖不起作用?)

使用枚举在小页面中垂直对齐 tikzpicture(覆盖不起作用?)
\documentclass{article}
\usepackage[utf8]{inputenc}

\usepackage{etex,amsmath,amsfonts,amssymb,graphicx,flexisym,setspace,scrextend,siunitx,multicol,tikz,tkz-euclide,adjustbox}

\usetkzobj{all}
\usetikzlibrary{calc}
\usepackage[margin=1cm,bmargin=1.4cm]{geometry}

\begin{document}
\begin{minipage}{0.3\linewidth}
\begin{enumerate}
\item \adjustbox{valign=t}{
\begin{tikzpicture}
    \tkzDefPoint(0,0){A}
    \tkzDefPoint(2.5,0){B}
    \tkzDrawTriangle[two angles = 60 and 60,overlay](A,B)
    \tkzGetPoint{C}
    \tkzLabelPoint[left](A){$A$}
    \tkzLabelPoint[right](B){$B$}
    \tkzLabelPoint[above](C){$C$}
    \tkzDrawAltitude(A,B)(C)
    \tkzGetPoint{D}
    \tkzLabelPoint[above right](D){$D$}
    \tkzMarkRightAngle[color=red](C,D,A)
    \tkzLabelAngle[pos=0.5](C,A,B){\small 60\si{\degree}}
    \tkzLabelAngle[pos=0.5](C,B,A){\small 60\si{\degree}}
    \tkzLabelSegment[auto](C,D){$s$}
    \tkzLabelSegment[auto](A,C){$r$}
    \tkzLabelSegment[auto](B,A){18}
\end{tikzpicture}}\vspace{1.25in}

\item \leavevmode\vadjust{\vspace{-\baselineskip}}\newline
\begin{tikzpicture}[rotate=-30]
    \tkzDefPoint(0,0){A}
    \tkzDefPoint(3,0){B}
    \tkzDrawTriangle[school,overlay](B,A)
    \tkzGetPoint{C}
    \tkzLabelPoint[above](A){$A$}
    \tkzLabelPoint[right](B){$B$}
    \tkzLabelPoint[left](C){$C$}
    \tkzDrawAltitude(B,C)(A)
    \tkzGetPoint{D}
    \tkzLabelPoint[below right](D){$D$}
    \tkzMarkRightAngle[color=red](A,D,C)
    \tkzLabelAngle[pos=-0.8](C,B,A){\small 30\si{\degree}}
    \tkzLabelAngle[pos=0.45](A,C,B){\small 60\si{\degree}}
    \tkzLabelSegment[auto,swap](B,A){8}
    \tkzLabelSegment[auto,swap](C,D){$y$}
    \tkzLabelSegment[auto](A,D){$x$}
\end{tikzpicture}\vspace{1in}
\end{enumerate}
\end{minipage}

\end{document}

小页面中的垂直对齐接近我需要的,但还没有解决我的问题。我问过类似的问题(到目前为止结果还不错)tcolorbox 与 tikzpicture 中尴尬的垂直空间。为什么枚举数字和数字之间有这么多空格(图中的#17)。

我正在创建数学工作表。我需要对 tikzpictures 进行编号并留出空间用于解决方案,并且我需要这些问题(尽管它们的形状各异)以良好的方式对齐(无论垂直和水平间距如何,都应该保持一致)。我尝试使用 tabular 和 tabularx(枚举与它们配合使用时很奇怪,因为我需要数字位于图片上方)将枚举项与 tikzpicture 的顶部对齐,这些解决方案(尤其是其中有换行符)在表格环境中对我来说不起作用)。 我一直在使用多列,直到我发现了 minipage;我使用多列的问题是间距变得非常奇怪并且不会按行对齐(据我了解,它只是占用代码请求的总空间量并将其除以指定的列数,因此有时问题数字会在前一列而不是 tikzpicture 本身。)

公平地说,minipage 看起来应该可以工作!... 直到最后两个问题为止都是如此。(我的 MWE 仅包含 #17 和 #18 的代码... 如果需要,我可以显示所有 6 个问题的完整代码,但由于它们运行良好,我相当确定它们不是问题。让我知道。)如您所见,使用完全相同的 minipage/enumerate/tkzpicture 配置,13-16 可以很好地对齐。出于某种原因,#17 添加了大量垂直空间(看起来它与 #15 的底部对齐?)#18 看起来对齐得很好。#17 中的 tikzpicture 发生了什么?

6 个拒绝对齐的三角形

答案1

由于某种原因,左侧图形的边界框比图形高得多,如果您将其放入 中,就会看到这一点\fbox。我通过反复试验对其进行了修剪。我还建议您使用该tasks包先自动进行水平编号,然后进行垂直编号。最后(不相关的)评论:自 LaTeX 2015 以来,您无需再加载etex

\documentclass{article}
\usepackage[utf8]{inputenc}

\usepackage{amsmath,amsfonts,amssymb,graphicx,flexisym,setspace,scrextend,siunitx,multicol,tikz,tkz-euclide,adjustbox}
\usepackage{tasks}

\usetkzobj{all}
\usetikzlibrary{calc}
\usepackage[margin=1cm,bmargin=1.4cm]{geometry}

\begin{document}
\begin{tasks}[counter-format ={tsk[1].}, after-skip = 1 in](3)%
 \task \adjustbox{valign=t, trim = 0pt 0pt 0pt 56.8pt}{
\begin{tikzpicture}
    \tkzDefPoint(0,0){A}
    \tkzDefPoint(2.5,0){B}
    \tkzDrawTriangle[two angles = 60 and 60,overlay](A,B)
 \tkzGetPoint{C}
 \tkzLabelPoint[left](A){$A$}
 \tkzLabelPoint[right](B){$B$}
 \tkzLabelPoint[above](C){$C$}
 \tkzDrawAltitude(A,B)(C)
 \tkzGetPoint{D}
 \tkzLabelPoint[above right](D){$D$}
 \tkzMarkRightAngle[color=red](C,D,A)
 \tkzLabelAngle[pos=0.5](C,A,B){\small 60\si{\degree}}
 \tkzLabelAngle[pos=0.5](C,B,A){\small 60\si{\degree}}
 \tkzLabelSegment[auto](C,D){$s$}
 \tkzLabelSegment[auto](A,C){$r$}
 \tkzLabelSegment[auto](B,A){18}
\end{tikzpicture}}

\task
\vadjust{\vspace{-\baselineskip}}\newline
\begin{tikzpicture}[rotate=-30]
    \tkzDefPoint(0,0){A}
    \tkzDefPoint(3,0){B}
    \tkzDrawTriangle[school,overlay](B,A)
    \tkzGetPoint{C}
    \tkzLabelPoint[above](A){$A$}
    \tkzLabelPoint[right](B){$B$}
    \tkzLabelPoint[left](C){$C$}
    \tkzDrawAltitude(B,C)(A)
    \tkzGetPoint{D}
    \tkzLabelPoint[below right](D){$D$}
    \tkzMarkRightAngle[color=red](A,D,C)
 \tkzLabelAngle[pos=-0.8](C,B,A){\small 30\si{\degree}}
 \tkzLabelAngle[pos=0.45](A,C,B){\small 60\si{\degree}}
 \tkzLabelSegment[auto,swap](B,A){8}
 \tkzLabelSegment[auto,swap](C,D){$y$}
 \tkzLabelSegment[auto](A,D){$x$}
\end{tikzpicture}
\end{tasks}

\end{document}

在此处输入图片描述

答案2

另一种解决方案类似于这个答案,即:

  • 放在\draw (current bounding box.south east) rectangle (current bounding box.north west);tikzpicture 环境结束之前,临时绘制一个边界框
  • 包裹\begin{pgfinterruptboundingbox}....\end{pgfinterruptboundingbox}有问题的代码以防止其拉伸你的边界框
  • \draw (current bounding box.south east) rectangle (current bounding box.north west);完成后,进行评论或删除。

以下是具有最小边界框的代码的修改版本:

\begin{tikzpicture}
\tkzDefPoint(0,0){A}
\tkzDefPoint(2.5,0){B}
\tkzDrawTriangle[two angles = 60 and 60,overlay](A,B)
\tkzGetPoint{C}
\tkzLabelPoint[left](A){$A$}
\tkzLabelPoint[right](B){$B$}
\tkzLabelPoint[above](C){$C$}
\begin{pgfinterruptboundingbox}
\tkzDrawAltitude(A,B)(C)
\tkzGetPoint{D}
\tkzLabelPoint[above right](D){$D$}
\end{pgfinterruptboundingbox}
\tkzMarkRightAngle[color=red](C,D,A)
\tkzLabelAngle[pos=0.5](C,A,B){\small 60\degree}
\tkzLabelAngle[pos=0.5](C,B,A){\small 60\degree}
\tkzLabelSegment[auto](C,D){$s$}
\tkzLabelSegment[auto](A,C){$r$}
\tkzLabelSegment[auto](B,A){18}
\draw (current bounding box.south east) rectangle (current bounding box.north west);
\end{tikzpicture}
\end{center}

这应该可以帮你解决这个问题。

在此处输入图片描述

PS 您介意分享其他三角形的 TikZ 代码吗?谢谢!

相关内容