Difference between revisions of "Image Placement"

From ConTeXt wiki
Jump to navigationJump to search
(some Lua code)
(add postponing)
 
(One intermediate revision by the same user not shown)
Line 71: Line 71:
  
 
function ImgSize(resolution)
 
function ImgSize(resolution)
filename = figures.current().status.fullname -- current image
+
local filename = figures.current().status.fullname -- current image
 
local pic = img.scan{filename = filename}
 
local pic = img.scan{filename = filename}
 
local picH = pic.ysize * TEXptpi * TEXpt / resolution  -- picture height in sp
 
local picH = pic.ysize * TEXptpi * TEXpt / resolution  -- picture height in sp
Line 78: Line 78:
 
end
 
end
 
</pre>
 
</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))
 
((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))