How to fix dialogue text bug? (model)

Hello, I have a problem with a script. It works perfectly, but when my script starts to write a dialog, some letters are not positioned correctly

Script function: The script divides the text into separate parts, and puts them into a holder (the holder contains UIList, which puts the letters in order).

dialogue File:
dialogueGui.rbxm (8.9 KB)

When my script capitalizes a letter, or the letter is too big, it doesn’t look nice in my dialog script. How can I fix this?

When I put TextScaled - it doesn’t help, the letters become not beautiful and even more not even. And if I use TextSize - I need to make the letters too small - to make it look normal.

Script:

local TS = game:GetService("TweenService")

local GUI = script.Parent
local Holder = GUI:FindFirstChild("DialogueHolder")

local writeSettings = {
	["waitToNext"] = .05,
	["Style"] = 3,
}

local ignoreSplitedTXT = {
	[1] = "",
	[2] = " "
}

local currText = "While searching for a list of english words (for an auto-complete tutorial) I found:"

local function writeEffect(txt)
	local createEffect = coroutine.wrap(function()
		if writeSettings.Style == 1 then
			local t1 = TS:Create(txt:FindFirstChild("UIScale"),TweenInfo.new(writeSettings.waitToNext * 1.4,Enum.EasingStyle.Quad,Enum.EasingDirection.Out),{Scale = .88})
			t1:Play()
			t1.Completed:Wait()
			local t2 = TS:Create(txt:FindFirstChild("UIScale"),TweenInfo.new(writeSettings.waitToNext * 1.2,Enum.EasingStyle.Quad,Enum.EasingDirection.Out),{Scale = 1})
			t2:Play()
			t2.Completed:Wait()
		elseif writeSettings.Style == 2 then
			local t1 = TS:Create(txt:FindFirstChild("UIScale"),TweenInfo.new(writeSettings.waitToNext * 2.4,Enum.EasingStyle.Quad,Enum.EasingDirection.Out),{Scale = .88})
			t1:Play()
			t1.Completed:Wait()
			local t2 = TS:Create(txt:FindFirstChild("UIScale"),TweenInfo.new(writeSettings.waitToNext * 2.2,Enum.EasingStyle.Quad,Enum.EasingDirection.Out),{Scale = 1})
			t2:Play()
			t2.Completed:Wait()
		elseif writeSettings.Style == 3 then
			local t1 = TS:Create(txt:FindFirstChild("UIScale"),TweenInfo.new(writeSettings.waitToNext * 1.4,Enum.EasingStyle.Quad,Enum.EasingDirection.Out),{Scale = .88})
			t1:Play()
			t1.Completed:Wait()
			local t2 = TS:Create(txt:FindFirstChild("UIScale"),TweenInfo.new(writeSettings.waitToNext * 1.2,Enum.EasingStyle.Quad,Enum.EasingDirection.Out),{Scale = 1.15})
			t2:Play()
			t2.Completed:Wait()
			local t3 = TS:Create(txt:FindFirstChild("UIScale"),TweenInfo.new(writeSettings.waitToNext * 1.7,Enum.EasingStyle.Quad,Enum.EasingDirection.Out),{Scale = 1})
			t3:Play()
			t3.Completed:Wait()
		end
	end)
	createEffect()
end

local function soundEffect(splitedTxt)
	if not table.find(ignoreSplitedTXT,splitedTxt) then
		script:FindFirstChild("SoundEffect"):Play()
	end
end

local function printThis()
	local SplitedText = string.split(currText,"")
	for _,v in SplitedText do

		local txt = script:FindFirstChild("Clone"):Clone()
		txt.Text = v
		txt.Parent = Holder
		
		soundEffect(v)
		writeEffect(txt)
		
		if v == "," then
			task.wait(writeSettings.waitToNext + .17)
		elseif v == "." then
			task.wait(writeSettings.waitToNext + .25)
		elseif v == ":" then
			task.wait(writeSettings.waitToNext + .20)
		elseif v == "-" then
			task.wait(writeSettings.waitToNext + .15)
		elseif v == " " then
			task.wait(writeSettings.waitToNext + .015)
		else
			task.wait(writeSettings.waitToNext)
		end
		
	end
end


wait(1)
printThis()