\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 发生了什么?
答案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 代码吗?谢谢!