这个问题很简单:我希望能够使用例如宏来获取 LaTeX 中图片的精确尺寸\the
。
事实上,我已经找到了方法\settoheight{}
等等,但根本不起作用。我得到的结果与我在图像属性中看到的结果不匹配(我想这是英文名称)。结果:8pt 对 1300 像素。这可能是误用...
编辑:最后,我的目标是找到一种方法来让图片适合 LaTeX。如果宽度和高度都小于主体的尺寸,那么它应该居中。它看起来像这样:
要求:
\usepackage{graphicx}
\usepackage{xifthen}
\usepackage{calc}
代码(非常丑陋,我同意):
% Centrering+fitting for image, with captation and label (not auto)
\newlength\imageheight
\newlength\imagewidth
\newcommand{\pic}[3]{%
\settoheight\imageheight{\includegraphics{pictures/#1.png}}%
\settowidth\imagewidth{\includegraphics{pictures/#1.png}}%
\ifthenelse{\lengthtest{\imagewidth > \textwidth}}{\ifthenelse{\lengthtest{\imageheight > \imagewidth}}{\par\vspace{0.95em}%
\begin{figure}
\centering\includegraphics[height=0.85\textheight]{pictures/#1.png}
\caption{#2}
\label{#3}
\end{figure}%
\par\vspace{0.95em}}{\par\vspace{0.95em}%
\begin{figure}
\centering\includegraphics[width=0.95\textwidth]{pictures/#1.png}
\caption{#2}
\label{#3}
\end{figure}%
\par\vspace{0.95em}}}{\ifthenelse{\lengthtest{\imageheight > \textheight}}{\par\vspace{0.95em}%
\begin{figure}
\centering\includegraphics[height=0.85\textheight]{pictures/#1.png}
\caption{#2}
\label{#3}
\end{figure}%
\par\vspace{0.95em}}{\par\vspace{0.95em}%
\begin{figure}
\centering\includegraphics{pictures/#1.png}
\caption{#2}
\label{#3}
\end{figure}%
\par\vspace{0.95em}}}}
%
要使用它:将您的 png 文件放在“图片”目录中,然后只需像这样调用图片:\pic{name_whitout_extension}{Captation_if_needed}{Label_if_needed}
。
编辑2:
感谢 Martin Scharrer 的easyfig
软件包,我得到了一个大约 1.6 倍的解决方案,可以将我的照片居中,并具有完美的尺寸。
加拿大运输安全管理局:http://www.ctan.org/pkg/easyfig
风投:https://bitbucket.org/martin_scharrer/easyfig
版本 v1.2 – 2012/05/15
我希望这对其他人有用。
答案1
如果你想要的只是将图像的宽度限制为某个最大值(例如\linewidth
),你可以简单地使用TeX 常见问题解答:
\documentclass[a5paper]{article}
\usepackage{graphicx}
\makeatletter
\def\maxwidth{%
\ifdim\Gin@nat@width>\linewidth
\linewidth
\else
\Gin@nat@width
\fi
}
\makeatother
\begin{document}
\centering\includegraphics[width=\maxwidth]{largebottle}
\includegraphics[width=\maxwidth]{largesidebottle}
\end{document}
实际测量并输出尺寸,\settoheight
应该\settowidth
可以工作。您可以pt
使用包将单位转换为其他单位printlen
,正如 Werner 在评论中指出的那样。
ImageMagick ( identify -verbose bottle.jpg
) 显示几何图形为 1408x714 像素,分辨率为每英寸 300x300 像素,即1408 px/300 px per in*72.27 pt per in=339.1872 pt
和714 px/300 px per in * 72.27 pt per in = 172.0026 pt
。
\documentclass[11pt ]{article}
\usepackage{graphicx}
\usepackage{printlen}
\uselengthunit{cm}
\newlength\imageheight
\newlength\imagewidth
\begin{document}
\settoheight\imageheight{\includegraphics{bottle}}
\settowidth\imagewidth{\includegraphics{bottle}}
\includegraphics{bottle}
Height: \the\imageheight\ (\printlength{\imageheight})
Width: \the\imagewidth\ (\printlength{\imagewidth})
\end{document}
答案2
LaTeX 不使用像素。像素不是打印格式。pdflatex
允许使用px
单位,但这只是pt
像 TeX 中的其他内容一样转换为点 ( )。像素与点的比率取决于图像密度以每英寸点数 (DPI) 为单位。默认情况下使用 72 DPI。TeX 点为 1/72.27 英寸,PostScript/PDF 点(bp
以 TeX 为单位)为 1/72 英寸。如果您的图像具有较大的 DPI 值,但pdflatex
无法从图像元数据中读取该值,则此转换可能是错误的(因为假定为 72 DPI),并且您的图像大小不正确。有时只需转换图像或打开并保存它即可修复元数据。
关于如何测量图像的所有尺寸:
不要多次包含图像来测量其不同尺寸。手动将其存储在一个框中(例如\mybox
),然后您可以使用\ht\mybox
(高度)、\wd\mybox
(宽度)和\dp\mybox
(深度)直接访问框尺寸。您提到的所有\setto...
宏对临时框都执行完全相同的操作。
\newsavebox\mybox
\newcommand{\pic}[1]{%
\sbox\mybox{\includegraphics{#1}}%
Height: \the\ht\mybox
Width: \the\wd\mybox
Depth: \the\dp\mybox % For images usually 0 except if rotated
\ifdim\wd\mybox>.6\textwidth
% width is larger than 60% of the text width ...
\fi
% Insert the image:
\usebox\mybox
}
您还可能需要\@tempboxa
盒子登记册(需要\makeatletter
.. \makeatother
)或直接盒子登记册号码0
:\sbox0{...} \ht0 ...
答案3
虽然问题询问如何在 LaTeX 中执行此操作,但我还添加了一个答案来展示如何使用 ConTeXt 中的高级界面来执行此操作。
每当您使用 时,ConTeXt 都会使用宏、和\externalfigure
提供尺寸(以及 pdf 图像的页数)。如果您不想将图像包含在文档中,而只想测量其尺寸,请使用。以下示例获取远程托管图像的尺寸:\figurenaturalwidth
\figurenaturalheight
\noffigurepages
\getfiguredimensions
\starttext
\getfiguredimensions[http://placekitten.com/500/300][method=png]
\startTABLE
\NC Width \NC \the\dimexpr\figurenaturalwidth \NC \NR
\NC Height \NC \the\dimexpr\figurenaturalheight \NC \NR
\NC Pages \NC \noffigurepages \NC \NR
\stopTABLE
\stoptext
\figurenaturalwidth
并...height
返回 中的单位sp
。我使用\the\dimexpr
将结果转换为点。也可以使用 Lua 函数number.todimen(...)
来实现更通用的转换例程。
笔记与 LaTeX 一样,尺寸计算使用 pdftex/luatex 中指定的默认 DPI。因此,Jake 的比较评论px
仍然pt
有意义。
根据编辑的问题,您可以在 ConTeXt 中使用:
\externalfigure[figurename][maxwidth=\textwidth, maxheight=\textheight]
这将缩小图像,使其高度和宽度不超过maxheight
和maxwidth
。如果需要为许多图形设置这些选项,可以使用:
\defineexternalfigure[MaxWidthAndHeight][maxwidth=\textwidth, maxheight=\textheight]
\externalfigure[figurename][MaxWidthAndHeight][frame=on]
(我frame=on
仅用来展示如何添加其他选项(如果需要))。