Knit and Purl

'Knits' and 'purls' are the two main types of stitches that can be formed when knitting. The are the reverse of each other; knits having a v-like appearance, and purls getting their name from their pearl-like appearance.

When knitting plainly on a single bed of a flat knitting machine, purl stitches are produced as part of the fabric (even if that wasn't the creator's intention). This is because the orientation of intermeshed loops during the stitch formation process plays a role in the resulting stitches' visual appearance. In a knit stitch, the base of a top loop runs under the head of the loop below it, which means on the reverse side, the head of the bottom loop rests over the base on the top loop—forming a purl stitch. This 'plain' fabric is called single jersey, and has knit stitches on the front and purl stitches on the back.

The combination of knit and purl stitches is a technique that is used extensively in knitting to create various stitch patterns. One popular application is ribbing, which increases the elasticity of a fabric by alternating between knit and purl stitches in some interval during each row, allowing the fabric to become more stretchy. Purls and knits are also incoporated into the face of fabrics in patterns like seed stitch and garter stitch by creating back knits.

for written in
//title: Rib Sheet (javascript with knitout module)

//include knitout module:
const knitout = require('knitout'); //include knitout module
const K = new knitout.Writer({ carriers:['1', '2', '3', '4', '5', '6'] });
K.addHeader('Machine', 'Kniterate');

//Parameters:
let min = 1; //needle number of left edge
let max = 20; //needle number of right edge
let rows = 20; //number of rows to knit
let carrier = "3"; //carrier name

// ---- set up initial loops and yarn carrier ----
//Bring in carrier:
K.in(carrier);

//On Kniterate machines, carriers start on the left,
//so will start tucking onto needles left-to-right,
//and will be sure to tuck the leftmost needle in the first pass:
for (let n = min; n <= max; n += 1) {
	//tuck alternating needles, making sure to do the left edge:
	if ((n - min) % 2 === 0) {
		K.tuck("+", 'f' + n, carrier);
	}
}
//now, moving right-to-left, tuck the needles that were not tucked on the first pass:
for (let n = max; n >= min; n -= 1) {
	if ((n - min) % 2 !== 0) {
		K.tuck("-", 'f' + n, carrier);
	}
}

//knit three plain rows to allow cast-on stitches to relax:
// three isn't set in stone here -- it's just convenient
// for this example code to have the carrier end up on the right.
for (let n = min; n <= max; n += 1) {
	K.knit("+", 'f' + n, carrier);
}
for (let n = max; n >= min; n -= 1) {
	K.knit("-", 'f' + n, carrier);
}
for (let n = min; n <= max; n += 1) {
	K.knit("+", 'f' + n, carrier);
}

// ---- rib sheet ----
//Create a 1x1 rib (alternating front- and back-knit columns) sheet.
//move every other loop to the back bed, starting from the right:
for (let n = min; n <= max; n += 1) {
	if ((max-n) % 2 !== 0) {
		K.xfer('f' + n, 'b' + n);
	}
}

//knit the main part of the sheet
for (let r = 0; r <= rows; r += 1) {
	if (r % 2 === 0) {
		//knit even rows as left-going:
		for (let n = max; n >= min; n -= 1) {
			if ((max-n) % 2 === 0) {
				K.knit("-", 'f' + n, carrier);
			} else {
				K.knit("-", 'b' + n, carrier);
			}
		}
	} else {
		//knit odd rows as right-going:
		for (let n = min; n <= max; n += 1) {
			if ((max-n) % 2 === 0) {
				K.knit("+", 'f' + n, carrier);
			} else {
				K.knit("+", 'b' + n, carrier);
			}
		}
	}
}

//return loops to the front bed (not needed if just dropping, useful if continuing to knit):
for (let n = min; n <= max; n += 1) {
	if ((max-n) % 2 !== 0) {
		K.xfer('b' + n, 'f' + n);
	}
}

// ---- take carrier out and drop remaining loops ----
//Send carrier back to its parking location:
K.out(carrier);

//drop loops:
for (let n = min; n <= max; n += 1) {
	K.drop('f' + n);
}

K.write('rib-sheet.kniterate.k');
;!knitout-2
;;Machine: Kniterate
;;Carriers: 1 2 3 4 5 6

;title: Rib Sheet (raw knitout)

;Parameters:
; min = 1 -- needle number of left edge
; max = 20 -- needle number of right edge
; rows = 20 -- number of rows to knit
; carrier = "3" -- carrier name

; ---- set up initial loops and yarn carrier ----
;Bring in carrier:
in 3

;On Kniterate machines, carriers start on the left,
;so will start tucking onto needles left-to-right,
;and will be sure to tuck the leftmost needle in the first pass:
tuck + f1 3
tuck + f3 3
tuck + f5 3
tuck + f7 3
tuck + f9 3
tuck + f11 3
tuck + f13 3
tuck + f15 3
tuck + f17 3
tuck + f19 3
;now, moving right-to-left, tuck the needles that were not tucked on the first pass:
tuck - f20 3
tuck - f18 3
tuck - f16 3
tuck - f14 3
tuck - f12 3
tuck - f10 3
tuck - f8 3
tuck - f6 3
tuck - f4 3
tuck - f2 3

;knit three plain rows to allow cast-on stitches to relax:
; three isn't set in stone here -- it's just convenient
; for this example code to have the carrier end up on the right.
knit + f1 3
knit + f2 3
knit + f3 3
knit + f4 3
knit + f5 3
knit + f6 3
knit + f7 3
knit + f8 3
knit + f9 3
knit + f10 3
knit + f11 3
knit + f12 3
knit + f13 3
knit + f14 3
knit + f15 3
knit + f16 3
knit + f17 3
knit + f18 3
knit + f19 3
knit + f20 3
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
knit + f1 3
knit + f2 3
knit + f3 3
knit + f4 3
knit + f5 3
knit + f6 3
knit + f7 3
knit + f8 3
knit + f9 3
knit + f10 3
knit + f11 3
knit + f12 3
knit + f13 3
knit + f14 3
knit + f15 3
knit + f16 3
knit + f17 3
knit + f18 3
knit + f19 3
knit + f20 3

; ---- rib sheet ----
;Create a 1x1 rib (alternating front- and back-knit columns) sheet.
;move every other loop to the back bed, starting from the right:
xfer f1 b1
xfer f3 b3
xfer f5 b5
xfer f7 b7
xfer f9 b9
xfer f11 b11
xfer f13 b13
xfer f15 b15
xfer f17 b17
xfer f19 b19

;knit the main part of the sheet
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - f18 3
knit - b17 3
knit - f16 3
knit - b15 3
knit - f14 3
knit - b13 3
knit - f12 3
knit - b11 3
knit - f10 3
knit - b9 3
knit - f8 3
knit - b7 3
knit - f6 3
knit - b5 3
knit - f4 3
knit - b3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + b3 3
knit + f4 3
knit + b5 3
knit + f6 3
knit + b7 3
knit + f8 3
knit + b9 3
knit + f10 3
knit + b11 3
knit + f12 3
knit + b13 3
knit + f14 3
knit + b15 3
knit + f16 3
knit + b17 3
knit + f18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - f18 3
knit - b17 3
knit - f16 3
knit - b15 3
knit - f14 3
knit - b13 3
knit - f12 3
knit - b11 3
knit - f10 3
knit - b9 3
knit - f8 3
knit - b7 3
knit - f6 3
knit - b5 3
knit - f4 3
knit - b3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + b3 3
knit + f4 3
knit + b5 3
knit + f6 3
knit + b7 3
knit + f8 3
knit + b9 3
knit + f10 3
knit + b11 3
knit + f12 3
knit + b13 3
knit + f14 3
knit + b15 3
knit + f16 3
knit + b17 3
knit + f18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - f18 3
knit - b17 3
knit - f16 3
knit - b15 3
knit - f14 3
knit - b13 3
knit - f12 3
knit - b11 3
knit - f10 3
knit - b9 3
knit - f8 3
knit - b7 3
knit - f6 3
knit - b5 3
knit - f4 3
knit - b3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + b3 3
knit + f4 3
knit + b5 3
knit + f6 3
knit + b7 3
knit + f8 3
knit + b9 3
knit + f10 3
knit + b11 3
knit + f12 3
knit + b13 3
knit + f14 3
knit + b15 3
knit + f16 3
knit + b17 3
knit + f18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - f18 3
knit - b17 3
knit - f16 3
knit - b15 3
knit - f14 3
knit - b13 3
knit - f12 3
knit - b11 3
knit - f10 3
knit - b9 3
knit - f8 3
knit - b7 3
knit - f6 3
knit - b5 3
knit - f4 3
knit - b3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + b3 3
knit + f4 3
knit + b5 3
knit + f6 3
knit + b7 3
knit + f8 3
knit + b9 3
knit + f10 3
knit + b11 3
knit + f12 3
knit + b13 3
knit + f14 3
knit + b15 3
knit + f16 3
knit + b17 3
knit + f18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - f18 3
knit - b17 3
knit - f16 3
knit - b15 3
knit - f14 3
knit - b13 3
knit - f12 3
knit - b11 3
knit - f10 3
knit - b9 3
knit - f8 3
knit - b7 3
knit - f6 3
knit - b5 3
knit - f4 3
knit - b3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + b3 3
knit + f4 3
knit + b5 3
knit + f6 3
knit + b7 3
knit + f8 3
knit + b9 3
knit + f10 3
knit + b11 3
knit + f12 3
knit + b13 3
knit + f14 3
knit + b15 3
knit + f16 3
knit + b17 3
knit + f18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - f18 3
knit - b17 3
knit - f16 3
knit - b15 3
knit - f14 3
knit - b13 3
knit - f12 3
knit - b11 3
knit - f10 3
knit - b9 3
knit - f8 3
knit - b7 3
knit - f6 3
knit - b5 3
knit - f4 3
knit - b3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + b3 3
knit + f4 3
knit + b5 3
knit + f6 3
knit + b7 3
knit + f8 3
knit + b9 3
knit + f10 3
knit + b11 3
knit + f12 3
knit + b13 3
knit + f14 3
knit + b15 3
knit + f16 3
knit + b17 3
knit + f18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - f18 3
knit - b17 3
knit - f16 3
knit - b15 3
knit - f14 3
knit - b13 3
knit - f12 3
knit - b11 3
knit - f10 3
knit - b9 3
knit - f8 3
knit - b7 3
knit - f6 3
knit - b5 3
knit - f4 3
knit - b3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + b3 3
knit + f4 3
knit + b5 3
knit + f6 3
knit + b7 3
knit + f8 3
knit + b9 3
knit + f10 3
knit + b11 3
knit + f12 3
knit + b13 3
knit + f14 3
knit + b15 3
knit + f16 3
knit + b17 3
knit + f18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - f18 3
knit - b17 3
knit - f16 3
knit - b15 3
knit - f14 3
knit - b13 3
knit - f12 3
knit - b11 3
knit - f10 3
knit - b9 3
knit - f8 3
knit - b7 3
knit - f6 3
knit - b5 3
knit - f4 3
knit - b3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + b3 3
knit + f4 3
knit + b5 3
knit + f6 3
knit + b7 3
knit + f8 3
knit + b9 3
knit + f10 3
knit + b11 3
knit + f12 3
knit + b13 3
knit + f14 3
knit + b15 3
knit + f16 3
knit + b17 3
knit + f18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - f18 3
knit - b17 3
knit - f16 3
knit - b15 3
knit - f14 3
knit - b13 3
knit - f12 3
knit - b11 3
knit - f10 3
knit - b9 3
knit - f8 3
knit - b7 3
knit - f6 3
knit - b5 3
knit - f4 3
knit - b3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + b3 3
knit + f4 3
knit + b5 3
knit + f6 3
knit + b7 3
knit + f8 3
knit + b9 3
knit + f10 3
knit + b11 3
knit + f12 3
knit + b13 3
knit + f14 3
knit + b15 3
knit + f16 3
knit + b17 3
knit + f18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - f18 3
knit - b17 3
knit - f16 3
knit - b15 3
knit - f14 3
knit - b13 3
knit - f12 3
knit - b11 3
knit - f10 3
knit - b9 3
knit - f8 3
knit - b7 3
knit - f6 3
knit - b5 3
knit - f4 3
knit - b3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + b3 3
knit + f4 3
knit + b5 3
knit + f6 3
knit + b7 3
knit + f8 3
knit + b9 3
knit + f10 3
knit + b11 3
knit + f12 3
knit + b13 3
knit + f14 3
knit + b15 3
knit + f16 3
knit + b17 3
knit + f18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - f18 3
knit - b17 3
knit - f16 3
knit - b15 3
knit - f14 3
knit - b13 3
knit - f12 3
knit - b11 3
knit - f10 3
knit - b9 3
knit - f8 3
knit - b7 3
knit - f6 3
knit - b5 3
knit - f4 3
knit - b3 3
knit - f2 3
knit - b1 3

;return loops to the front bed (not needed if just dropping, useful if continuing to knit):
xfer b1 f1
xfer b3 f3
xfer b5 f5
xfer b7 f7
xfer b9 f9
xfer b11 f11
xfer b13 f13
xfer b15 f15
xfer b17 f17
xfer b19 f19

; ---- take carrier out and drop remaining loops ----
;Send carrier back to its parking location:
out 3

;drop loops:
drop f1
drop f2
drop f3
drop f4
drop f5
drop f6
drop f7
drop f8
drop f9
drop f10
drop f11
drop f12
drop f13
drop f14
drop f15
drop f16
drop f17
drop f18
drop f19
drop f20
//title: Rib Sheet (plain javascript)

//Write header:
console.log(';!knitout-2');
console.log(';;Machine: Kniterate');
console.log(';;Carriers: 1 2 3 4 5 6');

//Parameters:
let min = 1; //needle number of left edge
let max = 20; //needle number of right edge
let rows = 20; //number of rows to knit
let carrier = "3"; //carrier name

// ---- set up initial loops and yarn carrier ----
//Bring in carrier:
console.log(`in ${carrier}`);

//On Kniterate machines, carriers start on the left,
//so will start tucking onto needles left-to-right,
//and will be sure to tuck the leftmost needle in the first pass:
for (let n = min; n <= max; n += 1) {
	//tuck alternating needles, making sure to do the left edge:
	if ((n - min) % 2 === 0) {
		console.log(`tuck + f${n} ${carrier}`);
	}
}
//now, moving right-to-left, tuck the needles that were not tucked on the first pass:
for (let n = max; n >= min; n -= 1) {
	if ((n - min) % 2 !== 0) {
		console.log(`tuck - f${n} ${carrier}`);
	}
}

//knit three plain rows to allow cast-on stitches to relax:
// three isn't set in stone here -- it's just convenient
// for this example code to have the carrier end up on the right.
for (let n = min; n <= max; n += 1) {
	console.log(`knit + f${n} ${carrier}`);
}
for (let n = max; n >= min; n -= 1) {
	console.log(`knit - f${n} ${carrier}`);
}
for (let n = min; n <= max; n += 1) {
	console.log(`knit + f${n} ${carrier}`);
}

// ---- rib sheet ----
//Create a 1x1 rib (alternating front- and back-knit columns) sheet.
//move every other loop to the back bed, starting from the right:
for (let n = min; n <= max; n += 1) {
	if ((max-n) % 2 !== 0) {
		console.log(`xfer f${n} b${n}`);
	}
}

//knit the main part of the sheet
for (let r = 0; r <= rows; r += 1) {
	if (r % 2 === 0) {
		//knit even rows as left-going:
		for (let n = max; n >= min; n -= 1) {
			if ((max-n) % 2 === 0) {
				console.log(`knit - f${n} ${carrier}`);
			} else {
				console.log(`knit - b${n} ${carrier}`);
			}
		}
	} else {
		//knit odd rows as right-going:
		for (let n = min; n <= max; n += 1) {
			if ((max-n) % 2 === 0) {
				console.log(`knit + f${n} ${carrier}`);
			} else {
				console.log(`knit + b${n} ${carrier}`);
			}
		}
	}
}

//return loops to the front bed (not needed if just dropping, useful if continuing to knit):
for (let n = min; n <= max; n += 1) {
	if ((max-n) % 2 !== 0) {
		console.log(`xfer b${n} f${n}`);
	}
}

// ---- take carrier out and drop remaining loops ----
//Send carrier back to its parking location:
console.log(`out ${carrier}`);

//drop loops:
for (let n = min; n <= max; n += 1) {
	console.log(`drop f${n}`);
}
#title: Rib Sheet (plain python)

#Write header:
print(';!knitout-2')
print(';;Machine: Kniterate')
print(';;Carriers: 1 2 3 4 5 6')

#Parameters:
min = 1 #needle number of left edge
max = 20 #needle number of right edge
rows = 20 #number of rows to knit
carrier = "3" #carrier name

# ---- set up initial loops and yarn carrier ----
#Bring in carrier:
print(f"in {carrier}")

#On Kniterate machines, carriers start on the left,
#so will start tucking onto needles left-to-right,
#and will be sure to tuck the leftmost needle in the first pass:
for n in range(min, max+1, 1):
	#tuck alternating needles, making sure to do the left edge:
	if (n - min) % 2 == 0:
		print(f"tuck + f{n} {carrier}")
#now, moving right-to-left, tuck the needles that were not tucked on the first pass:
for n in range(max, min-1, -1):
	if (n - min) % 2 != 0:
		print(f"tuck - f{n} {carrier}")

#knit three plain rows to allow cast-on stitches to relax:
# three isn't set in stone here -- it's just convenient
# for this example code to have the carrier end up on the right.
for n in range(min, max+1, 1):
	print(f"knit + f{n} {carrier}")
for n in range(max, min-1, -1):
	print(f"knit - f{n} {carrier}")
for n in range(min, max+1, 1):
	print(f"knit + f{n} {carrier}")

# ---- rib sheet ----
#Create a 1x1 rib (alternating front- and back-knit columns) sheet.
#move every other loop to the back bed, starting from the right:
for n in range(min, max+1, 1):
	if (max-n) % 2 != 0:
		print(f"xfer f{n} b{n}")

#knit the main part of the sheet
for r in range(0, rows+1, 1):
	if r % 2 == 0:
		#knit even rows as left-going:
		for n in range(max, min-1, -1):
			if (max-n) % 2 == 0:
				print(f"knit - f{n} {carrier}")
			else:
				print(f"knit - b{n} {carrier}")
	else:
		#knit odd rows as right-going:
		for n in range(min, max+1, 1):
			if (max-n) % 2 == 0:
				print(f"knit + f{n} {carrier}")
			else:
				print(f"knit + b{n} {carrier}")

#return loops to the front bed (not needed if just dropping, useful if continuing to knit):
for n in range(min, max+1, 1):
	if (max-n) % 2 != 0:
		print(f"xfer b{n} f{n}")

# ---- take carrier out and drop remaining loops ----
#Send carrier back to its parking location:
print(f"out {carrier}")

#drop loops:
for n in range(min, max+1, 1):
	print(f"drop f{n}")
#title: Rib Sheet (python with knitout module)

import knitout
K = knitout.Writer('1 2 3 4 5 6');
K.addHeader('Machine', 'Kniterate');

#Parameters:
min = 1 #needle number of left edge
max = 20 #needle number of right edge
rows = 20 #number of rows to knit
carrier = "3" #carrier name

# ---- set up initial loops and yarn carrier ----
#Bring in carrier:
K.ingripper(carrier)

#On Kniterate machines, carriers start on the left,
#so will start tucking onto needles left-to-right,
#and will be sure to tuck the leftmost needle in the first pass:
for n in range(min, max+1, 1):
	#tuck alternating needles, making sure to do the left edge:
	if (n - min) % 2 == 0:
		K.tuck("+", 'f' + str(n), carrier)
#now, moving right-to-left, tuck the needles that were not tucked on the first pass:
for n in range(max, min-1, -1):
	if (n - min) % 2 != 0:
		K.tuck("-", 'f' + str(n), carrier)

#knit three plain rows to allow cast-on stitches to relax:
# three isn't set in stone here -- it's just convenient
# for this example code to have the carrier end up on the right.
for n in range(min, max+1, 1):
	K.knit("+", 'f' + str(n), carrier)
for n in range(max, min-1, -1):
	K.knit("-", 'f' + str(n), carrier)
for n in range(min, max+1, 1):
	K.knit("+", 'f' + str(n), carrier)

# ---- rib sheet ----
#Create a 1x1 rib (alternating front- and back-knit columns) sheet.
#move every other loop to the back bed, starting from the right:
for n in range(min, max+1, 1):
	if (max-n) % 2 != 0:
		K.xfer('f' + str(n), 'b' + str(n))

#knit the main part of the sheet
for r in range(0, rows+1, 1):
	if r % 2 == 0:
		#knit even rows as left-going:
		for n in range(max, min-1, -1):
			if (max-n) % 2 == 0:
				K.knit("-", 'f' + str(n), carrier)
			else:
				K.knit("-", 'b' + str(n), carrier)
	else:
		#knit odd rows as right-going:
		for n in range(min, max+1, 1):
			if (max-n) % 2 == 0:
				K.knit("+", 'f' + str(n), carrier)
			else:
				K.knit("+", 'b' + str(n), carrier)

#return loops to the front bed (not needed if just dropping, useful if continuing to knit):
for n in range(min, max+1, 1):
	if (max-n) % 2 != 0:
		K.xfer('b' + str(n), 'f' + str(n))

# ---- take carrier out and drop remaining loops ----
#Send carrier back to its parking location:
K.outgripper(carrier)

#drop loops:
for n in range(min, max+1, 1):
	K.drop('f' + str(n))

K.write('rib-sheet.kniterate.k')
//title: Rib Sheet (javascript with knitout module)

//include knitout module:
const knitout = require('knitout'); //include knitout module
const K = new knitout.Writer({ carriers:['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'] });
K.addHeader('Machine', 'SWGN2');

//Parameters:
let min = 1; //needle number of left edge
let max = 20; //needle number of right edge
let rows = 20; //number of rows to knit
let carrier = "3"; //carrier name

// ---- set up initial loops and yarn carrier ----
//Bring in carrier:
K.inhook(carrier);
//Set stitch table entry for cast-on:
K.stitchNumber(101);

//On SWGN2 machines, carriers start on the right,
//so will start tucking onto needles right-to-left,
//and will be sure to tuck the rightmost needle in the first pass:
for (let n = max; n >= min; n -= 1) {
	//tuck alternating needles, making sure to do the right edge:
	if ((max - n) % 2 === 0) {
		K.tuck("-", 'f' + n, carrier);
	}
}
//now, moving left-to-right, tuck the needles that were not tucked on the first pass:
for (let n = min; n <= max; n += 1) {
	if ((max - n) % 2 !== 0) {
		K.tuck("+", 'f' + n, carrier);
	}
}
//Set stitch table entry for knitting:
K.stitchNumber(105);
//knit two plain rows to allow cast-on stitches to relax:
// two isn't set in stone here -- it's just convenient
// for this example code to have the carrier end up on the right.
for (let n = max; n >= min; n -= 1) {
	K.knit("-", 'f' + n, carrier);
}
//send out yarn inserting hook; it is no longer needed to hold the yarn in place:
K.releasehook(carrier);
for (let n = min; n <= max; n += 1) {
	K.knit("+", 'f' + n, carrier);
}

// ---- rib sheet ----
//Create a 1x1 rib (alternating front- and back-knit columns) sheet.
//move every other loop to the back bed, starting from the right:
for (let n = min; n <= max; n += 1) {
	if ((max-n) % 2 !== 0) {
		K.xfer('f' + n, 'b' + n);
	}
}

//knit the main part of the sheet
for (let r = 0; r <= rows; r += 1) {
	if (r % 2 === 0) {
		//knit even rows as left-going:
		for (let n = max; n >= min; n -= 1) {
			if ((max-n) % 2 === 0) {
				K.knit("-", 'f' + n, carrier);
			} else {
				K.knit("-", 'b' + n, carrier);
			}
		}
	} else {
		//knit odd rows as right-going:
		for (let n = min; n <= max; n += 1) {
			if ((max-n) % 2 === 0) {
				K.knit("+", 'f' + n, carrier);
			} else {
				K.knit("+", 'b' + n, carrier);
			}
		}
	}
}

//return loops to the front bed (not needed if just dropping, useful if continuing to knit):
for (let n = min; n <= max; n += 1) {
	if ((max-n) % 2 !== 0) {
		K.xfer('b' + n, 'f' + n);
	}
}

// ---- take carrier out and drop remaining loops ----
//Take carrier out with yarn inserting hook:
K.outhook(carrier);

//drop loops:
for (let n = min; n <= max; n += 1) {
	K.drop('f' + n);
}

K.write('rib-sheet.swgn2.k');
;!knitout-2
;;Machine: SWGN2
;;Carriers: 1 2 3 4 5 6 7 8 9 10

;title: Rib Sheet (raw knitout)

;Parameters:
; min = 1 -- needle number of left edge
; max = 20 -- needle number of right edge
; rows = 20 -- number of rows to knit
; carrier = "3" -- carrier name

; ---- set up initial loops and yarn carrier ----
;Bring in carrier:
inhook 3
;Set stitch table entry for cast-on:
x-stitch-number 101

;On SWGN2 machines, carriers start on the right,
;so will start tucking onto needles right-to-left,
;and will be sure to tuck the rightmost needle in the first pass:
tuck - f20 3
tuck - f18 3
tuck - f16 3
tuck - f14 3
tuck - f12 3
tuck - f10 3
tuck - f8 3
tuck - f6 3
tuck - f4 3
tuck - f2 3
;now, moving left-to-right, tuck the needles that were not tucked on the first pass:
tuck + f1 3
tuck + f3 3
tuck + f5 3
tuck + f7 3
tuck + f9 3
tuck + f11 3
tuck + f13 3
tuck + f15 3
tuck + f17 3
tuck + f19 3
;Set stitch table entry for knitting:
x-stitch-number 105
;knit two plain rows to allow cast-on stitches to relax:
; two isn't set in stone here -- it's just convenient
; for this example code to have the carrier end up on the right.
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
;send out yarn inserting hook; it is no longer needed to hold the yarn in place:
releasehook 3
knit + f1 3
knit + f2 3
knit + f3 3
knit + f4 3
knit + f5 3
knit + f6 3
knit + f7 3
knit + f8 3
knit + f9 3
knit + f10 3
knit + f11 3
knit + f12 3
knit + f13 3
knit + f14 3
knit + f15 3
knit + f16 3
knit + f17 3
knit + f18 3
knit + f19 3
knit + f20 3

; ---- rib sheet ----
;Create a 1x1 rib (alternating front- and back-knit columns) sheet.
;move every other loop to the back bed, starting from the right:
xfer f1 b1
xfer f3 b3
xfer f5 b5
xfer f7 b7
xfer f9 b9
xfer f11 b11
xfer f13 b13
xfer f15 b15
xfer f17 b17
xfer f19 b19

;knit the main part of the sheet
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - f18 3
knit - b17 3
knit - f16 3
knit - b15 3
knit - f14 3
knit - b13 3
knit - f12 3
knit - b11 3
knit - f10 3
knit - b9 3
knit - f8 3
knit - b7 3
knit - f6 3
knit - b5 3
knit - f4 3
knit - b3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + b3 3
knit + f4 3
knit + b5 3
knit + f6 3
knit + b7 3
knit + f8 3
knit + b9 3
knit + f10 3
knit + b11 3
knit + f12 3
knit + b13 3
knit + f14 3
knit + b15 3
knit + f16 3
knit + b17 3
knit + f18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - f18 3
knit - b17 3
knit - f16 3
knit - b15 3
knit - f14 3
knit - b13 3
knit - f12 3
knit - b11 3
knit - f10 3
knit - b9 3
knit - f8 3
knit - b7 3
knit - f6 3
knit - b5 3
knit - f4 3
knit - b3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + b3 3
knit + f4 3
knit + b5 3
knit + f6 3
knit + b7 3
knit + f8 3
knit + b9 3
knit + f10 3
knit + b11 3
knit + f12 3
knit + b13 3
knit + f14 3
knit + b15 3
knit + f16 3
knit + b17 3
knit + f18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - f18 3
knit - b17 3
knit - f16 3
knit - b15 3
knit - f14 3
knit - b13 3
knit - f12 3
knit - b11 3
knit - f10 3
knit - b9 3
knit - f8 3
knit - b7 3
knit - f6 3
knit - b5 3
knit - f4 3
knit - b3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + b3 3
knit + f4 3
knit + b5 3
knit + f6 3
knit + b7 3
knit + f8 3
knit + b9 3
knit + f10 3
knit + b11 3
knit + f12 3
knit + b13 3
knit + f14 3
knit + b15 3
knit + f16 3
knit + b17 3
knit + f18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - f18 3
knit - b17 3
knit - f16 3
knit - b15 3
knit - f14 3
knit - b13 3
knit - f12 3
knit - b11 3
knit - f10 3
knit - b9 3
knit - f8 3
knit - b7 3
knit - f6 3
knit - b5 3
knit - f4 3
knit - b3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + b3 3
knit + f4 3
knit + b5 3
knit + f6 3
knit + b7 3
knit + f8 3
knit + b9 3
knit + f10 3
knit + b11 3
knit + f12 3
knit + b13 3
knit + f14 3
knit + b15 3
knit + f16 3
knit + b17 3
knit + f18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - f18 3
knit - b17 3
knit - f16 3
knit - b15 3
knit - f14 3
knit - b13 3
knit - f12 3
knit - b11 3
knit - f10 3
knit - b9 3
knit - f8 3
knit - b7 3
knit - f6 3
knit - b5 3
knit - f4 3
knit - b3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + b3 3
knit + f4 3
knit + b5 3
knit + f6 3
knit + b7 3
knit + f8 3
knit + b9 3
knit + f10 3
knit + b11 3
knit + f12 3
knit + b13 3
knit + f14 3
knit + b15 3
knit + f16 3
knit + b17 3
knit + f18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - f18 3
knit - b17 3
knit - f16 3
knit - b15 3
knit - f14 3
knit - b13 3
knit - f12 3
knit - b11 3
knit - f10 3
knit - b9 3
knit - f8 3
knit - b7 3
knit - f6 3
knit - b5 3
knit - f4 3
knit - b3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + b3 3
knit + f4 3
knit + b5 3
knit + f6 3
knit + b7 3
knit + f8 3
knit + b9 3
knit + f10 3
knit + b11 3
knit + f12 3
knit + b13 3
knit + f14 3
knit + b15 3
knit + f16 3
knit + b17 3
knit + f18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - f18 3
knit - b17 3
knit - f16 3
knit - b15 3
knit - f14 3
knit - b13 3
knit - f12 3
knit - b11 3
knit - f10 3
knit - b9 3
knit - f8 3
knit - b7 3
knit - f6 3
knit - b5 3
knit - f4 3
knit - b3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + b3 3
knit + f4 3
knit + b5 3
knit + f6 3
knit + b7 3
knit + f8 3
knit + b9 3
knit + f10 3
knit + b11 3
knit + f12 3
knit + b13 3
knit + f14 3
knit + b15 3
knit + f16 3
knit + b17 3
knit + f18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - f18 3
knit - b17 3
knit - f16 3
knit - b15 3
knit - f14 3
knit - b13 3
knit - f12 3
knit - b11 3
knit - f10 3
knit - b9 3
knit - f8 3
knit - b7 3
knit - f6 3
knit - b5 3
knit - f4 3
knit - b3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + b3 3
knit + f4 3
knit + b5 3
knit + f6 3
knit + b7 3
knit + f8 3
knit + b9 3
knit + f10 3
knit + b11 3
knit + f12 3
knit + b13 3
knit + f14 3
knit + b15 3
knit + f16 3
knit + b17 3
knit + f18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - f18 3
knit - b17 3
knit - f16 3
knit - b15 3
knit - f14 3
knit - b13 3
knit - f12 3
knit - b11 3
knit - f10 3
knit - b9 3
knit - f8 3
knit - b7 3
knit - f6 3
knit - b5 3
knit - f4 3
knit - b3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + b3 3
knit + f4 3
knit + b5 3
knit + f6 3
knit + b7 3
knit + f8 3
knit + b9 3
knit + f10 3
knit + b11 3
knit + f12 3
knit + b13 3
knit + f14 3
knit + b15 3
knit + f16 3
knit + b17 3
knit + f18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - f18 3
knit - b17 3
knit - f16 3
knit - b15 3
knit - f14 3
knit - b13 3
knit - f12 3
knit - b11 3
knit - f10 3
knit - b9 3
knit - f8 3
knit - b7 3
knit - f6 3
knit - b5 3
knit - f4 3
knit - b3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + b3 3
knit + f4 3
knit + b5 3
knit + f6 3
knit + b7 3
knit + f8 3
knit + b9 3
knit + f10 3
knit + b11 3
knit + f12 3
knit + b13 3
knit + f14 3
knit + b15 3
knit + f16 3
knit + b17 3
knit + f18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - f18 3
knit - b17 3
knit - f16 3
knit - b15 3
knit - f14 3
knit - b13 3
knit - f12 3
knit - b11 3
knit - f10 3
knit - b9 3
knit - f8 3
knit - b7 3
knit - f6 3
knit - b5 3
knit - f4 3
knit - b3 3
knit - f2 3
knit - b1 3

;return loops to the front bed (not needed if just dropping, useful if continuing to knit):
xfer b1 f1
xfer b3 f3
xfer b5 f5
xfer b7 f7
xfer b9 f9
xfer b11 f11
xfer b13 f13
xfer b15 f15
xfer b17 f17
xfer b19 f19

; ---- take carrier out and drop remaining loops ----
;Take carrier out with yarn inserting hook:
outhook 3

;drop loops:
drop f1
drop f2
drop f3
drop f4
drop f5
drop f6
drop f7
drop f8
drop f9
drop f10
drop f11
drop f12
drop f13
drop f14
drop f15
drop f16
drop f17
drop f18
drop f19
drop f20
//title: Rib Sheet (plain javascript)

//Write header:
console.log(';!knitout-2');
console.log(';;Machine: SWGN2');
console.log(';;Carriers: 1 2 3 4 5 6 7 8 9 10');

//Parameters:
let min = 1; //needle number of left edge
let max = 20; //needle number of right edge
let rows = 20; //number of rows to knit
let carrier = "3"; //carrier name

// ---- set up initial loops and yarn carrier ----
//Bring in carrier:
console.log(`inhook ${carrier}`);
//Set stitch table entry for cast-on:
console.log(`x-stitch-number 101`);

//On SWGN2 machines, carriers start on the right,
//so will start tucking onto needles right-to-left,
//and will be sure to tuck the rightmost needle in the first pass:
for (let n = max; n >= min; n -= 1) {
	//tuck alternating needles, making sure to do the right edge:
	if ((max - n) % 2 === 0) {
		console.log(`tuck - f${n} ${carrier}`);
	}
}
//now, moving left-to-right, tuck the needles that were not tucked on the first pass:
for (let n = min; n <= max; n += 1) {
	if ((max - n) % 2 !== 0) {
		console.log(`tuck + f${n} ${carrier}`);
	}
}
//Set stitch table entry for knitting:
console.log(`x-stitch-number 105`);
//knit two plain rows to allow cast-on stitches to relax:
// two isn't set in stone here -- it's just convenient
// for this example code to have the carrier end up on the right.
for (let n = max; n >= min; n -= 1) {
	console.log(`knit - f${n} ${carrier}`);
}
//send out yarn inserting hook; it is no longer needed to hold the yarn in place:
console.log(`releasehook ${carrier}`);
for (let n = min; n <= max; n += 1) {
	console.log(`knit + f${n} ${carrier}`);
}

// ---- rib sheet ----
//Create a 1x1 rib (alternating front- and back-knit columns) sheet.
//move every other loop to the back bed, starting from the right:
for (let n = min; n <= max; n += 1) {
	if ((max-n) % 2 !== 0) {
		console.log(`xfer f${n} b${n}`);
	}
}

//knit the main part of the sheet
for (let r = 0; r <= rows; r += 1) {
	if (r % 2 === 0) {
		//knit even rows as left-going:
		for (let n = max; n >= min; n -= 1) {
			if ((max-n) % 2 === 0) {
				console.log(`knit - f${n} ${carrier}`);
			} else {
				console.log(`knit - b${n} ${carrier}`);
			}
		}
	} else {
		//knit odd rows as right-going:
		for (let n = min; n <= max; n += 1) {
			if ((max-n) % 2 === 0) {
				console.log(`knit + f${n} ${carrier}`);
			} else {
				console.log(`knit + b${n} ${carrier}`);
			}
		}
	}
}

//return loops to the front bed (not needed if just dropping, useful if continuing to knit):
for (let n = min; n <= max; n += 1) {
	if ((max-n) % 2 !== 0) {
		console.log(`xfer b${n} f${n}`);
	}
}

// ---- take carrier out and drop remaining loops ----
//Take carrier out with yarn inserting hook:
console.log(`outhook ${carrier}`);

//drop loops:
for (let n = min; n <= max; n += 1) {
	console.log(`drop f${n}`);
}
#title: Rib Sheet (plain python)

#Write header:
print(';!knitout-2')
print(';;Machine: SWGN2')
print(';;Carriers: 1 2 3 4 5 6 7 8 9 10')

#Parameters:
min = 1 #needle number of left edge
max = 20 #needle number of right edge
rows = 20 #number of rows to knit
carrier = "3" #carrier name

# ---- set up initial loops and yarn carrier ----
#Bring in carrier:
print(f"inhook {carrier}")
#Set stitch table entry for cast-on:
print(f"x-stitch-number 101")

#On SWGN2 machines, carriers start on the right,
#so will start tucking onto needles right-to-left,
#and will be sure to tuck the rightmost needle in the first pass:
for n in range(max, min-1, -1):
	#tuck alternating needles, making sure to do the right edge:
	if (max - n) % 2 == 0:
		print(f"tuck - f{n} {carrier}")
#now, moving left-to-right, tuck the needles that were not tucked on the first pass:
for n in range(min, max+1, 1):
	if (max - n) % 2 != 0:
		print(f"tuck + f{n} {carrier}")
#Set stitch table entry for knitting:
print(f"x-stitch-number 105")
#knit two plain rows to allow cast-on stitches to relax:
# two isn't set in stone here -- it's just convenient
# for this example code to have the carrier end up on the right.
for n in range(max, min-1, -1):
	print(f"knit - f{n} {carrier}")
#send out yarn inserting hook; it is no longer needed to hold the yarn in place:
print(f"releasehook {carrier}")
for n in range(min, max+1, 1):
	print(f"knit + f{n} {carrier}")

# ---- rib sheet ----
#Create a 1x1 rib (alternating front- and back-knit columns) sheet.
#move every other loop to the back bed, starting from the right:
for n in range(min, max+1, 1):
	if (max-n) % 2 != 0:
		print(f"xfer f{n} b{n}")

#knit the main part of the sheet
for r in range(0, rows+1, 1):
	if r % 2 == 0:
		#knit even rows as left-going:
		for n in range(max, min-1, -1):
			if (max-n) % 2 == 0:
				print(f"knit - f{n} {carrier}")
			else:
				print(f"knit - b{n} {carrier}")
	else:
		#knit odd rows as right-going:
		for n in range(min, max+1, 1):
			if (max-n) % 2 == 0:
				print(f"knit + f{n} {carrier}")
			else:
				print(f"knit + b{n} {carrier}")

#return loops to the front bed (not needed if just dropping, useful if continuing to knit):
for n in range(min, max+1, 1):
	if (max-n) % 2 != 0:
		print(f"xfer b{n} f{n}")

# ---- take carrier out and drop remaining loops ----
#Take carrier out with yarn inserting hook:
print(f"outhook {carrier}")

#drop loops:
for n in range(min, max+1, 1):
	print(f"drop f{n}")
#title: Rib Sheet (python with knitout module)

import knitout
K = knitout.Writer('1 2 3 4 5 6 7 8 9 10');
K.addHeader('Machine', 'SWGN2');

#Parameters:
min = 1 #needle number of left edge
max = 20 #needle number of right edge
rows = 20 #number of rows to knit
carrier = "3" #carrier name

# ---- set up initial loops and yarn carrier ----
#Bring in carrier:
K.inhook(carrier)
#Set stitch table entry for cast-on:
K.stitchNumber(101)

#On SWGN2 machines, carriers start on the right,
#so will start tucking onto needles right-to-left,
#and will be sure to tuck the rightmost needle in the first pass:
for n in range(max, min-1, -1):
	#tuck alternating needles, making sure to do the right edge:
	if (max - n) % 2 == 0:
		K.tuck("-", 'f' + str(n), carrier)
#now, moving left-to-right, tuck the needles that were not tucked on the first pass:
for n in range(min, max+1, 1):
	if (max - n) % 2 != 0:
		K.tuck("+", 'f' + str(n), carrier)
#Set stitch table entry for knitting:
K.stitchNumber(105)
#knit two plain rows to allow cast-on stitches to relax:
# two isn't set in stone here -- it's just convenient
# for this example code to have the carrier end up on the right.
for n in range(max, min-1, -1):
	K.knit("-", 'f' + str(n), carrier)
#send out yarn inserting hook; it is no longer needed to hold the yarn in place:
K.releasehook(carrier)
for n in range(min, max+1, 1):
	K.knit("+", 'f' + str(n), carrier)

# ---- rib sheet ----
#Create a 1x1 rib (alternating front- and back-knit columns) sheet.
#move every other loop to the back bed, starting from the right:
for n in range(min, max+1, 1):
	if (max-n) % 2 != 0:
		K.xfer('f' + str(n), 'b' + str(n))

#knit the main part of the sheet
for r in range(0, rows+1, 1):
	if r % 2 == 0:
		#knit even rows as left-going:
		for n in range(max, min-1, -1):
			if (max-n) % 2 == 0:
				K.knit("-", 'f' + str(n), carrier)
			else:
				K.knit("-", 'b' + str(n), carrier)
	else:
		#knit odd rows as right-going:
		for n in range(min, max+1, 1):
			if (max-n) % 2 == 0:
				K.knit("+", 'f' + str(n), carrier)
			else:
				K.knit("+", 'b' + str(n), carrier)

#return loops to the front bed (not needed if just dropping, useful if continuing to knit):
for n in range(min, max+1, 1):
	if (max-n) % 2 != 0:
		K.xfer('b' + str(n), 'f' + str(n))

# ---- take carrier out and drop remaining loops ----
#Take carrier out with yarn inserting hook:
K.outhook(carrier)

#drop loops:
for n in range(min, max+1, 1):
	K.drop('f' + str(n))

K.write('rib-sheet.swgn2.k')
//title: Garter Sheet (javascript with knitout module)

//include knitout module:
const knitout = require('knitout'); //include knitout module
const K = new knitout.Writer({ carriers:['1', '2', '3', '4', '5', '6'] });
K.addHeader('Machine', 'Kniterate');

//Parameters:
let min = 1; //needle number of left edge
let max = 20; //needle number of right edge
let rows = 20; //number of rows to knit
let carrier = "3"; //carrier name

// ---- set up initial loops and yarn carrier ----
//Bring in carrier:
K.in(carrier);

//On Kniterate machines, carriers start on the left,
//so will start tucking onto needles left-to-right,
//and will be sure to tuck the leftmost needle in the first pass:
for (let n = min; n <= max; n += 1) {
	//tuck alternating needles, making sure to do the left edge:
	if ((n - min) % 2 === 0) {
		K.tuck("+", 'f' + n, carrier);
	}
}
//now, moving right-to-left, tuck the needles that were not tucked on the first pass:
for (let n = max; n >= min; n -= 1) {
	if ((n - min) % 2 !== 0) {
		K.tuck("-", 'f' + n, carrier);
	}
}

//knit three plain rows to allow cast-on stitches to relax:
// three isn't set in stone here -- it's just convenient
// for this example code to have the carrier end up on the right.
for (let n = min; n <= max; n += 1) {
	K.knit("+", 'f' + n, carrier);
}
for (let n = max; n >= min; n -= 1) {
	K.knit("-", 'f' + n, carrier);
}
for (let n = min; n <= max; n += 1) {
	K.knit("+", 'f' + n, carrier);
}

// ---- garter sheet ----
//Create a garter (alternating all-front-knits and all-back-knits rows) sheet:
for (let r = 0; r <= rows; r += 1) {
	if (r % 2 === 0) {
		//knit even rows as left-going, front-knits rows:
		for (let n = max; n >= min; n -= 1) {
			K.knit("-", 'f' + n, carrier);
		}
	} else {
		//knit odd rows as right-going, back-knits rows:
		//move loops to back bed:
		for (let n = min; n <= max; n += 1) {
			K.xfer('f' + n, 'b' + n);
		}
		//right-going, back-knits row:
		for (let n = min; n <= max; n += 1) {
			K.knit("+", 'b' + n, carrier);
		}
		//return loops to front bed:
		for (let n = min; n <= max; n += 1) {
			K.xfer('b' + n, 'f' + n);
		}
	}
}

// ---- take carrier out and drop remaining loops ----
//Send carrier back to its parking location:
K.out(carrier);

//drop loops:
for (let n = min; n <= max; n += 1) {
	K.drop('f' + n);
}

K.write('garter-sheet.kniterate.k');
;!knitout-2
;;Machine: Kniterate
;;Carriers: 1 2 3 4 5 6

;title: Garter Sheet (raw knitout)

;Parameters:
; min = 1 -- needle number of left edge
; max = 20 -- needle number of right edge
; rows = 20 -- number of rows to knit
; carrier = "3" -- carrier name

; ---- set up initial loops and yarn carrier ----
;Bring in carrier:
in 3

;On Kniterate machines, carriers start on the left,
;so will start tucking onto needles left-to-right,
;and will be sure to tuck the leftmost needle in the first pass:
tuck + f1 3
tuck + f3 3
tuck + f5 3
tuck + f7 3
tuck + f9 3
tuck + f11 3
tuck + f13 3
tuck + f15 3
tuck + f17 3
tuck + f19 3
;now, moving right-to-left, tuck the needles that were not tucked on the first pass:
tuck - f20 3
tuck - f18 3
tuck - f16 3
tuck - f14 3
tuck - f12 3
tuck - f10 3
tuck - f8 3
tuck - f6 3
tuck - f4 3
tuck - f2 3

;knit three plain rows to allow cast-on stitches to relax:
; three isn't set in stone here -- it's just convenient
; for this example code to have the carrier end up on the right.
knit + f1 3
knit + f2 3
knit + f3 3
knit + f4 3
knit + f5 3
knit + f6 3
knit + f7 3
knit + f8 3
knit + f9 3
knit + f10 3
knit + f11 3
knit + f12 3
knit + f13 3
knit + f14 3
knit + f15 3
knit + f16 3
knit + f17 3
knit + f18 3
knit + f19 3
knit + f20 3
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
knit + f1 3
knit + f2 3
knit + f3 3
knit + f4 3
knit + f5 3
knit + f6 3
knit + f7 3
knit + f8 3
knit + f9 3
knit + f10 3
knit + f11 3
knit + f12 3
knit + f13 3
knit + f14 3
knit + f15 3
knit + f16 3
knit + f17 3
knit + f18 3
knit + f19 3
knit + f20 3

; ---- garter sheet ----
;Create a garter (alternating all-front-knits and all-back-knits rows) sheet:
;knit even rows as left-going, front-knits rows:
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
;knit odd rows as right-going, back-knits rows:
;move loops to back bed:
xfer f1 b1
xfer f2 b2
xfer f3 b3
xfer f4 b4
xfer f5 b5
xfer f6 b6
xfer f7 b7
xfer f8 b8
xfer f9 b9
xfer f10 b10
xfer f11 b11
xfer f12 b12
xfer f13 b13
xfer f14 b14
xfer f15 b15
xfer f16 b16
xfer f17 b17
xfer f18 b18
xfer f19 b19
xfer f20 b20
;right-going, back-knits row:
knit + b1 3
knit + b2 3
knit + b3 3
knit + b4 3
knit + b5 3
knit + b6 3
knit + b7 3
knit + b8 3
knit + b9 3
knit + b10 3
knit + b11 3
knit + b12 3
knit + b13 3
knit + b14 3
knit + b15 3
knit + b16 3
knit + b17 3
knit + b18 3
knit + b19 3
knit + b20 3
;return loops to front bed:
xfer b1 f1
xfer b2 f2
xfer b3 f3
xfer b4 f4
xfer b5 f5
xfer b6 f6
xfer b7 f7
xfer b8 f8
xfer b9 f9
xfer b10 f10
xfer b11 f11
xfer b12 f12
xfer b13 f13
xfer b14 f14
xfer b15 f15
xfer b16 f16
xfer b17 f17
xfer b18 f18
xfer b19 f19
xfer b20 f20
;knit even rows as left-going, front-knits rows:
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
;knit odd rows as right-going, back-knits rows:
;move loops to back bed:
xfer f1 b1
xfer f2 b2
xfer f3 b3
xfer f4 b4
xfer f5 b5
xfer f6 b6
xfer f7 b7
xfer f8 b8
xfer f9 b9
xfer f10 b10
xfer f11 b11
xfer f12 b12
xfer f13 b13
xfer f14 b14
xfer f15 b15
xfer f16 b16
xfer f17 b17
xfer f18 b18
xfer f19 b19
xfer f20 b20
;right-going, back-knits row:
knit + b1 3
knit + b2 3
knit + b3 3
knit + b4 3
knit + b5 3
knit + b6 3
knit + b7 3
knit + b8 3
knit + b9 3
knit + b10 3
knit + b11 3
knit + b12 3
knit + b13 3
knit + b14 3
knit + b15 3
knit + b16 3
knit + b17 3
knit + b18 3
knit + b19 3
knit + b20 3
;return loops to front bed:
xfer b1 f1
xfer b2 f2
xfer b3 f3
xfer b4 f4
xfer b5 f5
xfer b6 f6
xfer b7 f7
xfer b8 f8
xfer b9 f9
xfer b10 f10
xfer b11 f11
xfer b12 f12
xfer b13 f13
xfer b14 f14
xfer b15 f15
xfer b16 f16
xfer b17 f17
xfer b18 f18
xfer b19 f19
xfer b20 f20
;knit even rows as left-going, front-knits rows:
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
;knit odd rows as right-going, back-knits rows:
;move loops to back bed:
xfer f1 b1
xfer f2 b2
xfer f3 b3
xfer f4 b4
xfer f5 b5
xfer f6 b6
xfer f7 b7
xfer f8 b8
xfer f9 b9
xfer f10 b10
xfer f11 b11
xfer f12 b12
xfer f13 b13
xfer f14 b14
xfer f15 b15
xfer f16 b16
xfer f17 b17
xfer f18 b18
xfer f19 b19
xfer f20 b20
;right-going, back-knits row:
knit + b1 3
knit + b2 3
knit + b3 3
knit + b4 3
knit + b5 3
knit + b6 3
knit + b7 3
knit + b8 3
knit + b9 3
knit + b10 3
knit + b11 3
knit + b12 3
knit + b13 3
knit + b14 3
knit + b15 3
knit + b16 3
knit + b17 3
knit + b18 3
knit + b19 3
knit + b20 3
;return loops to front bed:
xfer b1 f1
xfer b2 f2
xfer b3 f3
xfer b4 f4
xfer b5 f5
xfer b6 f6
xfer b7 f7
xfer b8 f8
xfer b9 f9
xfer b10 f10
xfer b11 f11
xfer b12 f12
xfer b13 f13
xfer b14 f14
xfer b15 f15
xfer b16 f16
xfer b17 f17
xfer b18 f18
xfer b19 f19
xfer b20 f20
;knit even rows as left-going, front-knits rows:
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
;knit odd rows as right-going, back-knits rows:
;move loops to back bed:
xfer f1 b1
xfer f2 b2
xfer f3 b3
xfer f4 b4
xfer f5 b5
xfer f6 b6
xfer f7 b7
xfer f8 b8
xfer f9 b9
xfer f10 b10
xfer f11 b11
xfer f12 b12
xfer f13 b13
xfer f14 b14
xfer f15 b15
xfer f16 b16
xfer f17 b17
xfer f18 b18
xfer f19 b19
xfer f20 b20
;right-going, back-knits row:
knit + b1 3
knit + b2 3
knit + b3 3
knit + b4 3
knit + b5 3
knit + b6 3
knit + b7 3
knit + b8 3
knit + b9 3
knit + b10 3
knit + b11 3
knit + b12 3
knit + b13 3
knit + b14 3
knit + b15 3
knit + b16 3
knit + b17 3
knit + b18 3
knit + b19 3
knit + b20 3
;return loops to front bed:
xfer b1 f1
xfer b2 f2
xfer b3 f3
xfer b4 f4
xfer b5 f5
xfer b6 f6
xfer b7 f7
xfer b8 f8
xfer b9 f9
xfer b10 f10
xfer b11 f11
xfer b12 f12
xfer b13 f13
xfer b14 f14
xfer b15 f15
xfer b16 f16
xfer b17 f17
xfer b18 f18
xfer b19 f19
xfer b20 f20
;knit even rows as left-going, front-knits rows:
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
;knit odd rows as right-going, back-knits rows:
;move loops to back bed:
xfer f1 b1
xfer f2 b2
xfer f3 b3
xfer f4 b4
xfer f5 b5
xfer f6 b6
xfer f7 b7
xfer f8 b8
xfer f9 b9
xfer f10 b10
xfer f11 b11
xfer f12 b12
xfer f13 b13
xfer f14 b14
xfer f15 b15
xfer f16 b16
xfer f17 b17
xfer f18 b18
xfer f19 b19
xfer f20 b20
;right-going, back-knits row:
knit + b1 3
knit + b2 3
knit + b3 3
knit + b4 3
knit + b5 3
knit + b6 3
knit + b7 3
knit + b8 3
knit + b9 3
knit + b10 3
knit + b11 3
knit + b12 3
knit + b13 3
knit + b14 3
knit + b15 3
knit + b16 3
knit + b17 3
knit + b18 3
knit + b19 3
knit + b20 3
;return loops to front bed:
xfer b1 f1
xfer b2 f2
xfer b3 f3
xfer b4 f4
xfer b5 f5
xfer b6 f6
xfer b7 f7
xfer b8 f8
xfer b9 f9
xfer b10 f10
xfer b11 f11
xfer b12 f12
xfer b13 f13
xfer b14 f14
xfer b15 f15
xfer b16 f16
xfer b17 f17
xfer b18 f18
xfer b19 f19
xfer b20 f20
;knit even rows as left-going, front-knits rows:
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
;knit odd rows as right-going, back-knits rows:
;move loops to back bed:
xfer f1 b1
xfer f2 b2
xfer f3 b3
xfer f4 b4
xfer f5 b5
xfer f6 b6
xfer f7 b7
xfer f8 b8
xfer f9 b9
xfer f10 b10
xfer f11 b11
xfer f12 b12
xfer f13 b13
xfer f14 b14
xfer f15 b15
xfer f16 b16
xfer f17 b17
xfer f18 b18
xfer f19 b19
xfer f20 b20
;right-going, back-knits row:
knit + b1 3
knit + b2 3
knit + b3 3
knit + b4 3
knit + b5 3
knit + b6 3
knit + b7 3
knit + b8 3
knit + b9 3
knit + b10 3
knit + b11 3
knit + b12 3
knit + b13 3
knit + b14 3
knit + b15 3
knit + b16 3
knit + b17 3
knit + b18 3
knit + b19 3
knit + b20 3
;return loops to front bed:
xfer b1 f1
xfer b2 f2
xfer b3 f3
xfer b4 f4
xfer b5 f5
xfer b6 f6
xfer b7 f7
xfer b8 f8
xfer b9 f9
xfer b10 f10
xfer b11 f11
xfer b12 f12
xfer b13 f13
xfer b14 f14
xfer b15 f15
xfer b16 f16
xfer b17 f17
xfer b18 f18
xfer b19 f19
xfer b20 f20
;knit even rows as left-going, front-knits rows:
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
;knit odd rows as right-going, back-knits rows:
;move loops to back bed:
xfer f1 b1
xfer f2 b2
xfer f3 b3
xfer f4 b4
xfer f5 b5
xfer f6 b6
xfer f7 b7
xfer f8 b8
xfer f9 b9
xfer f10 b10
xfer f11 b11
xfer f12 b12
xfer f13 b13
xfer f14 b14
xfer f15 b15
xfer f16 b16
xfer f17 b17
xfer f18 b18
xfer f19 b19
xfer f20 b20
;right-going, back-knits row:
knit + b1 3
knit + b2 3
knit + b3 3
knit + b4 3
knit + b5 3
knit + b6 3
knit + b7 3
knit + b8 3
knit + b9 3
knit + b10 3
knit + b11 3
knit + b12 3
knit + b13 3
knit + b14 3
knit + b15 3
knit + b16 3
knit + b17 3
knit + b18 3
knit + b19 3
knit + b20 3
;return loops to front bed:
xfer b1 f1
xfer b2 f2
xfer b3 f3
xfer b4 f4
xfer b5 f5
xfer b6 f6
xfer b7 f7
xfer b8 f8
xfer b9 f9
xfer b10 f10
xfer b11 f11
xfer b12 f12
xfer b13 f13
xfer b14 f14
xfer b15 f15
xfer b16 f16
xfer b17 f17
xfer b18 f18
xfer b19 f19
xfer b20 f20
;knit even rows as left-going, front-knits rows:
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
;knit odd rows as right-going, back-knits rows:
;move loops to back bed:
xfer f1 b1
xfer f2 b2
xfer f3 b3
xfer f4 b4
xfer f5 b5
xfer f6 b6
xfer f7 b7
xfer f8 b8
xfer f9 b9
xfer f10 b10
xfer f11 b11
xfer f12 b12
xfer f13 b13
xfer f14 b14
xfer f15 b15
xfer f16 b16
xfer f17 b17
xfer f18 b18
xfer f19 b19
xfer f20 b20
;right-going, back-knits row:
knit + b1 3
knit + b2 3
knit + b3 3
knit + b4 3
knit + b5 3
knit + b6 3
knit + b7 3
knit + b8 3
knit + b9 3
knit + b10 3
knit + b11 3
knit + b12 3
knit + b13 3
knit + b14 3
knit + b15 3
knit + b16 3
knit + b17 3
knit + b18 3
knit + b19 3
knit + b20 3
;return loops to front bed:
xfer b1 f1
xfer b2 f2
xfer b3 f3
xfer b4 f4
xfer b5 f5
xfer b6 f6
xfer b7 f7
xfer b8 f8
xfer b9 f9
xfer b10 f10
xfer b11 f11
xfer b12 f12
xfer b13 f13
xfer b14 f14
xfer b15 f15
xfer b16 f16
xfer b17 f17
xfer b18 f18
xfer b19 f19
xfer b20 f20
;knit even rows as left-going, front-knits rows:
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
;knit odd rows as right-going, back-knits rows:
;move loops to back bed:
xfer f1 b1
xfer f2 b2
xfer f3 b3
xfer f4 b4
xfer f5 b5
xfer f6 b6
xfer f7 b7
xfer f8 b8
xfer f9 b9
xfer f10 b10
xfer f11 b11
xfer f12 b12
xfer f13 b13
xfer f14 b14
xfer f15 b15
xfer f16 b16
xfer f17 b17
xfer f18 b18
xfer f19 b19
xfer f20 b20
;right-going, back-knits row:
knit + b1 3
knit + b2 3
knit + b3 3
knit + b4 3
knit + b5 3
knit + b6 3
knit + b7 3
knit + b8 3
knit + b9 3
knit + b10 3
knit + b11 3
knit + b12 3
knit + b13 3
knit + b14 3
knit + b15 3
knit + b16 3
knit + b17 3
knit + b18 3
knit + b19 3
knit + b20 3
;return loops to front bed:
xfer b1 f1
xfer b2 f2
xfer b3 f3
xfer b4 f4
xfer b5 f5
xfer b6 f6
xfer b7 f7
xfer b8 f8
xfer b9 f9
xfer b10 f10
xfer b11 f11
xfer b12 f12
xfer b13 f13
xfer b14 f14
xfer b15 f15
xfer b16 f16
xfer b17 f17
xfer b18 f18
xfer b19 f19
xfer b20 f20
;knit even rows as left-going, front-knits rows:
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
;knit odd rows as right-going, back-knits rows:
;move loops to back bed:
xfer f1 b1
xfer f2 b2
xfer f3 b3
xfer f4 b4
xfer f5 b5
xfer f6 b6
xfer f7 b7
xfer f8 b8
xfer f9 b9
xfer f10 b10
xfer f11 b11
xfer f12 b12
xfer f13 b13
xfer f14 b14
xfer f15 b15
xfer f16 b16
xfer f17 b17
xfer f18 b18
xfer f19 b19
xfer f20 b20
;right-going, back-knits row:
knit + b1 3
knit + b2 3
knit + b3 3
knit + b4 3
knit + b5 3
knit + b6 3
knit + b7 3
knit + b8 3
knit + b9 3
knit + b10 3
knit + b11 3
knit + b12 3
knit + b13 3
knit + b14 3
knit + b15 3
knit + b16 3
knit + b17 3
knit + b18 3
knit + b19 3
knit + b20 3
;return loops to front bed:
xfer b1 f1
xfer b2 f2
xfer b3 f3
xfer b4 f4
xfer b5 f5
xfer b6 f6
xfer b7 f7
xfer b8 f8
xfer b9 f9
xfer b10 f10
xfer b11 f11
xfer b12 f12
xfer b13 f13
xfer b14 f14
xfer b15 f15
xfer b16 f16
xfer b17 f17
xfer b18 f18
xfer b19 f19
xfer b20 f20
;knit even rows as left-going, front-knits rows:
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3

; ---- take carrier out and drop remaining loops ----
;Send carrier back to its parking location:
out 3

;drop loops:
drop f1
drop f2
drop f3
drop f4
drop f5
drop f6
drop f7
drop f8
drop f9
drop f10
drop f11
drop f12
drop f13
drop f14
drop f15
drop f16
drop f17
drop f18
drop f19
drop f20
//title: Garter Sheet (plain javascript)

//Write header:
console.log(';!knitout-2');
console.log(';;Machine: Kniterate');
console.log(';;Carriers: 1 2 3 4 5 6');

//Parameters:
let min = 1; //needle number of left edge
let max = 20; //needle number of right edge
let rows = 20; //number of rows to knit
let carrier = "3"; //carrier name

// ---- set up initial loops and yarn carrier ----
//Bring in carrier:
console.log(`in ${carrier}`);

//On Kniterate machines, carriers start on the left,
//so will start tucking onto needles left-to-right,
//and will be sure to tuck the leftmost needle in the first pass:
for (let n = min; n <= max; n += 1) {
	//tuck alternating needles, making sure to do the left edge:
	if ((n - min) % 2 === 0) {
		console.log(`tuck + f${n} ${carrier}`);
	}
}
//now, moving right-to-left, tuck the needles that were not tucked on the first pass:
for (let n = max; n >= min; n -= 1) {
	if ((n - min) % 2 !== 0) {
		console.log(`tuck - f${n} ${carrier}`);
	}
}

//knit three plain rows to allow cast-on stitches to relax:
// three isn't set in stone here -- it's just convenient
// for this example code to have the carrier end up on the right.
for (let n = min; n <= max; n += 1) {
	console.log(`knit + f${n} ${carrier}`);
}
for (let n = max; n >= min; n -= 1) {
	console.log(`knit - f${n} ${carrier}`);
}
for (let n = min; n <= max; n += 1) {
	console.log(`knit + f${n} ${carrier}`);
}

// ---- garter sheet ----
//Create a garter (alternating all-front-knits and all-back-knits rows) sheet:
for (let r = 0; r <= rows; r += 1) {
	if (r % 2 === 0) {
		//knit even rows as left-going, front-knits rows:
		for (let n = max; n >= min; n -= 1) {
			console.log(`knit - f${n} ${carrier}`);
		}
	} else {
		//knit odd rows as right-going, back-knits rows:
		//move loops to back bed:
		for (let n = min; n <= max; n += 1) {
			console.log(`xfer f${n} b${n}`);
		}
		//right-going, back-knits row:
		for (let n = min; n <= max; n += 1) {
			console.log(`knit + b${n} ${carrier}`);
		}
		//return loops to front bed:
		for (let n = min; n <= max; n += 1) {
			console.log(`xfer b${n} f${n}`);
		}
	}
}

// ---- take carrier out and drop remaining loops ----
//Send carrier back to its parking location:
console.log(`out ${carrier}`);

//drop loops:
for (let n = min; n <= max; n += 1) {
	console.log(`drop f${n}`);
}
#title: Garter Sheet (plain python)

#Write header:
print(';!knitout-2')
print(';;Machine: Kniterate')
print(';;Carriers: 1 2 3 4 5 6')

#Parameters:
min = 1 #needle number of left edge
max = 20 #needle number of right edge
rows = 20 #number of rows to knit
carrier = "3" #carrier name

# ---- set up initial loops and yarn carrier ----
#Bring in carrier:
print(f"in {carrier}")

#On Kniterate machines, carriers start on the left,
#so will start tucking onto needles left-to-right,
#and will be sure to tuck the leftmost needle in the first pass:
for n in range(min, max+1, 1):
	#tuck alternating needles, making sure to do the left edge:
	if (n - min) % 2 == 0:
		print(f"tuck + f{n} {carrier}")
#now, moving right-to-left, tuck the needles that were not tucked on the first pass:
for n in range(max, min-1, -1):
	if (n - min) % 2 != 0:
		print(f"tuck - f{n} {carrier}")

#knit three plain rows to allow cast-on stitches to relax:
# three isn't set in stone here -- it's just convenient
# for this example code to have the carrier end up on the right.
for n in range(min, max+1, 1):
	print(f"knit + f{n} {carrier}")
for n in range(max, min-1, -1):
	print(f"knit - f{n} {carrier}")
for n in range(min, max+1, 1):
	print(f"knit + f{n} {carrier}")

# ---- garter sheet ----
#Create a garter (alternating all-front-knits and all-back-knits rows) sheet:
for r in range(0, rows+1, 1):
	if r % 2 == 0:
		#knit even rows as left-going, front-knits rows:
		for n in range(max, min-1, -1):
			print(f"knit - f{n} {carrier}")
	else:
		#knit odd rows as right-going, back-knits rows:
		#move loops to back bed:
		for n in range(min, max+1, 1):
			print(f"xfer f{n} b{n}")
		#right-going, back-knits row:
		for n in range(min, max+1, 1):
			print(f"knit + b{n} {carrier}")
		#return loops to front bed:
		for n in range(min, max+1, 1):
			print(f"xfer b{n} f{n}")

# ---- take carrier out and drop remaining loops ----
#Send carrier back to its parking location:
print(f"out {carrier}")

#drop loops:
for n in range(min, max+1, 1):
	print(f"drop f{n}")
#title: Garter Sheet (python with knitout module)

import knitout
K = knitout.Writer('1 2 3 4 5 6');
K.addHeader('Machine', 'Kniterate');

#Parameters:
min = 1 #needle number of left edge
max = 20 #needle number of right edge
rows = 20 #number of rows to knit
carrier = "3" #carrier name

# ---- set up initial loops and yarn carrier ----
#Bring in carrier:
K.ingripper(carrier)

#On Kniterate machines, carriers start on the left,
#so will start tucking onto needles left-to-right,
#and will be sure to tuck the leftmost needle in the first pass:
for n in range(min, max+1, 1):
	#tuck alternating needles, making sure to do the left edge:
	if (n - min) % 2 == 0:
		K.tuck("+", 'f' + str(n), carrier)
#now, moving right-to-left, tuck the needles that were not tucked on the first pass:
for n in range(max, min-1, -1):
	if (n - min) % 2 != 0:
		K.tuck("-", 'f' + str(n), carrier)

#knit three plain rows to allow cast-on stitches to relax:
# three isn't set in stone here -- it's just convenient
# for this example code to have the carrier end up on the right.
for n in range(min, max+1, 1):
	K.knit("+", 'f' + str(n), carrier)
for n in range(max, min-1, -1):
	K.knit("-", 'f' + str(n), carrier)
for n in range(min, max+1, 1):
	K.knit("+", 'f' + str(n), carrier)

# ---- garter sheet ----
#Create a garter (alternating all-front-knits and all-back-knits rows) sheet:
for r in range(0, rows+1, 1):
	if r % 2 == 0:
		#knit even rows as left-going, front-knits rows:
		for n in range(max, min-1, -1):
			K.knit("-", 'f' + str(n), carrier)
	else:
		#knit odd rows as right-going, back-knits rows:
		#move loops to back bed:
		for n in range(min, max+1, 1):
			K.xfer('f' + str(n), 'b' + str(n))
		#right-going, back-knits row:
		for n in range(min, max+1, 1):
			K.knit("+", 'b' + str(n), carrier)
		#return loops to front bed:
		for n in range(min, max+1, 1):
			K.xfer('b' + str(n), 'f' + str(n))

# ---- take carrier out and drop remaining loops ----
#Send carrier back to its parking location:
K.outgripper(carrier)

#drop loops:
for n in range(min, max+1, 1):
	K.drop('f' + str(n))

K.write('garter-sheet.kniterate.k')
//title: Garter Sheet (javascript with knitout module)

//include knitout module:
const knitout = require('knitout'); //include knitout module
const K = new knitout.Writer({ carriers:['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'] });
K.addHeader('Machine', 'SWGN2');

//Parameters:
let min = 1; //needle number of left edge
let max = 20; //needle number of right edge
let rows = 20; //number of rows to knit
let carrier = "3"; //carrier name

// ---- set up initial loops and yarn carrier ----
//Bring in carrier:
K.inhook(carrier);
//Set stitch table entry for cast-on:
K.stitchNumber(101);

//On SWGN2 machines, carriers start on the right,
//so will start tucking onto needles right-to-left,
//and will be sure to tuck the rightmost needle in the first pass:
for (let n = max; n >= min; n -= 1) {
	//tuck alternating needles, making sure to do the right edge:
	if ((max - n) % 2 === 0) {
		K.tuck("-", 'f' + n, carrier);
	}
}
//now, moving left-to-right, tuck the needles that were not tucked on the first pass:
for (let n = min; n <= max; n += 1) {
	if ((max - n) % 2 !== 0) {
		K.tuck("+", 'f' + n, carrier);
	}
}
//Set stitch table entry for knitting:
K.stitchNumber(105);
//knit two plain rows to allow cast-on stitches to relax:
// two isn't set in stone here -- it's just convenient
// for this example code to have the carrier end up on the right.
for (let n = max; n >= min; n -= 1) {
	K.knit("-", 'f' + n, carrier);
}
//send out yarn inserting hook; it is no longer needed to hold the yarn in place:
K.releasehook(carrier);
for (let n = min; n <= max; n += 1) {
	K.knit("+", 'f' + n, carrier);
}

// ---- garter sheet ----
//Create a garter (alternating all-front-knits and all-back-knits rows) sheet:
for (let r = 0; r <= rows; r += 1) {
	if (r % 2 === 0) {
		//knit even rows as left-going, front-knits rows:
		for (let n = max; n >= min; n -= 1) {
			K.knit("-", 'f' + n, carrier);
		}
	} else {
		//knit odd rows as right-going, back-knits rows:
		//move loops to back bed:
		for (let n = min; n <= max; n += 1) {
			K.xfer('f' + n, 'b' + n);
		}
		//right-going, back-knits row:
		for (let n = min; n <= max; n += 1) {
			K.knit("+", 'b' + n, carrier);
		}
		//return loops to front bed:
		for (let n = min; n <= max; n += 1) {
			K.xfer('b' + n, 'f' + n);
		}
	}
}

// ---- take carrier out and drop remaining loops ----
//Take carrier out with yarn inserting hook:
K.outhook(carrier);

//drop loops:
for (let n = min; n <= max; n += 1) {
	K.drop('f' + n);
}

K.write('garter-sheet.swgn2.k');
;!knitout-2
;;Machine: SWGN2
;;Carriers: 1 2 3 4 5 6 7 8 9 10

;title: Garter Sheet (raw knitout)

;Parameters:
; min = 1 -- needle number of left edge
; max = 20 -- needle number of right edge
; rows = 20 -- number of rows to knit
; carrier = "3" -- carrier name

; ---- set up initial loops and yarn carrier ----
;Bring in carrier:
inhook 3
;Set stitch table entry for cast-on:
x-stitch-number 101

;On SWGN2 machines, carriers start on the right,
;so will start tucking onto needles right-to-left,
;and will be sure to tuck the rightmost needle in the first pass:
tuck - f20 3
tuck - f18 3
tuck - f16 3
tuck - f14 3
tuck - f12 3
tuck - f10 3
tuck - f8 3
tuck - f6 3
tuck - f4 3
tuck - f2 3
;now, moving left-to-right, tuck the needles that were not tucked on the first pass:
tuck + f1 3
tuck + f3 3
tuck + f5 3
tuck + f7 3
tuck + f9 3
tuck + f11 3
tuck + f13 3
tuck + f15 3
tuck + f17 3
tuck + f19 3
;Set stitch table entry for knitting:
x-stitch-number 105
;knit two plain rows to allow cast-on stitches to relax:
; two isn't set in stone here -- it's just convenient
; for this example code to have the carrier end up on the right.
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
;send out yarn inserting hook; it is no longer needed to hold the yarn in place:
releasehook 3
knit + f1 3
knit + f2 3
knit + f3 3
knit + f4 3
knit + f5 3
knit + f6 3
knit + f7 3
knit + f8 3
knit + f9 3
knit + f10 3
knit + f11 3
knit + f12 3
knit + f13 3
knit + f14 3
knit + f15 3
knit + f16 3
knit + f17 3
knit + f18 3
knit + f19 3
knit + f20 3

; ---- garter sheet ----
;Create a garter (alternating all-front-knits and all-back-knits rows) sheet:
;knit even rows as left-going, front-knits rows:
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
;knit odd rows as right-going, back-knits rows:
;move loops to back bed:
xfer f1 b1
xfer f2 b2
xfer f3 b3
xfer f4 b4
xfer f5 b5
xfer f6 b6
xfer f7 b7
xfer f8 b8
xfer f9 b9
xfer f10 b10
xfer f11 b11
xfer f12 b12
xfer f13 b13
xfer f14 b14
xfer f15 b15
xfer f16 b16
xfer f17 b17
xfer f18 b18
xfer f19 b19
xfer f20 b20
;right-going, back-knits row:
knit + b1 3
knit + b2 3
knit + b3 3
knit + b4 3
knit + b5 3
knit + b6 3
knit + b7 3
knit + b8 3
knit + b9 3
knit + b10 3
knit + b11 3
knit + b12 3
knit + b13 3
knit + b14 3
knit + b15 3
knit + b16 3
knit + b17 3
knit + b18 3
knit + b19 3
knit + b20 3
;return loops to front bed:
xfer b1 f1
xfer b2 f2
xfer b3 f3
xfer b4 f4
xfer b5 f5
xfer b6 f6
xfer b7 f7
xfer b8 f8
xfer b9 f9
xfer b10 f10
xfer b11 f11
xfer b12 f12
xfer b13 f13
xfer b14 f14
xfer b15 f15
xfer b16 f16
xfer b17 f17
xfer b18 f18
xfer b19 f19
xfer b20 f20
;knit even rows as left-going, front-knits rows:
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
;knit odd rows as right-going, back-knits rows:
;move loops to back bed:
xfer f1 b1
xfer f2 b2
xfer f3 b3
xfer f4 b4
xfer f5 b5
xfer f6 b6
xfer f7 b7
xfer f8 b8
xfer f9 b9
xfer f10 b10
xfer f11 b11
xfer f12 b12
xfer f13 b13
xfer f14 b14
xfer f15 b15
xfer f16 b16
xfer f17 b17
xfer f18 b18
xfer f19 b19
xfer f20 b20
;right-going, back-knits row:
knit + b1 3
knit + b2 3
knit + b3 3
knit + b4 3
knit + b5 3
knit + b6 3
knit + b7 3
knit + b8 3
knit + b9 3
knit + b10 3
knit + b11 3
knit + b12 3
knit + b13 3
knit + b14 3
knit + b15 3
knit + b16 3
knit + b17 3
knit + b18 3
knit + b19 3
knit + b20 3
;return loops to front bed:
xfer b1 f1
xfer b2 f2
xfer b3 f3
xfer b4 f4
xfer b5 f5
xfer b6 f6
xfer b7 f7
xfer b8 f8
xfer b9 f9
xfer b10 f10
xfer b11 f11
xfer b12 f12
xfer b13 f13
xfer b14 f14
xfer b15 f15
xfer b16 f16
xfer b17 f17
xfer b18 f18
xfer b19 f19
xfer b20 f20
;knit even rows as left-going, front-knits rows:
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
;knit odd rows as right-going, back-knits rows:
;move loops to back bed:
xfer f1 b1
xfer f2 b2
xfer f3 b3
xfer f4 b4
xfer f5 b5
xfer f6 b6
xfer f7 b7
xfer f8 b8
xfer f9 b9
xfer f10 b10
xfer f11 b11
xfer f12 b12
xfer f13 b13
xfer f14 b14
xfer f15 b15
xfer f16 b16
xfer f17 b17
xfer f18 b18
xfer f19 b19
xfer f20 b20
;right-going, back-knits row:
knit + b1 3
knit + b2 3
knit + b3 3
knit + b4 3
knit + b5 3
knit + b6 3
knit + b7 3
knit + b8 3
knit + b9 3
knit + b10 3
knit + b11 3
knit + b12 3
knit + b13 3
knit + b14 3
knit + b15 3
knit + b16 3
knit + b17 3
knit + b18 3
knit + b19 3
knit + b20 3
;return loops to front bed:
xfer b1 f1
xfer b2 f2
xfer b3 f3
xfer b4 f4
xfer b5 f5
xfer b6 f6
xfer b7 f7
xfer b8 f8
xfer b9 f9
xfer b10 f10
xfer b11 f11
xfer b12 f12
xfer b13 f13
xfer b14 f14
xfer b15 f15
xfer b16 f16
xfer b17 f17
xfer b18 f18
xfer b19 f19
xfer b20 f20
;knit even rows as left-going, front-knits rows:
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
;knit odd rows as right-going, back-knits rows:
;move loops to back bed:
xfer f1 b1
xfer f2 b2
xfer f3 b3
xfer f4 b4
xfer f5 b5
xfer f6 b6
xfer f7 b7
xfer f8 b8
xfer f9 b9
xfer f10 b10
xfer f11 b11
xfer f12 b12
xfer f13 b13
xfer f14 b14
xfer f15 b15
xfer f16 b16
xfer f17 b17
xfer f18 b18
xfer f19 b19
xfer f20 b20
;right-going, back-knits row:
knit + b1 3
knit + b2 3
knit + b3 3
knit + b4 3
knit + b5 3
knit + b6 3
knit + b7 3
knit + b8 3
knit + b9 3
knit + b10 3
knit + b11 3
knit + b12 3
knit + b13 3
knit + b14 3
knit + b15 3
knit + b16 3
knit + b17 3
knit + b18 3
knit + b19 3
knit + b20 3
;return loops to front bed:
xfer b1 f1
xfer b2 f2
xfer b3 f3
xfer b4 f4
xfer b5 f5
xfer b6 f6
xfer b7 f7
xfer b8 f8
xfer b9 f9
xfer b10 f10
xfer b11 f11
xfer b12 f12
xfer b13 f13
xfer b14 f14
xfer b15 f15
xfer b16 f16
xfer b17 f17
xfer b18 f18
xfer b19 f19
xfer b20 f20
;knit even rows as left-going, front-knits rows:
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
;knit odd rows as right-going, back-knits rows:
;move loops to back bed:
xfer f1 b1
xfer f2 b2
xfer f3 b3
xfer f4 b4
xfer f5 b5
xfer f6 b6
xfer f7 b7
xfer f8 b8
xfer f9 b9
xfer f10 b10
xfer f11 b11
xfer f12 b12
xfer f13 b13
xfer f14 b14
xfer f15 b15
xfer f16 b16
xfer f17 b17
xfer f18 b18
xfer f19 b19
xfer f20 b20
;right-going, back-knits row:
knit + b1 3
knit + b2 3
knit + b3 3
knit + b4 3
knit + b5 3
knit + b6 3
knit + b7 3
knit + b8 3
knit + b9 3
knit + b10 3
knit + b11 3
knit + b12 3
knit + b13 3
knit + b14 3
knit + b15 3
knit + b16 3
knit + b17 3
knit + b18 3
knit + b19 3
knit + b20 3
;return loops to front bed:
xfer b1 f1
xfer b2 f2
xfer b3 f3
xfer b4 f4
xfer b5 f5
xfer b6 f6
xfer b7 f7
xfer b8 f8
xfer b9 f9
xfer b10 f10
xfer b11 f11
xfer b12 f12
xfer b13 f13
xfer b14 f14
xfer b15 f15
xfer b16 f16
xfer b17 f17
xfer b18 f18
xfer b19 f19
xfer b20 f20
;knit even rows as left-going, front-knits rows:
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
;knit odd rows as right-going, back-knits rows:
;move loops to back bed:
xfer f1 b1
xfer f2 b2
xfer f3 b3
xfer f4 b4
xfer f5 b5
xfer f6 b6
xfer f7 b7
xfer f8 b8
xfer f9 b9
xfer f10 b10
xfer f11 b11
xfer f12 b12
xfer f13 b13
xfer f14 b14
xfer f15 b15
xfer f16 b16
xfer f17 b17
xfer f18 b18
xfer f19 b19
xfer f20 b20
;right-going, back-knits row:
knit + b1 3
knit + b2 3
knit + b3 3
knit + b4 3
knit + b5 3
knit + b6 3
knit + b7 3
knit + b8 3
knit + b9 3
knit + b10 3
knit + b11 3
knit + b12 3
knit + b13 3
knit + b14 3
knit + b15 3
knit + b16 3
knit + b17 3
knit + b18 3
knit + b19 3
knit + b20 3
;return loops to front bed:
xfer b1 f1
xfer b2 f2
xfer b3 f3
xfer b4 f4
xfer b5 f5
xfer b6 f6
xfer b7 f7
xfer b8 f8
xfer b9 f9
xfer b10 f10
xfer b11 f11
xfer b12 f12
xfer b13 f13
xfer b14 f14
xfer b15 f15
xfer b16 f16
xfer b17 f17
xfer b18 f18
xfer b19 f19
xfer b20 f20
;knit even rows as left-going, front-knits rows:
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
;knit odd rows as right-going, back-knits rows:
;move loops to back bed:
xfer f1 b1
xfer f2 b2
xfer f3 b3
xfer f4 b4
xfer f5 b5
xfer f6 b6
xfer f7 b7
xfer f8 b8
xfer f9 b9
xfer f10 b10
xfer f11 b11
xfer f12 b12
xfer f13 b13
xfer f14 b14
xfer f15 b15
xfer f16 b16
xfer f17 b17
xfer f18 b18
xfer f19 b19
xfer f20 b20
;right-going, back-knits row:
knit + b1 3
knit + b2 3
knit + b3 3
knit + b4 3
knit + b5 3
knit + b6 3
knit + b7 3
knit + b8 3
knit + b9 3
knit + b10 3
knit + b11 3
knit + b12 3
knit + b13 3
knit + b14 3
knit + b15 3
knit + b16 3
knit + b17 3
knit + b18 3
knit + b19 3
knit + b20 3
;return loops to front bed:
xfer b1 f1
xfer b2 f2
xfer b3 f3
xfer b4 f4
xfer b5 f5
xfer b6 f6
xfer b7 f7
xfer b8 f8
xfer b9 f9
xfer b10 f10
xfer b11 f11
xfer b12 f12
xfer b13 f13
xfer b14 f14
xfer b15 f15
xfer b16 f16
xfer b17 f17
xfer b18 f18
xfer b19 f19
xfer b20 f20
;knit even rows as left-going, front-knits rows:
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
;knit odd rows as right-going, back-knits rows:
;move loops to back bed:
xfer f1 b1
xfer f2 b2
xfer f3 b3
xfer f4 b4
xfer f5 b5
xfer f6 b6
xfer f7 b7
xfer f8 b8
xfer f9 b9
xfer f10 b10
xfer f11 b11
xfer f12 b12
xfer f13 b13
xfer f14 b14
xfer f15 b15
xfer f16 b16
xfer f17 b17
xfer f18 b18
xfer f19 b19
xfer f20 b20
;right-going, back-knits row:
knit + b1 3
knit + b2 3
knit + b3 3
knit + b4 3
knit + b5 3
knit + b6 3
knit + b7 3
knit + b8 3
knit + b9 3
knit + b10 3
knit + b11 3
knit + b12 3
knit + b13 3
knit + b14 3
knit + b15 3
knit + b16 3
knit + b17 3
knit + b18 3
knit + b19 3
knit + b20 3
;return loops to front bed:
xfer b1 f1
xfer b2 f2
xfer b3 f3
xfer b4 f4
xfer b5 f5
xfer b6 f6
xfer b7 f7
xfer b8 f8
xfer b9 f9
xfer b10 f10
xfer b11 f11
xfer b12 f12
xfer b13 f13
xfer b14 f14
xfer b15 f15
xfer b16 f16
xfer b17 f17
xfer b18 f18
xfer b19 f19
xfer b20 f20
;knit even rows as left-going, front-knits rows:
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
;knit odd rows as right-going, back-knits rows:
;move loops to back bed:
xfer f1 b1
xfer f2 b2
xfer f3 b3
xfer f4 b4
xfer f5 b5
xfer f6 b6
xfer f7 b7
xfer f8 b8
xfer f9 b9
xfer f10 b10
xfer f11 b11
xfer f12 b12
xfer f13 b13
xfer f14 b14
xfer f15 b15
xfer f16 b16
xfer f17 b17
xfer f18 b18
xfer f19 b19
xfer f20 b20
;right-going, back-knits row:
knit + b1 3
knit + b2 3
knit + b3 3
knit + b4 3
knit + b5 3
knit + b6 3
knit + b7 3
knit + b8 3
knit + b9 3
knit + b10 3
knit + b11 3
knit + b12 3
knit + b13 3
knit + b14 3
knit + b15 3
knit + b16 3
knit + b17 3
knit + b18 3
knit + b19 3
knit + b20 3
;return loops to front bed:
xfer b1 f1
xfer b2 f2
xfer b3 f3
xfer b4 f4
xfer b5 f5
xfer b6 f6
xfer b7 f7
xfer b8 f8
xfer b9 f9
xfer b10 f10
xfer b11 f11
xfer b12 f12
xfer b13 f13
xfer b14 f14
xfer b15 f15
xfer b16 f16
xfer b17 f17
xfer b18 f18
xfer b19 f19
xfer b20 f20
;knit even rows as left-going, front-knits rows:
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3
;knit odd rows as right-going, back-knits rows:
;move loops to back bed:
xfer f1 b1
xfer f2 b2
xfer f3 b3
xfer f4 b4
xfer f5 b5
xfer f6 b6
xfer f7 b7
xfer f8 b8
xfer f9 b9
xfer f10 b10
xfer f11 b11
xfer f12 b12
xfer f13 b13
xfer f14 b14
xfer f15 b15
xfer f16 b16
xfer f17 b17
xfer f18 b18
xfer f19 b19
xfer f20 b20
;right-going, back-knits row:
knit + b1 3
knit + b2 3
knit + b3 3
knit + b4 3
knit + b5 3
knit + b6 3
knit + b7 3
knit + b8 3
knit + b9 3
knit + b10 3
knit + b11 3
knit + b12 3
knit + b13 3
knit + b14 3
knit + b15 3
knit + b16 3
knit + b17 3
knit + b18 3
knit + b19 3
knit + b20 3
;return loops to front bed:
xfer b1 f1
xfer b2 f2
xfer b3 f3
xfer b4 f4
xfer b5 f5
xfer b6 f6
xfer b7 f7
xfer b8 f8
xfer b9 f9
xfer b10 f10
xfer b11 f11
xfer b12 f12
xfer b13 f13
xfer b14 f14
xfer b15 f15
xfer b16 f16
xfer b17 f17
xfer b18 f18
xfer b19 f19
xfer b20 f20
;knit even rows as left-going, front-knits rows:
knit - f20 3
knit - f19 3
knit - f18 3
knit - f17 3
knit - f16 3
knit - f15 3
knit - f14 3
knit - f13 3
knit - f12 3
knit - f11 3
knit - f10 3
knit - f9 3
knit - f8 3
knit - f7 3
knit - f6 3
knit - f5 3
knit - f4 3
knit - f3 3
knit - f2 3
knit - f1 3

; ---- take carrier out and drop remaining loops ----
;Take carrier out with yarn inserting hook:
outhook 3

;drop loops:
drop f1
drop f2
drop f3
drop f4
drop f5
drop f6
drop f7
drop f8
drop f9
drop f10
drop f11
drop f12
drop f13
drop f14
drop f15
drop f16
drop f17
drop f18
drop f19
drop f20
//title: Garter Sheet (plain javascript)

//Write header:
console.log(';!knitout-2');
console.log(';;Machine: SWGN2');
console.log(';;Carriers: 1 2 3 4 5 6 7 8 9 10');

//Parameters:
let min = 1; //needle number of left edge
let max = 20; //needle number of right edge
let rows = 20; //number of rows to knit
let carrier = "3"; //carrier name

// ---- set up initial loops and yarn carrier ----
//Bring in carrier:
console.log(`inhook ${carrier}`);
//Set stitch table entry for cast-on:
console.log(`x-stitch-number 101`);

//On SWGN2 machines, carriers start on the right,
//so will start tucking onto needles right-to-left,
//and will be sure to tuck the rightmost needle in the first pass:
for (let n = max; n >= min; n -= 1) {
	//tuck alternating needles, making sure to do the right edge:
	if ((max - n) % 2 === 0) {
		console.log(`tuck - f${n} ${carrier}`);
	}
}
//now, moving left-to-right, tuck the needles that were not tucked on the first pass:
for (let n = min; n <= max; n += 1) {
	if ((max - n) % 2 !== 0) {
		console.log(`tuck + f${n} ${carrier}`);
	}
}
//Set stitch table entry for knitting:
console.log(`x-stitch-number 105`);
//knit two plain rows to allow cast-on stitches to relax:
// two isn't set in stone here -- it's just convenient
// for this example code to have the carrier end up on the right.
for (let n = max; n >= min; n -= 1) {
	console.log(`knit - f${n} ${carrier}`);
}
//send out yarn inserting hook; it is no longer needed to hold the yarn in place:
console.log(`releasehook ${carrier}`);
for (let n = min; n <= max; n += 1) {
	console.log(`knit + f${n} ${carrier}`);
}

// ---- garter sheet ----
//Create a garter (alternating all-front-knits and all-back-knits rows) sheet:
for (let r = 0; r <= rows; r += 1) {
	if (r % 2 === 0) {
		//knit even rows as left-going, front-knits rows:
		for (let n = max; n >= min; n -= 1) {
			console.log(`knit - f${n} ${carrier}`);
		}
	} else {
		//knit odd rows as right-going, back-knits rows:
		//move loops to back bed:
		for (let n = min; n <= max; n += 1) {
			console.log(`xfer f${n} b${n}`);
		}
		//right-going, back-knits row:
		for (let n = min; n <= max; n += 1) {
			console.log(`knit + b${n} ${carrier}`);
		}
		//return loops to front bed:
		for (let n = min; n <= max; n += 1) {
			console.log(`xfer b${n} f${n}`);
		}
	}
}

// ---- take carrier out and drop remaining loops ----
//Take carrier out with yarn inserting hook:
console.log(`outhook ${carrier}`);

//drop loops:
for (let n = min; n <= max; n += 1) {
	console.log(`drop f${n}`);
}
#title: Garter Sheet (plain python)

#Write header:
print(';!knitout-2')
print(';;Machine: SWGN2')
print(';;Carriers: 1 2 3 4 5 6 7 8 9 10')

#Parameters:
min = 1 #needle number of left edge
max = 20 #needle number of right edge
rows = 20 #number of rows to knit
carrier = "3" #carrier name

# ---- set up initial loops and yarn carrier ----
#Bring in carrier:
print(f"inhook {carrier}")
#Set stitch table entry for cast-on:
print(f"x-stitch-number 101")

#On SWGN2 machines, carriers start on the right,
#so will start tucking onto needles right-to-left,
#and will be sure to tuck the rightmost needle in the first pass:
for n in range(max, min-1, -1):
	#tuck alternating needles, making sure to do the right edge:
	if (max - n) % 2 == 0:
		print(f"tuck - f{n} {carrier}")
#now, moving left-to-right, tuck the needles that were not tucked on the first pass:
for n in range(min, max+1, 1):
	if (max - n) % 2 != 0:
		print(f"tuck + f{n} {carrier}")
#Set stitch table entry for knitting:
print(f"x-stitch-number 105")
#knit two plain rows to allow cast-on stitches to relax:
# two isn't set in stone here -- it's just convenient
# for this example code to have the carrier end up on the right.
for n in range(max, min-1, -1):
	print(f"knit - f{n} {carrier}")
#send out yarn inserting hook; it is no longer needed to hold the yarn in place:
print(f"releasehook {carrier}")
for n in range(min, max+1, 1):
	print(f"knit + f{n} {carrier}")

# ---- garter sheet ----
#Create a garter (alternating all-front-knits and all-back-knits rows) sheet:
for r in range(0, rows+1, 1):
	if r % 2 == 0:
		#knit even rows as left-going, front-knits rows:
		for n in range(max, min-1, -1):
			print(f"knit - f{n} {carrier}")
	else:
		#knit odd rows as right-going, back-knits rows:
		#move loops to back bed:
		for n in range(min, max+1, 1):
			print(f"xfer f{n} b{n}")
		#right-going, back-knits row:
		for n in range(min, max+1, 1):
			print(f"knit + b{n} {carrier}")
		#return loops to front bed:
		for n in range(min, max+1, 1):
			print(f"xfer b{n} f{n}")

# ---- take carrier out and drop remaining loops ----
#Take carrier out with yarn inserting hook:
print(f"outhook {carrier}")

#drop loops:
for n in range(min, max+1, 1):
	print(f"drop f{n}")
#title: Garter Sheet (python with knitout module)

import knitout
K = knitout.Writer('1 2 3 4 5 6 7 8 9 10');
K.addHeader('Machine', 'SWGN2');

#Parameters:
min = 1 #needle number of left edge
max = 20 #needle number of right edge
rows = 20 #number of rows to knit
carrier = "3" #carrier name

# ---- set up initial loops and yarn carrier ----
#Bring in carrier:
K.inhook(carrier)
#Set stitch table entry for cast-on:
K.stitchNumber(101)

#On SWGN2 machines, carriers start on the right,
#so will start tucking onto needles right-to-left,
#and will be sure to tuck the rightmost needle in the first pass:
for n in range(max, min-1, -1):
	#tuck alternating needles, making sure to do the right edge:
	if (max - n) % 2 == 0:
		K.tuck("-", 'f' + str(n), carrier)
#now, moving left-to-right, tuck the needles that were not tucked on the first pass:
for n in range(min, max+1, 1):
	if (max - n) % 2 != 0:
		K.tuck("+", 'f' + str(n), carrier)
#Set stitch table entry for knitting:
K.stitchNumber(105)
#knit two plain rows to allow cast-on stitches to relax:
# two isn't set in stone here -- it's just convenient
# for this example code to have the carrier end up on the right.
for n in range(max, min-1, -1):
	K.knit("-", 'f' + str(n), carrier)
#send out yarn inserting hook; it is no longer needed to hold the yarn in place:
K.releasehook(carrier)
for n in range(min, max+1, 1):
	K.knit("+", 'f' + str(n), carrier)

# ---- garter sheet ----
#Create a garter (alternating all-front-knits and all-back-knits rows) sheet:
for r in range(0, rows+1, 1):
	if r % 2 == 0:
		#knit even rows as left-going, front-knits rows:
		for n in range(max, min-1, -1):
			K.knit("-", 'f' + str(n), carrier)
	else:
		#knit odd rows as right-going, back-knits rows:
		#move loops to back bed:
		for n in range(min, max+1, 1):
			K.xfer('f' + str(n), 'b' + str(n))
		#right-going, back-knits row:
		for n in range(min, max+1, 1):
			K.knit("+", 'b' + str(n), carrier)
		#return loops to front bed:
		for n in range(min, max+1, 1):
			K.xfer('b' + str(n), 'f' + str(n))

# ---- take carrier out and drop remaining loops ----
#Take carrier out with yarn inserting hook:
K.outhook(carrier)

#drop loops:
for n in range(min, max+1, 1):
	K.drop('f' + str(n))

K.write('garter-sheet.swgn2.k')