我正在尝试添加图像并将其宽度和高度信息(以毫米为单位)叠加到图像上。我将图像保存到一个框中,然后使用计算器包计算该框的毫米宽度和高度。然后我使用图片环境放置图像,并在其上方放置带有测量值的 fcolorbox。
发生的情况是,我在图片环境前获得了额外的间距,但仅限于使用计算器包中的命令时。 是存在错误还是我做错了什么?
这是我的示例,使用 \rule 作为图像的虚拟项;第 1 页是计算出的测量值,第 2 页是手动输入的测量值:
\documentclass{article}
\usepackage{blindtext}
%\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{picture}
\usepackage{calculator}
\newsavebox{\tmpboxa}%
\begin{document}\noindent
\savebox{\tmpboxa}{\rule{\textwidth}{50mm}}% This is where the image will be includegraphicsed
\LENGTHDIVIDE{\wd\tmpboxa}{1mm}{\breite}%
\ROUND[2]{\breite}{\Breite}%
\LENGTHDIVIDE{\ht\tmpboxa}{1mm}{\hoehe}%
\ROUND[2]{\hoehe}{\Hoehe}%
\begin{picture}(\breite mm, \hoehe mm)%
\put(0,0){\makebox(0,0)[bl]{\usebox{\tmpboxa}}}%
\put(1mm,1mm){\makebox(0,0)[bl]{\fcolorbox{black}{black!15}{\strut \Breite\,mm $\times$ \Hoehe\,mm}}}%
\end{picture}%
\\
\blindtext
\clearpage\noindent
\savebox{\tmpboxa}{%
\rule{\textwidth}{50mm}%
}%
\begin{picture}(\textwidth, 50mm)%
\put(0,0){\makebox(0,0)[bl]{\usebox{\tmpboxa}}}%
\put(1mm,1mm){\makebox(0,0)[bl]{\fcolorbox{black}{black!15}{\strut 121.25\,mm $\times$ 50\,mm}}}%
\end{picture}%
\\
\blindtext
\end{document}
答案1
如果你
\savebox{\tmpboxa}{\rule{\textwidth}{50mm}}% This is where the image will be includegraphicsed
\setbox0\hbox{\LENGTHDIVIDE{\wd\tmpboxa}{1mm}{\breite}%
\ROUND[2]{\breite}{\Breite}%
\LENGTHDIVIDE{\ht\tmpboxa}{1mm}{\hoehe}%
\ROUND[2]{\hoehe}{\Hoehe}}\showoutput\showbox0
你会看到的
> \box0=
\hbox(0.0+0.0)x6.66666
.\glue 3.33333 plus 1.66666 minus 1.11111
.\glue 3.33333 plus 1.66666 minus 1.11111
正如您所怀疑的,这些命令添加了两个空格(可能%
在代码的行尾缺失)。如果您想使用它们,一个简单的解决方法是将移动\noindent
到前面\begin{picture}
,这样计算就会在垂直模式下进行,而空格会被忽略。
该包显然不期望在水平模式下进行计算,它需要数十次%
并\relax
添加以防止出现空白,但在这种情况下,您只需修复\LENGTHDIVIDE
并且两个空格就会消失:
加载包后添加此项。
\makeatletter
\def\LENGTHDIVIDE#1#2#3{%
\begingroup
\cctr@lengtha=#1\relax
\cctr@lengthb=#2\relax
\edef\cctr@tempa{\expandafter\strip@pt\cctr@lengtha}%
\edef\cctr@tempb{\expandafter\strip@pt\cctr@lengthb}%
\DIVIDE{\cctr@tempa}{\cctr@tempb}{#3}%
\@OUTPUTSOL{#3}}
\makeatother