![将图片大小设置为给定框的大小](https://linux22.com/image/262569/%E5%B0%86%E5%9B%BE%E7%89%87%E5%A4%A7%E5%B0%8F%E8%AE%BE%E7%BD%AE%E4%B8%BA%E7%BB%99%E5%AE%9A%E6%A1%86%E7%9A%84%E5%A4%A7%E5%B0%8F.png)
我想使用 Latex 中的图片模式,但需要将绘图区域的大小设置为其他框的大小。我通常会这样做
\begin{picture}(max_hor, max_ver)(ll_hor, ll_ver)
...
\end{picture}
并且我想要根据给定盒子的尺寸计算max_hor,max_ver。
答案1
\ht\mybox
您可以分别使用、\dp\mybox
和来访问 (La)TeX 框寄存器的高度、深度和宽度\dp\mybox
,其中\mybox
是使用 定义的框\newsavebox{\mybox}
。如果您需要将这些尺寸作为文本,您可以通过\the
在其前面放置 来转换它们。
但是,在picture
环境中,您需要将尺寸声明为的倍数\unitlength
,因此您需要将此值除以该数量,这并不容易,因为 TeX 不提供将长度除以长度的直接方法。但您可以使用所使用的内部缩放宏graphicx
:
\documentclass{article}
\newsavebox{\mybox}
\usepackage{graphicx}
\usepackage{calc}
\makeatletter
\newcommand{\scaletoul}[2]{%
\setlength\@tempdima{#2}%
\Gscale@div{#1}{\@tempdima}{\unitlength}%
}
\makeatother
\begin{document}
\sbox{\mybox}{come content}
\setlength{\unitlength}{1pt}
\scaletoul{\mywidth}{\wd\mybox}
\scaletoul{\mytotalheight}{\ht\mybox+\dp\mybox}
\frame{% just to see the dimensions
\begin{picture}(\mywidth, \mytotalheight)(0,0)
\put (0,0) {\raisebox{\dp\mybox}{\usebox{\mybox}}}
\end{picture}%
}
\end{document}
请注意,该picture
环境可能已过时。对于新图表,建议使用 TikZ 或 PSTricks。在那里,您不必自己定义尺寸,也可以直接提供所有尺寸,而无需将它们缩放到\unitlength
。参见例如使用 TikZ 在图像上绘图举个例子。
答案2
该picture
包允许在图片相关宏的参数中使用显式尺寸。下面是一个例子,使用与 Martin 的答案相同的代码,但大大简化了,如您所见:
\documentclass{article}
\usepackage{picture}
\newsavebox{\mybox}
\begin{document}
\sbox{\mybox}{some content}
\frame{% just to see the dimensions
\begin{picture}(\wd\mybox,\dimexpr\ht\mybox+\dp\mybox\relax)(0,0)
\put (0,0) {\raisebox{\dp\mybox}{\usebox{\mybox}}}
\end{picture}%
}
\end{document}