Difference between revisions of "Image Placement"

From ConTeXt wiki
Jump to navigationJump to search
(New! First section: measures)
 
(add postponing)
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
< [[Using–Graphics]] >
+
< [[Using Graphics]] >
  
 
If you’re using ConTeXt for complex layout tasks, you need to calculate with image sizes. Often it makes sense to use Lua functions.
 
If you’re using ConTeXt for complex layout tasks, you need to calculate with image sizes. Often it makes sense to use Lua functions.
 +
 +
'''Beware''', TeX calculates internally in "scaled points" (sp), 1 sp = 1/65536 pt.
  
 
== Measures in pure ConTeXt ==
 
== Measures in pure ConTeXt ==
  
Beware, TeX calculates internally in "scaled points" (sp), 1 sp = 1/65536 pt.
+
You can get at a picture’s dimensions with one line of TeX code:
  
 
<texcode>
 
<texcode>
\setupexternalfigures[location=default]
+
\setupexternalfigures[location=default] % necessary to find pictures in tree
 
\getfiguredimensions[hacker.jpg]
 
\getfiguredimensions[hacker.jpg]
% defines a bunch of variables, e.g.:
 
\figurefullname
 
\figurefilepath
 
\figurefilename
 
\figurefiletype
 
 
</texcode>
 
</texcode>
 
+
This defines a bunch of variables:
 
<context>
 
<context>
 
\setupexternalfigures[location=default]
 
\setupexternalfigures[location=default]
Line 48: Line 45:
 
\NC \string\figurecolordepth    \NC \figurecolordepth    \NC\NR
 
\NC \string\figurecolordepth    \NC \figurecolordepth    \NC\NR
 
\NC \string\figuredepth        \NC \figuredepth        \NC\NR
 
\NC \string\figuredepth        \NC \figuredepth        \NC\NR
\TB
 
\NC \string\figurefullname      \NC \figurefullname      \NC\NR
 
 
\NC \string\noffigurepages      \NC \noffigurepages ~pages    \NC\NR
 
\NC \string\noffigurepages      \NC \noffigurepages ~pages    \NC\NR
 
\TB
 
\TB
\NC \string\figurefilepath      \NC \figurefilepath      \NC\NR
+
\NC \string\figurefullname      \NC \tfxx\figurefullname      \NC\NR
 +
\NC \string\figurefilepath      \NC \tfxx\figurefilepath      \NC\NR
 
\NC \string\figurefilename      \NC \figurefilename      \NC\NR
 
\NC \string\figurefilename      \NC \figurefilename      \NC\NR
 
\NC \string\figurefiletype      \NC \figurefiletype      \NC\NR
 
\NC \string\figurefiletype      \NC \figurefiletype      \NC\NR
 
\stoptabulate
 
\stoptabulate
 
</context>
 
</context>
 +
 +
== Calculations in Lua ==
 +
 +
<pre>
 +
TEXpt = 65536 -- sp per pt
 +
TEXptpi = 72.27 -- pt per inch
 +
 +
function sp2mm(n)
 +
-- convert sp into mm
 +
return math.floor(n * 35.28 / TEXpt)/100
 +
end
 +
 +
function glue2num(glue)
 +
-- convert TeX glue (e.g. skips) into dimensions(? or numbers)
 +
return glue.width + (glue.stretch * glue.stretch_order) - (glue.shrink * glue.shrink_order)
 +
end
 +
 +
function ImgSize(resolution)
 +
local filename = figures.current().status.fullname -- current image
 +
local pic = img.scan{filename = filename}
 +
local picH = pic.ysize * TEXptpi * TEXpt / resolution  -- picture height in sp
 +
local picW = pic.xsize * TEXptpi * TEXpt / resolution  -- picture width in sp
 +
context("height=" .. picH .. ",width=" .. picW)
 +
end
 +
</pre>
 +
 +
== Postponing ==
 +
 +
If you want to place full page images or similar content on distinct pages, try the postponing mechanism:
 +
 +
<texcode>
 +
\definemakeup[fullpage][
 +
  page=no,
 +
  doublesided=no,
 +
  % headerstate=empty,
 +
  % footerstate=empty,
 +
  pagestate=start,
 +
]
 +
 +
\startpostponing[pagenumber]
 +
\startfullpagemakeup
 +
% use \setlayer & friends
 +
\stopfullpagemakeup
 +
\stoppostponing
 +
</texcode>
 +
 +
The pagenumber argument can be absolute or relative, e.g. 23 or +2. Values like +0 or -1 might fit your usecase.
 +
 +
((WORK IN PROGRESS))

Latest revision as of 15:37, 11 February 2018

< Using Graphics >

If you’re using ConTeXt for complex layout tasks, you need to calculate with image sizes. Often it makes sense to use Lua functions.

Beware, TeX calculates internally in "scaled points" (sp), 1 sp = 1/65536 pt.

Measures in pure ConTeXt

You can get at a picture’s dimensions with one line of TeX code:

\setupexternalfigures[location=default] % necessary to find pictures in tree
\getfiguredimensions[hacker.jpg]

This defines a bunch of variables:

Calculations in Lua

TEXpt = 65536 -- sp per pt
TEXptpi = 72.27 -- pt per inch

function sp2mm(n)
	-- convert sp into mm
	return math.floor(n * 35.28 / TEXpt)/100
end

function glue2num(glue)
	-- convert TeX glue (e.g. skips) into dimensions(? or numbers)
	return glue.width + (glue.stretch * glue.stretch_order) - (glue.shrink * glue.shrink_order)
end

function ImgSize(resolution)
	local filename = figures.current().status.fullname -- current image
	local pic = img.scan{filename = filename}
	local picH = pic.ysize * TEXptpi * TEXpt / resolution  -- picture height in sp
	local picW = pic.xsize * TEXptpi * TEXpt / resolution  -- picture width in sp
	context("height=" .. picH .. ",width=" .. picW)
end

Postponing

If you want to place full page images or similar content on distinct pages, try the postponing mechanism:

\definemakeup[fullpage][
  page=no,
  doublesided=no,
  % headerstate=empty,
  % footerstate=empty,
  pagestate=start,
]

\startpostponing[pagenumber]
\startfullpagemakeup
% use \setlayer & friends
\stopfullpagemakeup
\stoppostponing

The pagenumber argument can be absolute or relative, e.g. 23 or +2. Values like +0 or -1 might fit your usecase.

((WORK IN PROGRESS))