Changes

Jump to navigation Jump to search
4,960 bytes added ,  15:34, 27 September 2018
m
Add hatnote pointing users to Layout, too
{{note|This article is about the data type. For the names of a page's many dimensions, see [[Layout]].}}
=== \definemeasure === \setupexternalfigures[location={localA dimension,globalin TeX,default}]is a variable storing a length. The length is entered \definemeasure[ColumnC][30mm]as a number immediately followed by two letters that indicate the unit, e.g. \definemeasure[ColumnD][40mm] \definemeasure[ColumnCD][\the\dimexpr(\measure{ColumnC}+\measure{ColumnDcode|12pt})\relax] C \measure{ColumnC} D \measureor {ColumnD} CD \measure{ColumnCDcode|1cm} \externalfigure[cow][width=\measure{ColumnCD}]. TeX recognizes 9 different units:
=== \defineexpandable === \setupexternalfigures[location={local* scaled points ('''sp'''), equal to 1/65536 points. This is TeX's internal unit for dimensions. One sp is so small that TeX can store dimensions as integers; at the time,globalthis was an advantage,default}]because floating point arithmetic was not guaranteed to be consistent across platforms. * points ('''pt''') and picas ('''pc'''). One point is 1/72.27 inch; 12 points = 1 pica. \defineexpandable\ColumnA {30mm}* didot ('''dd''') and cicero ('''cc'''). The didot is a continental counterpart of the point; 12 didot = 1 cicero. \defineexpandable\ColumnB {40mm}* big points ('''bp'''), defined by Adobe as 1/72 of an inch. \defineexpandable\ColumnAB {\the\dimexpr* millimeters ('''mm'''), centimeters ('''cm'''), and, unavoidably, inches (\ColumnA + \ColumnB'''in''')\relax} A \ColumnA B \ColumnB AB: \ColumnAB \externalfigure[cow][width=\ColumnAB].
=== \newdimen === \setupexternalfiguresThe various conversions between the units are laid out in the [location={local,global,default}] \defineexpandable\ColumnA {30mm} \defineexpandable\ColumnB {40mm} \newdimen\ColumnAB \ColumnAB=\dimexpr(\ColumnA + \ColumnB) A \ColumnA B \ColumnB ColumnAB: \the\ColumnAB \externalfigure[cow#Conversion table|conversion table][width=\the\ColumnAB]\externalfigure scheint auch ohne "\at the" zu funktionierenend of this article.
==Defining and accessing dimensions = \ctxlua === \setupexternalfigures[location={local,global,default}] \defineexpandable\ColumnA {30mm} \defineexpandable\ColumnB {40mm} \defineexpandable\ColumnABii {\ctxlua{context([==[\ColumnA + \ColumnB]==])}} ColumnABii: \the\dimexpr \ColumnABii\relax \externalfigure[cow][width=\dimexpr(\ColumnABii)\relax]
=== Sonstiges (problematisch) ==={{tex|newdimen}} is the native TeX method to initialise a dimension variable. The requirement to explicitly initialize your dimension variables is a bit clunky, but this method should still be preferred over [[#Storing dimensions as strings|storing dimensions as strings]].* {{tex|newdimen}} is by far the more common idiom* Values stored in a dimension register with {{cmd|newdimen}} can be accessed directly from Lua, which is not true for values stored in a macro with {{tex|def}} or {{cmd|definemeasure}}.
The following example shows how to set and access dimensions:
\define\variableA {20mm}<context mode="mkiv" source="yes"> \newdimen\variableB columnA % initialise variable\variableB columnA= 30mm10mm % set variable
Column A is \variableA the\columnA{} wide. % kann direkt ausgegeben werden:lengths are automatically \variableA % displayed in pt.
Column A is \variableB number\columnA sp wide. % internally, lengths are stored % kann nicht direkt ausgegeben werden ... ist aber auch nicht nötig.as an integer number of sp
Bei \define ist die Berechnung einer neuen Variable mit \dimexpr nicht möglich, wohl aber in Befehlen, wie \externalfigure, z.B. \externalfigure[cow]blackrule[width=\variableA *2columnA]</context>
In \newdimen können Berechnungen mit \dimexpr vorgenommen und in eine neue Variable gespeichert werden: \newdimen\variableC \variableC = \dimexpr(\variableB * 2)= Converting dimensions ==
\newdimen- und \define-Variable lassen sich wohl doch mischenUsually, you will want to express a dimension in something other than points orscaled points. Das scheint falsch zu seinFor this, Lua is the way to go: \newdimen kann nicht mit Variablen rechnen, die mit \define festgelegt wurden.
* If you want to print, the functions {{code|number.tocentimeters}}, {{code|topoints}}, {{code|topicas}}, etc. are already provided. These functions return a number as a string with (by default) the unit abbreviation appended. * If you want to calculate, the conversion factors from standard points are stored in {{code|number.dimenfactors}}. For example, {{code|65536 * number.dimenfactors["pt"]}} returns {{code|1}}. <context source=yes mode=mkiv>\newdimen\columnA % initialise variable\columnA=10mm % set variable \startluacode local A = tex.dimen.columnA -- access a dimen value  -- internal unit: scaled points (integer) context("Column A is %d scaled points", A) context.par()  -- default conversion: 15 digits, unit at the end, no space context("Column A is %s", number.tocentimeters(A)) context.par()  -- expressing a dimen in cm, rounded to 0.01, no automatic unit context("Column A is %s cm", number.tocentimeters(A, "%.2f")) context.par()  -- converting from mm to cm local inmm = 10 local incm = inmm / number.dimenfactors["mm"] * number.dimenfactors["cm"] context("Column A is %.1f cm", incm)\stopluacode</context> == Calculating with dimensions == From TeX, you can compute with dimensions by writing your calculation between {{tex|dimexpr}}{{code|...}}{{tex|relax}}. Such an expression may only occur where a length is expected. Spaces are allowed, but never required. <context mode=mkiv source=yes>\newdimen\columnA\columnA=1cm 0.5 cm equals \the\dimexpr \columnA / 2 \relax. \blackrule[width=\dimexpr 2 \columnA\relax]</context> In Lua, dimensions are a number of scaled points, and you can do all the usual things. TeX uses integers for dimens, but Lua treats them as floats; the number will only be coerced to integer when you retrieve from, or assign to, {{code|tex.dimen.somevalue}}. Not that half a scaled point is much to worry about. <context mode= Offene Fragen mkiv source=yes>\newdimen\columnA\columnA=1cm \startluacode local A = tex.dimen.columnA double_A = 2 * A context.blackrule({width = double_A .. "sp"})\stopluacode</context> ;More examples: <context mode=mkiv source=yes> \newdimen\AAA \AAA=100pt \newdimen\BBB \BBB=\AAA  AAA is \the\AAA  BBB is \the\BBB</context> == Storing dimensions as strings == Because TeX expands macros, expandwe can store a dimension string like {{code|10pt}}in a macro, and insert that in any place TeX expects a dimension. You can use a plain {{tex|def}}; or you can define dimensions with {{cmd|definemeasure|[...]}} and retrieve them with {{cmd|measure|{...}|}}. <context mode=mkiv source=yes>\definemeasure[One][10mm]\def\Two{20mm} \definemeasure[Three][\dimexpr \measure{One} + \Two\relax] \blackrule[width=\measure{One}] \crlf\blackrule[width=\Two] \crlf\blackrule[width=\measure{Three}]\crlf</context> == Conversion table == Bold numbers indicate conversions that are set by definition. {| class="wikitable"|-! unit !! TeX name! in sp !! in pt !! in pc !! in dd !! in cc! in bp !! in in !! in cm !! in mm|-| scaled point || {{code|sp}}| 1 || '''1/65536''' || || ||| || || || |-| point || {{code|pt}}| '''65536''' || 1 || '''1/12''' || 0.9346 || 0.0779| 0.9963 || '''1/72.27''' || 0.3516 || 0.0351|-| pica || {{code|pc}}| 786432 || '''12''' || 1 || 11.2149 || 0.9346| 11.9552 || 0.1660 || 4.2175 || 0.4218|-| didot || {{code|dd}}| 70124.081 || 1.0700 || 0.0892 || 1 || '''1/12'''| 1.0660 || 0.0148 || 0.3761 || 0.0376|-| cicero || {{code|cc}}| 841488.98 || 12.8401 || 1.0700 || '''12''' || 1| 12.7921 || 0.1777 || 4.5128 || 0.45128|-| big point || {{code|bp}}| 65781.76 || 1.0038 || 0.0836 || 0.9381 || 0.0782| 1 || '''1/72''' || 0.3528 || 0.0353|-| inch || {{code|in}}| 4736286.7 || '''72.27''' || 6.0225 || 67.5415 || 5.6284| '''72''' || 1 || 25.4 || 2.54|-| millimeter || {{code|mm}}| 186467.98 || 2.8453 || 0.2371 || 2.6591 || 0.2216| 2.8346 || 0.0394 || 1 || 0.1|-| centimeter || {{code|cm}}| 1864679.8 || 28.4528 || 2.3711 || 26.5911 || 2.2159| 28.3464 || 0.39370 || 10 || 1|-|} == See also ==* {{cmd|definemeasure}}* {{cmd|measure}}
[[Category:ConTeXt-Issues]]
[[Category:Programming]]
[[Category:Dimensions|!]]

Navigation menu