#import "@preview/cetz:0.1.1" #let availableColors = ( black: rgb("#000"), brown: rgb("#563829"), red: red, orange: rgb("#FE5000"), yellow: yellow, green: rgb("#046d20"), blue: rgb("#001184"), violet: rgb("#9400d3"), grey: rgb("#4B4E53"), white: rgb("#fff"), gold: rgb("#FFC42E"), silver: rgb("#A8A9AD"), ) #let labelWidth = 25.4mm #let labelHeight = 48.5mm #let resistorLabel(resistance, prefix, precision, power, horizontal: false, ..colors) = { let colors = colors.pos() assert(colors.all(it => availableColors.keys().contains(it)), message: "Unsupported color: Only " + availableColors.keys().join(", ") + " are supported") assert((4,5, 6).any(it => it == colors.len()), message: "Only 4, 5 or 6 ring resistors are supported") box(width: 0.5*labelWidth - 1pt)[#pad(y: 15pt)[ #align(center)[ #set text(size: 10pt) *$resistance""space.thin""upright(prefix)Omega$* \ #v(4pt) $precision""space.thin""%$ \ #v(4pt) $power""space.thin""upright(W)$ \ #cetz.canvas(length: .25*labelWidth, debug: false, { import cetz.draw: * set-style( // Stroke and fill for only rectangles rect: (stroke: (thickness: .4pt)), ) let resColor = if colors.len() == 4 { yellow.lighten(75%) } else { blue.lighten(75%) } if horizontal == false { rotate((z: 90deg)) scale((x: 1.5, y: 1.5)) } line((), (rel: (.2, 0))) rect((rel: (0, -0.2)), (rel: (1.5, 0.4)), name: "res", fill: resColor) line("res.right", (rel: (.2, 0))) set-origin("res.bottom-left") set-style( // Stroke and fill for only rectangles rect: (stroke: (thickness: .1pt)), ) if colors.len() == 4 { rect((0.2,0), (.3,.4), fill: availableColors.at(colors.at(0))) rect((0.45,0), (.55,.4), fill: availableColors.at(colors.at(1))) rect((0.65,0), (.75,.4), fill: availableColors.at(colors.at(2))) rect((1.25,0), (1.35,.4), fill: availableColors.at(colors.at(3))) } else if colors.len() == 5 { rect((0.2,0), (.3,.4), fill: availableColors.at(colors.at(0))) rect((0.4,0), (.5,.4), fill: availableColors.at(colors.at(1))) rect((0.6,0), (.7,.4), fill: availableColors.at(colors.at(2))) rect((0.8,0), (.9,.4), fill: availableColors.at(colors.at(3))) rect((1.25,0), (1.35,.4), fill: availableColors.at(colors.at(4))) } else { rect((0.2,0), (.3,.4), fill: availableColors.at(colors.at(0))) rect((0.4,0), (.5,.4), fill: availableColors.at(colors.at(1))) rect((0.6,0), (.7,.4), fill: availableColors.at(colors.at(2))) rect((0.8,0), (.9,.4), fill: availableColors.at(colors.at(3))) rect((1,0), (1.1,.4), fill: availableColors.at(colors.at(4))) rect((1.25,0), (1.35,.4), fill: availableColors.at(colors.at(5))) } }) ] ]] } #let createLabelPage(start: 1, ..labels) = { let arr = () let label_set = labels.pos() for i in range(1, 45) { if i >= start { if i - start < label_set.len() { arr.push(label_set.at(i - start)) } } else { arr.push("") } } page(paper: "a4", flipped: true, margin: (x: 8.8mm, y: 8mm),)[ #table( rows: (labelHeight, labelHeight, labelHeight, labelHeight), columns:(labelWidth, labelWidth, labelWidth, labelWidth, labelWidth, labelWidth, labelWidth, labelWidth, labelWidth, labelWidth, labelWidth), stroke: 1pt + black, inset: 0pt, ..arr ) ] } #let labelSet(res1, res2) = [ #box(clip: true, width: 100%, height: 100%)[ #stack(dir: ltr)[#res1][#rect(height: 100%, width: 1.5pt, fill: red)][#res2] ] ] #grid( columns: (labelWidth, labelWidth), rows: (auto), row-gutter: 20pt, resistorLabel(horizontal: true, 4.7 ,"k", 0.1, 1, "yellow", "brown", "red", "yellow"), resistorLabel(4.7 ,"k", 0.1, 1, "yellow", "grey", "silver", "red", "yellow"), resistorLabel(4.7 ,"k", 0.1, 1, "yellow", "brown", "red", "brown", "green", "violet") ) #box(stroke: 0.1pt + black,)[ #stack(dir: ltr)[#resistorLabel(4.7, "k", 0.1, 1, "yellow", "brown", "red", "yellow")][#rect(height: 2.4cm + 10pt, width: 2pt, fill: red)][#resistorLabel(100, "k", 0.1, 1/4, "yellow", "brown", "red", "yellow", "blue")] ] #box(stroke: 0.1pt + black, clip: true, width: labelWidth)[ #stack(dir: ltr)[#resistorLabel(4.7, "k", 0.1, 1, "yellow", "brown", "red", "yellow")][#rect(height: 2.4cm + 10pt, width: 2pt, fill: red)][#resistorLabel(100, "k", 0.1, 1/4, "yellow", "brown", "red", "yellow", "blue")] ] #page(paper: "a4", flipped: true, margin: (x: 8.8mm, y: 8mm),)[ #table( rows: (labelHeight, labelHeight, labelHeight, labelHeight), columns:(labelWidth, labelWidth, labelWidth, labelWidth, labelWidth, labelWidth, labelWidth, labelWidth, labelWidth, labelWidth, labelWidth), fill: gray.lighten(50%), stroke: 1pt + black, inset: 0pt, [#box(stroke: 0.1pt + black, clip: true, width: 100%, height: 100%)[ #stack(dir: ltr)[#resistorLabel(4.7, "k", 0.1, 1, "yellow", "brown", "red", "yellow")][#rect(height: 100%, width: 1.5pt, fill: red)][#resistorLabel(100, "k", 0.1, 1/4, "yellow", "brown", "red", "yellow", "blue")] ]],[],[],[],[],labelSet(resistorLabel(4.7, "k", 0.1, 1, "yellow", "brown", "red", "yellow"), resistorLabel(100, "k", 0.1, 1/4, "yellow", "brown", "red", "yellow", "blue"))) ] #createLabelPage(start: 5, labelSet( resistorLabel(1, "k", 0.1, 1, "yellow", "brown", "red", "yellow"), resistorLabel(5, "M", 5, 200, "green", "blue", "red", "red", "gold") ), labelSet( resistorLabel(4.7, "k", 0.1, 1, "yellow", "brown", "red", "yellow", "silver"), resistorLabel(100, "k", 0.1, 1/4, "yellow", "brown", "red", "yellow", "blue") ) )