Rib

Rib fabrics are made up of alternating wales of front knits and back knits. An "FxB rib" contains a repeating pattern of F front knits followed by B back knits.

Rib fabrics are very stretchy in the course direction, making them useful for cuffs and hems.

One can knit a ribbed tube using the half-gauge technique.

Resources & References

3d rendering of rib structure
; 2x1 rib
	...
	knit + f4 A
	knit + f5 A
	knit + b6 A
	...
	knit - b6 A
	knit - f5 A
	knit - f4 A
	...
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: Rib Pattern Sheet (javascript with knitout module)
// Knits a customizable rib pattern over a sheet.

//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
let pattern = "bbffbf"; //rib pattern to be repeated over the sheet; use 'f' for front knit and 'b' for back knit

// ---- 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 ----
//Move loops indicated by the pattern to the back bed:
for (let n = min; n <= max; n += 1) {
	if (pattern[n % pattern.length] !== 'f') {
		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 (pattern[n % pattern.length] === 'f') {
				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 (pattern[n % pattern.length] === 'f') {
				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 (pattern[n % pattern.length] !== 'f') {
		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-pattern-sheet.kniterate.k');
;!knitout-2
;;Machine: Kniterate
;;Carriers: 1 2 3 4 5 6

;title: Rib Pattern Sheet (raw knitout)
; Knits a customizable rib pattern over a sheet.

;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
; pattern = "bbffbf" -- rib pattern to be repeated over the sheet; use 'f' for front knit and 'b' for back knit

; ---- 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 ----
;Move loops indicated by the pattern to the back bed:
xfer f1 b1
xfer f4 b4
xfer f6 b6
xfer f7 b7
xfer f10 b10
xfer f12 b12
xfer f13 b13
xfer f16 b16
xfer f18 b18
xfer f19 b19

;knit the main part of the sheet
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - b18 3
knit - f17 3
knit - b16 3
knit - f15 3
knit - f14 3
knit - b13 3
knit - b12 3
knit - f11 3
knit - b10 3
knit - f9 3
knit - f8 3
knit - b7 3
knit - b6 3
knit - f5 3
knit - b4 3
knit - f3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + f3 3
knit + b4 3
knit + f5 3
knit + b6 3
knit + b7 3
knit + f8 3
knit + f9 3
knit + b10 3
knit + f11 3
knit + b12 3
knit + b13 3
knit + f14 3
knit + f15 3
knit + b16 3
knit + f17 3
knit + b18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - b18 3
knit - f17 3
knit - b16 3
knit - f15 3
knit - f14 3
knit - b13 3
knit - b12 3
knit - f11 3
knit - b10 3
knit - f9 3
knit - f8 3
knit - b7 3
knit - b6 3
knit - f5 3
knit - b4 3
knit - f3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + f3 3
knit + b4 3
knit + f5 3
knit + b6 3
knit + b7 3
knit + f8 3
knit + f9 3
knit + b10 3
knit + f11 3
knit + b12 3
knit + b13 3
knit + f14 3
knit + f15 3
knit + b16 3
knit + f17 3
knit + b18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - b18 3
knit - f17 3
knit - b16 3
knit - f15 3
knit - f14 3
knit - b13 3
knit - b12 3
knit - f11 3
knit - b10 3
knit - f9 3
knit - f8 3
knit - b7 3
knit - b6 3
knit - f5 3
knit - b4 3
knit - f3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + f3 3
knit + b4 3
knit + f5 3
knit + b6 3
knit + b7 3
knit + f8 3
knit + f9 3
knit + b10 3
knit + f11 3
knit + b12 3
knit + b13 3
knit + f14 3
knit + f15 3
knit + b16 3
knit + f17 3
knit + b18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - b18 3
knit - f17 3
knit - b16 3
knit - f15 3
knit - f14 3
knit - b13 3
knit - b12 3
knit - f11 3
knit - b10 3
knit - f9 3
knit - f8 3
knit - b7 3
knit - b6 3
knit - f5 3
knit - b4 3
knit - f3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + f3 3
knit + b4 3
knit + f5 3
knit + b6 3
knit + b7 3
knit + f8 3
knit + f9 3
knit + b10 3
knit + f11 3
knit + b12 3
knit + b13 3
knit + f14 3
knit + f15 3
knit + b16 3
knit + f17 3
knit + b18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - b18 3
knit - f17 3
knit - b16 3
knit - f15 3
knit - f14 3
knit - b13 3
knit - b12 3
knit - f11 3
knit - b10 3
knit - f9 3
knit - f8 3
knit - b7 3
knit - b6 3
knit - f5 3
knit - b4 3
knit - f3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + f3 3
knit + b4 3
knit + f5 3
knit + b6 3
knit + b7 3
knit + f8 3
knit + f9 3
knit + b10 3
knit + f11 3
knit + b12 3
knit + b13 3
knit + f14 3
knit + f15 3
knit + b16 3
knit + f17 3
knit + b18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - b18 3
knit - f17 3
knit - b16 3
knit - f15 3
knit - f14 3
knit - b13 3
knit - b12 3
knit - f11 3
knit - b10 3
knit - f9 3
knit - f8 3
knit - b7 3
knit - b6 3
knit - f5 3
knit - b4 3
knit - f3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + f3 3
knit + b4 3
knit + f5 3
knit + b6 3
knit + b7 3
knit + f8 3
knit + f9 3
knit + b10 3
knit + f11 3
knit + b12 3
knit + b13 3
knit + f14 3
knit + f15 3
knit + b16 3
knit + f17 3
knit + b18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - b18 3
knit - f17 3
knit - b16 3
knit - f15 3
knit - f14 3
knit - b13 3
knit - b12 3
knit - f11 3
knit - b10 3
knit - f9 3
knit - f8 3
knit - b7 3
knit - b6 3
knit - f5 3
knit - b4 3
knit - f3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + f3 3
knit + b4 3
knit + f5 3
knit + b6 3
knit + b7 3
knit + f8 3
knit + f9 3
knit + b10 3
knit + f11 3
knit + b12 3
knit + b13 3
knit + f14 3
knit + f15 3
knit + b16 3
knit + f17 3
knit + b18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - b18 3
knit - f17 3
knit - b16 3
knit - f15 3
knit - f14 3
knit - b13 3
knit - b12 3
knit - f11 3
knit - b10 3
knit - f9 3
knit - f8 3
knit - b7 3
knit - b6 3
knit - f5 3
knit - b4 3
knit - f3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + f3 3
knit + b4 3
knit + f5 3
knit + b6 3
knit + b7 3
knit + f8 3
knit + f9 3
knit + b10 3
knit + f11 3
knit + b12 3
knit + b13 3
knit + f14 3
knit + f15 3
knit + b16 3
knit + f17 3
knit + b18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - b18 3
knit - f17 3
knit - b16 3
knit - f15 3
knit - f14 3
knit - b13 3
knit - b12 3
knit - f11 3
knit - b10 3
knit - f9 3
knit - f8 3
knit - b7 3
knit - b6 3
knit - f5 3
knit - b4 3
knit - f3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + f3 3
knit + b4 3
knit + f5 3
knit + b6 3
knit + b7 3
knit + f8 3
knit + f9 3
knit + b10 3
knit + f11 3
knit + b12 3
knit + b13 3
knit + f14 3
knit + f15 3
knit + b16 3
knit + f17 3
knit + b18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - b18 3
knit - f17 3
knit - b16 3
knit - f15 3
knit - f14 3
knit - b13 3
knit - b12 3
knit - f11 3
knit - b10 3
knit - f9 3
knit - f8 3
knit - b7 3
knit - b6 3
knit - f5 3
knit - b4 3
knit - f3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + f3 3
knit + b4 3
knit + f5 3
knit + b6 3
knit + b7 3
knit + f8 3
knit + f9 3
knit + b10 3
knit + f11 3
knit + b12 3
knit + b13 3
knit + f14 3
knit + f15 3
knit + b16 3
knit + f17 3
knit + b18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - b18 3
knit - f17 3
knit - b16 3
knit - f15 3
knit - f14 3
knit - b13 3
knit - b12 3
knit - f11 3
knit - b10 3
knit - f9 3
knit - f8 3
knit - b7 3
knit - b6 3
knit - f5 3
knit - b4 3
knit - f3 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 b4 f4
xfer b6 f6
xfer b7 f7
xfer b10 f10
xfer b12 f12
xfer b13 f13
xfer b16 f16
xfer b18 f18
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 Pattern Sheet (plain javascript)
// Knits a customizable rib pattern over a sheet.

//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
let pattern = "bbffbf"; //rib pattern to be repeated over the sheet; use 'f' for front knit and 'b' for back knit

// ---- 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 ----
//Move loops indicated by the pattern to the back bed:
for (let n = min; n <= max; n += 1) {
	if (pattern[n % pattern.length] !== 'f') {
		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 (pattern[n % pattern.length] === 'f') {
				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 (pattern[n % pattern.length] === 'f') {
				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 (pattern[n % pattern.length] !== 'f') {
		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 Pattern Sheet (plain python)
# Knits a customizable rib pattern over a sheet.

#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
pattern = "bbffbf" #rib pattern to be repeated over the sheet; use 'f' for front knit and 'b' for back knit

# ---- 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 ----
#Move loops indicated by the pattern to the back bed:
for n in range(min, max+1, 1):
	if pattern[n % len(pattern)] != 'f':
		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 pattern[n % len(pattern)] == 'f':
				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 pattern[n % len(pattern)] == 'f':
				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 pattern[n % len(pattern)] != 'f':
		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 Pattern Sheet (python with knitout module)
# Knits a customizable rib pattern over a sheet.

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
pattern = "bbffbf" #rib pattern to be repeated over the sheet; use 'f' for front knit and 'b' for back knit

# ---- 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 ----
#Move loops indicated by the pattern to the back bed:
for n in range(min, max+1, 1):
	if pattern[n % len(pattern)] != 'f':
		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 pattern[n % len(pattern)] == 'f':
				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 pattern[n % len(pattern)] == 'f':
				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 pattern[n % len(pattern)] != 'f':
		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-pattern-sheet.kniterate.k')
//title: Rib Pattern Sheet (javascript with knitout module)
// Knits a customizable rib pattern over a sheet.

//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
let pattern = "bbffbf"; //rib pattern to be repeated over the sheet; use 'f' for front knit and 'b' for back knit

// ---- 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 ----
//Move loops indicated by the pattern to the back bed:
for (let n = min; n <= max; n += 1) {
	if (pattern[n % pattern.length] !== 'f') {
		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 (pattern[n % pattern.length] === 'f') {
				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 (pattern[n % pattern.length] === 'f') {
				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 (pattern[n % pattern.length] !== 'f') {
		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-pattern-sheet.swgn2.k');
;!knitout-2
;;Machine: SWGN2
;;Carriers: 1 2 3 4 5 6 7 8 9 10

;title: Rib Pattern Sheet (raw knitout)
; Knits a customizable rib pattern over a sheet.

;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
; pattern = "bbffbf" -- rib pattern to be repeated over the sheet; use 'f' for front knit and 'b' for back knit

; ---- 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 ----
;Move loops indicated by the pattern to the back bed:
xfer f1 b1
xfer f4 b4
xfer f6 b6
xfer f7 b7
xfer f10 b10
xfer f12 b12
xfer f13 b13
xfer f16 b16
xfer f18 b18
xfer f19 b19

;knit the main part of the sheet
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - b18 3
knit - f17 3
knit - b16 3
knit - f15 3
knit - f14 3
knit - b13 3
knit - b12 3
knit - f11 3
knit - b10 3
knit - f9 3
knit - f8 3
knit - b7 3
knit - b6 3
knit - f5 3
knit - b4 3
knit - f3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + f3 3
knit + b4 3
knit + f5 3
knit + b6 3
knit + b7 3
knit + f8 3
knit + f9 3
knit + b10 3
knit + f11 3
knit + b12 3
knit + b13 3
knit + f14 3
knit + f15 3
knit + b16 3
knit + f17 3
knit + b18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - b18 3
knit - f17 3
knit - b16 3
knit - f15 3
knit - f14 3
knit - b13 3
knit - b12 3
knit - f11 3
knit - b10 3
knit - f9 3
knit - f8 3
knit - b7 3
knit - b6 3
knit - f5 3
knit - b4 3
knit - f3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + f3 3
knit + b4 3
knit + f5 3
knit + b6 3
knit + b7 3
knit + f8 3
knit + f9 3
knit + b10 3
knit + f11 3
knit + b12 3
knit + b13 3
knit + f14 3
knit + f15 3
knit + b16 3
knit + f17 3
knit + b18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - b18 3
knit - f17 3
knit - b16 3
knit - f15 3
knit - f14 3
knit - b13 3
knit - b12 3
knit - f11 3
knit - b10 3
knit - f9 3
knit - f8 3
knit - b7 3
knit - b6 3
knit - f5 3
knit - b4 3
knit - f3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + f3 3
knit + b4 3
knit + f5 3
knit + b6 3
knit + b7 3
knit + f8 3
knit + f9 3
knit + b10 3
knit + f11 3
knit + b12 3
knit + b13 3
knit + f14 3
knit + f15 3
knit + b16 3
knit + f17 3
knit + b18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - b18 3
knit - f17 3
knit - b16 3
knit - f15 3
knit - f14 3
knit - b13 3
knit - b12 3
knit - f11 3
knit - b10 3
knit - f9 3
knit - f8 3
knit - b7 3
knit - b6 3
knit - f5 3
knit - b4 3
knit - f3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + f3 3
knit + b4 3
knit + f5 3
knit + b6 3
knit + b7 3
knit + f8 3
knit + f9 3
knit + b10 3
knit + f11 3
knit + b12 3
knit + b13 3
knit + f14 3
knit + f15 3
knit + b16 3
knit + f17 3
knit + b18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - b18 3
knit - f17 3
knit - b16 3
knit - f15 3
knit - f14 3
knit - b13 3
knit - b12 3
knit - f11 3
knit - b10 3
knit - f9 3
knit - f8 3
knit - b7 3
knit - b6 3
knit - f5 3
knit - b4 3
knit - f3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + f3 3
knit + b4 3
knit + f5 3
knit + b6 3
knit + b7 3
knit + f8 3
knit + f9 3
knit + b10 3
knit + f11 3
knit + b12 3
knit + b13 3
knit + f14 3
knit + f15 3
knit + b16 3
knit + f17 3
knit + b18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - b18 3
knit - f17 3
knit - b16 3
knit - f15 3
knit - f14 3
knit - b13 3
knit - b12 3
knit - f11 3
knit - b10 3
knit - f9 3
knit - f8 3
knit - b7 3
knit - b6 3
knit - f5 3
knit - b4 3
knit - f3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + f3 3
knit + b4 3
knit + f5 3
knit + b6 3
knit + b7 3
knit + f8 3
knit + f9 3
knit + b10 3
knit + f11 3
knit + b12 3
knit + b13 3
knit + f14 3
knit + f15 3
knit + b16 3
knit + f17 3
knit + b18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - b18 3
knit - f17 3
knit - b16 3
knit - f15 3
knit - f14 3
knit - b13 3
knit - b12 3
knit - f11 3
knit - b10 3
knit - f9 3
knit - f8 3
knit - b7 3
knit - b6 3
knit - f5 3
knit - b4 3
knit - f3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + f3 3
knit + b4 3
knit + f5 3
knit + b6 3
knit + b7 3
knit + f8 3
knit + f9 3
knit + b10 3
knit + f11 3
knit + b12 3
knit + b13 3
knit + f14 3
knit + f15 3
knit + b16 3
knit + f17 3
knit + b18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - b18 3
knit - f17 3
knit - b16 3
knit - f15 3
knit - f14 3
knit - b13 3
knit - b12 3
knit - f11 3
knit - b10 3
knit - f9 3
knit - f8 3
knit - b7 3
knit - b6 3
knit - f5 3
knit - b4 3
knit - f3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + f3 3
knit + b4 3
knit + f5 3
knit + b6 3
knit + b7 3
knit + f8 3
knit + f9 3
knit + b10 3
knit + f11 3
knit + b12 3
knit + b13 3
knit + f14 3
knit + f15 3
knit + b16 3
knit + f17 3
knit + b18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - b18 3
knit - f17 3
knit - b16 3
knit - f15 3
knit - f14 3
knit - b13 3
knit - b12 3
knit - f11 3
knit - b10 3
knit - f9 3
knit - f8 3
knit - b7 3
knit - b6 3
knit - f5 3
knit - b4 3
knit - f3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + f3 3
knit + b4 3
knit + f5 3
knit + b6 3
knit + b7 3
knit + f8 3
knit + f9 3
knit + b10 3
knit + f11 3
knit + b12 3
knit + b13 3
knit + f14 3
knit + f15 3
knit + b16 3
knit + f17 3
knit + b18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - b18 3
knit - f17 3
knit - b16 3
knit - f15 3
knit - f14 3
knit - b13 3
knit - b12 3
knit - f11 3
knit - b10 3
knit - f9 3
knit - f8 3
knit - b7 3
knit - b6 3
knit - f5 3
knit - b4 3
knit - f3 3
knit - f2 3
knit - b1 3
;knit odd rows as right-going:
knit + b1 3
knit + f2 3
knit + f3 3
knit + b4 3
knit + f5 3
knit + b6 3
knit + b7 3
knit + f8 3
knit + f9 3
knit + b10 3
knit + f11 3
knit + b12 3
knit + b13 3
knit + f14 3
knit + f15 3
knit + b16 3
knit + f17 3
knit + b18 3
knit + b19 3
knit + f20 3
;knit even rows as left-going:
knit - f20 3
knit - b19 3
knit - b18 3
knit - f17 3
knit - b16 3
knit - f15 3
knit - f14 3
knit - b13 3
knit - b12 3
knit - f11 3
knit - b10 3
knit - f9 3
knit - f8 3
knit - b7 3
knit - b6 3
knit - f5 3
knit - b4 3
knit - f3 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 b4 f4
xfer b6 f6
xfer b7 f7
xfer b10 f10
xfer b12 f12
xfer b13 f13
xfer b16 f16
xfer b18 f18
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 Pattern Sheet (plain javascript)
// Knits a customizable rib pattern over a sheet.

//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
let pattern = "bbffbf"; //rib pattern to be repeated over the sheet; use 'f' for front knit and 'b' for back knit

// ---- 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 ----
//Move loops indicated by the pattern to the back bed:
for (let n = min; n <= max; n += 1) {
	if (pattern[n % pattern.length] !== 'f') {
		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 (pattern[n % pattern.length] === 'f') {
				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 (pattern[n % pattern.length] === 'f') {
				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 (pattern[n % pattern.length] !== 'f') {
		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 Pattern Sheet (plain python)
# Knits a customizable rib pattern over a sheet.

#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
pattern = "bbffbf" #rib pattern to be repeated over the sheet; use 'f' for front knit and 'b' for back knit

# ---- 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 ----
#Move loops indicated by the pattern to the back bed:
for n in range(min, max+1, 1):
	if pattern[n % len(pattern)] != 'f':
		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 pattern[n % len(pattern)] == 'f':
				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 pattern[n % len(pattern)] == 'f':
				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 pattern[n % len(pattern)] != 'f':
		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 Pattern Sheet (python with knitout module)
# Knits a customizable rib pattern over a sheet.

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
pattern = "bbffbf" #rib pattern to be repeated over the sheet; use 'f' for front knit and 'b' for back knit

# ---- 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 ----
#Move loops indicated by the pattern to the back bed:
for n in range(min, max+1, 1):
	if pattern[n % len(pattern)] != 'f':
		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 pattern[n % len(pattern)] == 'f':
				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 pattern[n % len(pattern)] == 'f':
				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 pattern[n % len(pattern)] != 'f':
		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-pattern-sheet.swgn2.k')