Satır kaydırma ve sözcük kaydırma - Line wrap and word wrap
Sözcük kaydırma olarak da bilinen satır kesme , metnin bir bölümünü, bir sayfanın, pencerenin veya başka bir görüntüleme alanının mevcut genişliğine sığması için satırlara bölmektir. Metin ekranında, satır dolduğunda satır kaydırma yeni bir satırda devam eder, böylece her satır görüntülenebilir pencereye sığar ve metnin yatay kaydırma olmadan yukarıdan aşağıya okunmasına izin verir . Sözcük kaydırma , çoğu metin düzenleyicisinin , sözcük işlemcisinin ve web tarayıcısının , mümkün olduğunda sözcüklerin içinden değil sözcüklerin arasına satırları ayırma ek özelliğidir . Sözcük kaydırma, paragraflar içinde yeni satır sınırlayıcılarının sabit kodlanmasını gereksiz kılar ve metin görüntüsünün farklı boyutlardaki görüntülere esnek ve dinamik bir şekilde uyum sağlamasına olanak tanır.
Yumuşak ve sert dönüşler
Yumuşak dönüş veya yumuşak kaydırma, satır kaydırma veya sözcük kaydırmadan (otomatik veya manuel) kaynaklanan kesintidir, oysa kesin dönüş veya kesin kaydırma, yeni bir paragraf oluşturan kasıtlı bir kesmedir. Sabit bir dönüşle, paragraf sonu biçimlendirmesi uygulanabilir (ve uygulanmalıdır) ( girinti veya dikey boşluk). Yumuşak sarma, satır uzunluklarının, kullanıcının pencere genişliği veya kenar boşluğu ayarlarındaki ayarlamalarla otomatik olarak ayarlanmasına olanak tanır ve tüm modern metin düzenleyicilerin, kelime işlemcilerin ve e-posta istemcilerinin standart bir özelliğidir . Sözcük kaydırma otomatik olarak yapıldığında manuel yumuşak aralar gereksizdir, bu nedenle "Enter" tuşuna basmak genellikle kesin bir dönüş sağlar.
Alternatif olarak, "yumuşak dönüş", paragraf sonu olmayan kasıtlı, depolanmış bir satır sonu anlamına gelebilir. Örneğin, posta adreslerini çok satırlı biçimde yazdırmak yaygındır, ancak birkaç satırın tek bir paragraf olduğu anlaşılır. Adresin sözcüklerini uygun uzunluktaki satırlara bölmek için satır sonları gerekir.
Çağdaş grafik kelime işlemcileri Microsoft Word ve OpenOffice.org'da , kullanıcıların her paragraf arasında bir satır başı ( ) yazması beklenir . Birinci satır girintisi veya paragraflar arasındaki boşluk gibi biçimlendirme ayarları, satırbaşının kesmeyi işaretlediği yerde etkili olur. Yumuşak bir dönüş olan paragraf dışı satır sonu, + veya menüler aracılığıyla eklenir ve metnin yeni bir satırdan başlaması gerektiği ancak yeni bir paragraf başlatmanın diğer yan etkilerinden hiçbirinin istenmediği durumlar için sağlanır. . ↵ Enter⇧ Shift↵ Enter
Metin yönelimli biçimlendirme dillerinde, tipik olarak bir biçimlendirme etiketi olarak yumuşak bir dönüş sunulur. Örneğin, HTML'de , yukarıda açıklanan kelime işlemcilerdeki yumuşak dönüşle aynı amaca sahip bir <br> etiketi vardır.
tek kod
Unicode Satır Bölme Algoritması olarak bilinen pozisyonları, bir dizi belirleyen kesme olanağı yeni bir satır başlatmak için uygun yerlerdir. Gerçek satır kesme konumları, algoritmanın kendisi tarafından değil, algoritmayı çağıran üst düzey yazılım tarafından kesme fırsatları arasından seçilir, çünkü metnin görüntülendiği ekranın genişliğini ve genişliğini yalnızca üst düzey yazılım bilir. görüntülenen metni oluşturan glifler.
Unicode karakter seti, bir satır ayırıcı karakterin yanı sıra, yumuşak dönüş ve kesin dönüşün anlamlarını temsil etmek için bir paragraf ayırıcı sağlar.
- 0x2028 HAT AYIRICI
- * bu semantiği açık bir şekilde temsil etmek için kullanılabilir
- 0x2029 PARAGRAF AYIRICI
- * bu semantiği açık bir şekilde temsil etmek için kullanılabilir
Kelime sınırları, tireleme ve sabit boşluklar
Yumuşak dönüşler genellikle tam sözcüklerin sonlarından sonra veya tam sözcükleri izleyen noktalama işaretlerinden sonra yerleştirilir. Bununla birlikte, sözcük kaydırma , bir sözcüğün içinde bir tire işaretinin ardından da oluşabilir . Bu bazen istenmez ve normal bir kısa çizgi yerine bölünmeyen kısa çizgi veya sert kısa çizgi kullanılarak engellenebilir .
Kısa çizgi içermeyen bir sözcük, içinde yumuşak kısa çizgiler bulunarak sarılabilir hale getirilebilir . Sözcük sarılmadığında (yani satırlar arasında bölünmediğinde), yumuşak kısa çizgi görünmez. Ancak sözcük satırlar arasında sarılırsa, bu yumuşak kısa çizgide yapılır ve bu noktada sözcüğün kesildiği üst satırda görünür bir kısa çizgi olarak gösterilir. (Hatları üzerinden kırılma değil, wrappable çıkartılacaktır bir kelime nadir durumlarda olmayan bir tire hiç bir görünür hale sıfır genişlik boşluğu kelime kırılma noktası (ler) izin verilen en konur.)
Bazen bitişik sözcükler arasında sözcük kaydırma istenmez. Bu gibi durumlarda, kelime sarma genellikle kullanılarak bloke edilebilir sabit bir alan ya da olmayan boşluk yerine normal mekanların, kelimeler arasında.
Çince, Japonca ve Korece içeren metinde sözcük kaydırma
In Çince , Japonca ve Korece , sözcük kaydırma genellikle önce ve herhangi sonrasında oluşabilecek Han karakteri , ancak belirli noktalama karakterleri yeni bir satır başlatmak için izin verilmez. Japon alfabesinin harfleri olan Japonca kana , uzantı olarak Han Karakterleri ( Kanji ) ile aynı şekilde ele alınır , yani kelimelerin kırılabileceği ve bunun gerçekleştiğine dair herhangi bir kısa çizgi veya başka bir belirti olmadan kırılma eğilimi vardır.
Ancak belirli koşullar altında sözcük kaydırma istenmez. Örneğin,
- kişisel adlarda sözcük kaydırma istenmeyebilir ve
- herhangi bir bileşik sözcük içinde sözcük kaydırma istenmeyebilir (metin sola yaslandığında, ancak yalnızca bazı stillerde).
Mevcut kelime işlemcilerin ve dizgi yazılımlarının çoğu, yukarıdaki senaryolardan herhangi birini işleyemez.
CJK noktalama işaretleri, yukarıda belirtilen özel durumlara benzer kurallara uyabilir veya uymayabilir. Bu kalmıştır CJK line kırma kuralları .
Bununla birlikte, CJK'da özel bir satır kesme kuralı durumu her zaman geçerlidir: CJK tire ve üç nokta içinde satır kaydırma asla gerçekleşmemelidir. Bu noktalama işaretleri her nedeniyle tüm mevcut bir sınırlama iki karakter tarafından temsil edilmesi gerektiği halde karakter kodlamaları , bunların her biri özünde iki tek bir noktalama işareti vardır ems , geniş iki tane bir em çapında noktalama işaretleri değil.
algoritma
Kelime kaydırma bir optimizasyon problemidir . Ne için optimize edilmesi gerektiğine bağlı olarak, farklı algoritmalar kullanılır.
Minimum satır sayısı
Kelime kaydırma yapmanın basit bir yolu , bir satıra mümkün olduğu kadar çok kelime koyan açgözlü bir algoritma kullanmak ve ardından yerleştirilecek başka kelime kalmayana kadar aynısını yapmak için bir sonraki satıra geçmektir. Bu yöntem, OpenOffice.org Writer ve Microsoft Word gibi birçok modern kelime işlemci tarafından kullanılmaktadır . Bu algoritma her zaman mümkün olan en az sayıda satır kullanır, ancak çok çeşitli uzunluklarda satırlara yol açabilir. Aşağıdaki sözde kod bu algoritmayı uygular:
SpaceLeft := LineWidth for each Word in Text if (Width(Word) + SpaceWidth) > SpaceLeft insert line break before Word in Text SpaceLeft := LineWidth - Width(Word) else SpaceLeft := SpaceLeft - (Width(Word) + SpaceWidth)
LineWidth
Bir satırın genişliği nerede , SpaceLeft
satırda doldurulacak kalan boşluk SpaceWidth
genişliği, tek bir boşluk karakterinin genişliği, Text
yinelenecek giriş metni ve Word
bu metinde bir kelimedir.
Minimum düzensizlik
TeX'te kullanılan farklı bir algoritma, daha estetik bir sonuç elde etmek için satırların sonundaki boşlukların uzunluklarının karelerinin toplamını en aza indirir. Aşağıdaki örnek, bu yöntemi her zaman kare alanını en aza indirmeyen açgözlü algoritma ile karşılaştırır.
Giriş metni için
AAA BB CC DDDDD
çizgi genişliği 6 ile açgözlü algoritma şunları üretecektir:
------ Line width: 6 AAA BB Remaining space: 0 CC Remaining space: 4 DDDDD Remaining space: 1
Bu yöntemle arta kalan alanın karesi toplamı . Bununla birlikte, optimal çözüm daha küçük toplamı elde eder :
------ Line width: 6 AAA Remaining space: 3 BB CC Remaining space: 1 DDDDD Remaining space: 1
Buradaki fark, ilk satırın BB
ondan sonra değil, öncesinde kesilmesi ve böylece daha iyi bir doğru marj ve daha düşük bir maliyet sağlamasıdır 11.
Bir kullanarak dinamik programlama hattını kırmak için hangi pozisyonları tercih algoritması yerine açgözlülükle sonlarını seçerek asgari raggedness ile çözüm zamanında bulunabilir , burada giriş metninde kelimelerin sayısıdır. Tipik olarak, bu tekniğin maliyet işlevi, paragrafın son satırında kalan boşluğu saymayacak şekilde değiştirilmelidir; bu değişiklik, bir paragrafın cezasız bir satırın ortasında bitmesine izin verir. Satır sayısı veya uzun sözcükleri tireleme maliyetleri gibi diğer faktörleri birleştiren daha karmaşık maliyet işlevlerini en aza indirmek için aynı dinamik programlama tekniğini uygulamak da mümkündür. SMAWK algoritmasını temel alan daha hızlı fakat daha karmaşık doğrusal zaman algoritmaları , minimum düzensizlik sorunu ve benzer özelliklere sahip diğer bazı maliyet fonksiyonları için de bilinir.
Tarih
1955'te Western Union tarafından geliştirilen bir "sayfa yazıcı kontrol ünitesinde" ilkel bir satır kesme özelliği kullanıldı . Bu sistem programlanabilir dijital bilgisayarlar yerine röleler kullanıyordu ve bu nedenle veri arabellekleri olmadan uygulanabilecek basit bir algoritmaya ihtiyaç duyuyordu . Western Union sisteminde, her satır 58. karakterden sonra gelen ilk boşluk karakterinde veya boşluk karakteri bulunamazsa 70. karakterde kesildi.
Satır kırma için açgözlü algoritma, Donald Knuth tarafından TeX dizgi sistemini açıklayan ve daha sonra Knuth & Plass (1981) tarafından daha ayrıntılı olarak yayınlanan 1977 tarihli yayınlanmamış bir notta ana hatlarıyla belirtilen dinamik programlama yönteminden önce gelir .
Ayrıca bakınız
Referanslar
Dış bağlantılar
Knuth'un algoritması
- "Knuth & Plass çizgisini kıran Yeniden Ziyaret Edildi"
- "tex_wrap": "TeX'in paragrafları satırlara ayırma algoritmasını uygular." Referans: "Paragrafları Satırlara Ayırmak", DE Knuth ve MF Plass, _Dijital Tipografi_, bölüm 3, CSLI Ders Notları #78.
- Text::Reflow - Knuth'un paragraflama algoritmasını kullanarak metin dosyalarını yeniden akıtmak için Perl modülü. "Yeniden akış algoritması, satırları aynı uzunlukta tutmaya çalışır, ancak noktalama işaretlerinde kesmeye ve uygun bir ad içinde veya belirli bağlaçlardan sonra ("a", "the", vb.) kesmeyi önlemeye çalışır. Sonuç, aşağıdakileri içeren bir dosyadır. fmt veya Text::Wrap tarafından üretilenden daha "düzensiz" bir sağ kenar boşluğu, ancak satır sonları arasında daha az ifade bölündüğü için okunması daha kolaydır."
- "yumuşak tireyi" tanımak için Knuth algoritmasını ayarlamak .
- Knuth'un kırma algoritması. Modelin ve algoritmanın ayrıntılı açıklaması, Donald E. Knuth'un "Digital Typography" (Stanford, California: Center for the Study of Language and Information, 1999), (CSLI Ders Notları, no. 78.)"; Google Summer Of Code 2006'nın bir parçası
- "Algoritma Boşluğunu Köprülemek: Paragraf Biçimlendirme için Doğrusal Zamanlı İşlevsel Bir Program" , Oege de Moor, Jeremy Gibbons, 1999
Diğer sözcük kaydırma bağlantıları
- ters problem - sadece (sarılmış) metne sığacak kadar geniş sütunlar seçmek ( Arşivlenmiş sürüm )
- KDE GUI'de kullanılan KWordWrap Sınıf Referansı
- Simon Pepping 2006'dan "Biçimlendirme Nesneleri için Knuth linebreaking elemanları" . Knuth modelini birkaç geliştirmeyi ele alacak şekilde genişletir.
- "Sayfa kırma stratejileri" Knuth modelini birkaç geliştirmeyi ele alacak şekilde genişletir.
- "Knuth-Plass benzeri bir satır kırma algoritması ... *Gerçekten* ilginç olan şey, Adobe'nin algoritmasının Knuth-Plass algoritmasından nasıl farklı olduğudur. Adobe algoritmasının patentini almayı başardığı için farklı olmalı (6,510,441)." [1]
- "Murray Sargent: Ofiste Matematik"
- "Satır kırma" , çeşitli zaman karmaşıklıklarının algoritmalarını karşılaştırır.