Zalamování řádků a zalamování slov - Line wrap and word wrap

Řazení řádků , známé také jako zalamování slov , rozděluje část textu na řádky tak, aby se vešla do dostupné šířky stránky, okna nebo jiné oblasti zobrazení. Při zobrazení textu pokračuje zalamování řádku na novém řádku, když je řádek plný, takže každý řádek se vejde do viditelného okna, což umožňuje čtení textu shora dolů bez vodorovného posouvání . Zalomení textu je další funkcí většiny textových editorů , textových procesorů a webových prohlížečů , pokud je to možné, přerušovat řádky mezi slovy, nikoli uvnitř slov. Zalomení aplikace Word dělá zbytečné natvrdo kódovat oddělovače nových řádků v odstavcích a umožňuje zobrazení textu přizpůsobit se pružně a dynamicky zobrazení různých velikostí.

Měkké a tvrdé výnosy

Měkký návrat nebo měkké zalomení je zalomení, které je výsledkem zalomení řádku nebo zalomení slova (automatické nebo ruční), zatímco tvrdé vrácení nebo pevné zalomení je záměrné zalomení, které vytvoří nový odstavec. S tvrdou návratností lze (a mělo by) být použito formátování zalomení odstavce ( odsazení nebo svislé mezery). Měkké zalamování umožňuje automatické přizpůsobení délek řádků pomocí úpravy šířky okna uživatele nebo nastavení okrajů a je standardní funkcí všech moderních textových editorů, textových procesorů a e -mailových klientů . Když se automatické zalamování slov provádí automaticky, nejsou nutné ruční měkké přestávky, takže stisknutí klávesy „Enter“ obvykle přináší tvrdý návrat.

Alternativně může „měkký návrat“ znamenat úmyslný, uložený konec řádku, který není zalomením odstavce. Například je běžné tisknout poštovní adresy ve víceřádkovém formátu, ale několik řádků je chápáno jako jeden odstavec. K rozdělení slov adresy na řádky příslušné délky jsou potřeba konce řádků.

V současných grafických textových procesorech Microsoft Word a OpenOffice.org se od uživatelů očekává, že mezi každý odstavec zadají znak carriage return ( ). Nastavení formátování, například odsazení prvního řádku nebo mezery mezi odstavci, se projeví tam, kde návrat na začátek řádku označuje konec. Konec řádku bez odstavce, což je měkký návrat, je vložen pomocí + nebo prostřednictvím nabídek a je k dispozici pro případy, kdy by měl text začínat na novém řádku, ale nejsou požadovány žádné další vedlejší efekty spuštění nového odstavce . EnterShiftEnter

V textově orientovaných značkovacích jazycích je měkká návratnost obvykle nabízena jako značkovací značka. Například v HTML existuje tag <br>, který má stejný účel jako soft return ve výše popsaných textových procesorech.

Unicode

Unicode linka Breaking Algorithm určuje sadu pozic, známý jako zalomení příležitostí , které jsou vhodná místa, která začne nový řádek. Skutečné pozice konce řádků vybírá z příležitostí k přerušení software vyšší úrovně, který volá algoritmus, nikoli samotný algoritmus, protože pouze software vyšší úrovně ví o šířce displeje, na kterém se text zobrazuje, a šířce glyfy, které tvoří zobrazený text.

Znaková sada Unicode poskytuje znak oddělovače řádků a také oddělovač odstavců, které představují sémantiku měkkého a tvrdého návratu.

SEPARÁTOR ŘÁDKU 0x2028
* lze použít k reprezentaci této sémantiky jednoznačně
0x2029 ODDĚLOVAČ PARAGRAFU
* lze použít k reprezentaci této sémantiky jednoznačně

Hranice slova, dělení slov a mezery

Měkké návraty jsou obvykle umístěny za konce úplných slov nebo za interpunkci, která následuje za úplnými slovy. K zalamování slov však může dojít také za pomlčkou uvnitř slova. To je někdy žádoucí, a může být blokována pomocí nedělitelná pomlčka , nebo pevný spojovník , namísto běžné pomlčkou.

Slovo bez pomlček lze obalit tak, že v něm budou měkké spojovníky . Když slovo není zabaleno (tj. Není přerušeno přes řádky), měkká spojovník není viditelná. Pokud je však slovo zabaleno přes řádky, provede se to v měkké pomlčce, kdy se v horním řádku, kde je slovo přerušeno, zobrazí jako viditelná spojovník. (Ve výjimečném případě slova, které má být zabalitelné rozbitím přes čáry, ale aniž by se někdy objevila spojovník, se do povoleného bodu (bodů) zlomu ve slově vloží mezera s nulovou šířkou .)

Někdy je zalomení slova mezi sousedními slovy nežádoucí. V takových případech, zalamování lze obvykle blokována pomocí místa na pevném nebo nezlomitelná mezera mezi slovy, namísto pravidelných mezer.

Zalomení textu v textu obsahujícím čínštinu, japonštinu a korejštinu

V čínštině , japonštině a korejštině se zalamování slov obvykle může vyskytovat před a za jakýmkoli znakem Han , ale určité znaky interpunkce nesmí začínat nový řádek. S japonskou kanou , písmeny japonské abecedy, se zachází stejně jako s znaky Han ( Kanji ) v rozšířeném smyslu, což znamená, že slova mohou být, a bývají zlomena, bez spojovníku nebo jiného náznaku, že se to stalo.

Za určitých okolností však není zalamování slov žádoucí. Například,

  • zalamování slov v osobních jménech nemusí být požadované, a
  • zalamování slov nemusí být žádoucí v žádném složeném slově (když je text zarovnán vlevo, ale pouze v některých stylech).

Většina stávajících textových procesorů a sázecího softwaru nedokáže zvládnout ani jeden z výše uvedených scénářů.

Interpunkce CJK může, ale nemusí dodržovat pravidla podobná výše uvedeným zvláštním okolnostem. Je to na porušení pravidel v CJK .

Zvláštní případ pravidel pro přerušení řádků v CJK však vždy platí: zalomení řádku nesmí nikdy nastat uvnitř pomlčky a elipsy CJK. Přestože každé z těchto interpunkčních znamének musí být reprezentováno dvěma znaky z důvodu omezení všech existujících kódování znaků , každý z nich je ve své podstatě jediným interpunkčním znaménkem, které má šířku dvou ems , nikoli dvě jednopásmová interpunkční znaménka.

Algoritmus

Balení slov je problém optimalizace . V závislosti na tom, pro co je třeba optimalizovat, se používají různé algoritmy.

Minimální počet řádků

Jednoduchý způsob, jak zalamovat slova, je použít chamtivý algoritmus, který na řádek umístí co nejvíce slov, a poté přejdete na další řádek, abyste udělali totéž, dokud nezbyde žádné další slovo. Tuto metodu používá mnoho moderních textových procesorů, například OpenOffice.org Writer a Microsoft Word. Tento algoritmus vždy používá minimální možný počet řádků, ale může vést k šňůrám velmi rozdílných délek. Tento algoritmus implementuje následující pseudokód:

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)

Kde LineWidthje šířka řádku, SpaceLeftzbývající šířka mezery na řádku, která má být vyplněna, SpaceWidthje šířka jednoho znaku mezery, Textje vstupní text, který se má iterovat, a Wordje slovo v tomto textu.

Minimální otrhání

Jiný algoritmus, používaný v TeXu , minimalizuje součet druhých mocnin délek mezer na konci řádků, aby byl výsledek estetičtější. Následující příklad porovnává tuto metodu s chamtivým algoritmem, který ne vždy minimalizuje čtvercový prostor.

Pro vstupní text

AAA BB CC DDDDD

s šířkou čáry 6 by chamtivý algoritmus vytvořil:

------    Line width: 6
AAA BB    Remaining space: 0
CC        Remaining space: 4
DDDDD     Remaining space: 1

Součet čtvercového prostoru, který zbyl touto metodou, je . Optimální řešení však dosahuje menšího součtu :

------    Line width: 6
AAA       Remaining space: 3
BB CC     Remaining space: 1
DDDDD     Remaining space: 1

Rozdíl zde je v tom, že první řádek je přerušen dříve BBnež za ním, což přináší lepší pravé rozpětí a nižší náklady 11.

Pomocí algoritmu dynamického programování k výběru pozic, na kterých se má čára přerušit, místo chamtivého výběru zlomů lze včas najít řešení s minimální otrhaností , kde je počet slov ve vstupním textu. Obvykle by měla být nákladová funkce pro tuto techniku ​​upravena tak, aby nepočítala místo ponechané na posledním řádku odstavce; tato úprava umožňuje, aby odstavec končil uprostřed řádku bez trestu. Je také možné použít stejnou techniku ​​dynamického programování k minimalizaci složitějších nákladových funkcí, které kombinují další faktory, jako je počet řádků nebo náklady na dělení dlouhých slov. Rychlejší, ale komplikovanější lineární časové algoritmy založené na algoritmu SMAWK jsou také známé pro problém s minimální raggeditou a pro některé další nákladové funkce, které mají podobné vlastnosti.

Dějiny

Primitivní funkce prolomení řádků byla použita v roce 1955 v „řídicí jednotce tiskárny stránky“ vyvinuté společností Western Union . Tento systém používal spíše relé než programovatelné digitální počítače, a proto potřeboval jednoduchý algoritmus, který by mohl být implementován bez datových vyrovnávacích pamětí . V systému Western Union byl každý řádek přerušen u prvního znaku mezery, který se objevil po 58. znaku, nebo u 70. znaku, pokud nebyl nalezen žádný znak mezery.

Chamtivý algoritmus pro lámání řádků předchází metodě dynamického programování, kterou načrtl Donald Knuth v nepublikované poznámce z roku 1977 popisující jeho systém sazby TeX a později publikovanou podrobněji Knuth & Plass (1981) .

Viz také

Reference

externí odkazy

Knuthův algoritmus

Další odkazy na obtékání slov