Line wrap og word wrap - Line wrap and word wrap

Linjeskift , også kjent som ordinnpakning , bryter en tekstdel inn i linjer slik at den passer inn i den tilgjengelige bredden på en side, et vindu eller et annet visningsområde. I tekstvisning, linje wrap fortsetter på en ny linje når en linje er full, slik at hver linje passer inn i det synlige vinduet, slik at tekst som skal leses fra topp til bunn uten noen horisontal rulling . Word wrap er tilleggsfunksjonen til de fleste tekstredigerere , tekstbehandlere og nettlesere , for å bryte linjer mellom ord i stedet for i ord, der det er mulig. Word wrap gjør det unødvendig å hardkode nye linjeavgrensere i avsnitt, og lar visning av tekst tilpasse seg fleksibelt og dynamisk til skjermer i forskjellige størrelser.

Myke og harde avkastninger

En myk retur eller myk omslag er bruddet som følge av linjeomslag eller ordomslag (enten automatisk eller manuell), mens en hard retur eller hard omslag er en forsettlig pause, og skaper et nytt avsnitt. Med hard retur kan (og bør) avsnittsbruddformatering brukes (enten innrykk eller vertikal mellomrom). Myk innpakning lar linjelengder justeres automatisk med justeringer av bredden på brukerens vindu eller marginnstillinger, og er en standardfunksjon for alle moderne tekstredigerere, tekstbehandlere og e -postklienter . Manuelle myke pauser er unødvendige når ordbryting utføres automatisk, så det er vanligvis vanskelig å trykke "Enter" -tasten.

Alternativt kan "myk retur" bety et forsettlig, lagret linjeskift som ikke er et avsnittsbrudd. For eksempel er det vanlig å skrive ut postadresser i et flerlinjesformat, men flere linjer er forstått som et enkelt avsnitt. Linjeskift er nødvendig for å dele ordene i adressen i linjer med passende lengde.

I de moderne grafiske tekstbehandlerne Microsoft Word og OpenOffice.org forventes det at brukerne skriver en vognretur ( ) mellom hvert avsnitt. Formateringsinnstillinger, for eksempel innrykk på første linje eller mellomrom mellom avsnitt, trer i kraft der vognreturen markerer bruddet. Et linjeskift uten avsnitt, som er en myk retur, settes inn med + eller via menyene, og er gitt for tilfeller der teksten skal starte på en ny linje, men ingen av de andre bivirkningene ved å starte et nytt avsnitt er ønsket . EnterShiftEnter

I tekstorienterte markeringsspråk tilbys vanligvis en myk retur som en merkelapp. For eksempel, i HTML er det en <br> -tag som har samme formål som den myke returen i tekstbehandlere beskrevet ovenfor.

Unicode

Den Unicode Linje Breaking algoritme bestemmer et sett av posisjoner, kjent som break muligheter , som er egnede steder der du kan starte en ny linje. De faktiske linjeskiftposisjonene velges blant pausemulighetene av programvaren på høyere nivå som kaller algoritmen, ikke av algoritmen selv, fordi bare programvaren på høyere nivå vet om bredden på displayet teksten vises på og bredden på tegnene som utgjør den viste teksten.

Unicode -tegnsettet gir et linjeseparatortegn samt et avsnittsseparator for å representere semantikken i myk retur og hard retur.

0x2028 LINJESeparator
* kan brukes til å representere denne semantikken utvetydig
0x2029 AVSNITT SEPARATOR
* kan brukes til å representere denne semantikken utvetydig

Ordgrenser, bindestrek og harde mellomrom

De myke avkastningene plasseres vanligvis etter slutten av fullstendige ord, eller etter skilletegn som følger fullstendige ord. Imidlertid kan ordomslag også forekomme etter en bindestrek inne i et ord. Dette er noen ganger ikke ønsket, og kan blokkeres ved å bruke en bindestrek eller hard bindestrek i stedet for en vanlig bindestrek.

Et ord uten bindestreker kan pakkes inn ved å ha myke bindestreker i det. Når ordet ikke er pakket inn (dvs. ikke er brutt på tvers av linjer), er ikke den myke bindestrek synlig. Men hvis ordet er viklet på tvers av linjer, gjøres dette ved den myke bindestrek, på hvilket tidspunkt det vises som en synlig bindestrek på den øverste linjen der ordet er brutt. (I det sjeldne tilfellet av et ord som er ment å kunne pakkes inn ved å bryte det på tvers av linjer, men uten å få et bindestrek til å vises, settes et mellomrom med null bredde til de tillatte brytpunktene i ordet.)

Noen ganger er ordomslag uønsket mellom tilgrensende ord. I slike tilfeller kan ordomslag vanligvis blokkeres ved å bruke et hardt mellomrom eller et ikke-brytende mellomrom mellom ordene, i stedet for vanlige mellomrom.

Ordinnpakning i tekst som inneholder kinesisk, japansk og koreansk

kinesisk , japansk og koreansk kan ordinnpakning vanligvis forekomme før og etter et Han -tegn , men visse skilletegn kan ikke starte en ny linje. Japansk kana , bokstaver i det japanske alfabetet, behandles på samme måte som Han -tegn ( Kanji ) i forlengelse, noe som betyr at ord kan og har en tendens til å bli brutt uten bindestrek eller annen indikasjon på at dette har skjedd.

Under visse omstendigheter er det imidlertid ikke ønskelig med ordinnpakning. For eksempel,

  • ordinnpakning er kanskje ikke ønsket i personnavn, og
  • ordinnpakning er kanskje ikke ønsket i sammensatte ord (når teksten er i flukt til venstre, men bare i noen stiler).

De fleste eksisterende tekstbehandlere og sats programvare kan ikke håndtere noen av de ovennevnte scenarier.

CJK- tegnsetting kan eventuelt følge regler som ligner på de ovennevnte spesielle omstendighetene. Det er opp til linjebrytende regler i CJK .

Et spesielt tilfelle av linjebrytende regler i CJK gjelder imidlertid alltid: Linjeomslag må aldri forekomme inne i CJK -bindestrek og ellips. Selv om hvert av disse skilletegnene må være representert med to tegn på grunn av en begrensning av alle eksisterende tegnkodinger , er hvert av disse iboende et enkelt skilletegn som er to ems bredt, ikke to skilletegn på ett em.

Algoritme

Ordinnpakning er et optimaliseringsproblem . Avhengig av hva som må optimaliseres for, brukes forskjellige algoritmer.

Minimum antall linjer

En enkel måte å gjøre ordinnpakning på er å bruke en grådig algoritme som setter så mange ord på en linje som mulig, for deretter å gå videre til neste linje for å gjøre det samme til det ikke er flere ord igjen å plassere. Denne metoden brukes av mange moderne tekstbehandlere, for eksempel OpenOffice.org Writer og Microsoft Word. Denne algoritmen bruker alltid det minste mulige antallet linjer, men kan føre til linjer med vidt forskjellige lengder. Følgende pseudokode implementerer denne algoritmen:

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)

Hvor LineWidther bredden på en linje, SpaceLefter den gjenværende bredden på plassen på linjen som skal fylles, SpaceWidther bredden på et enkelt mellomromstegn, Texter inndatateksten som skal gjentas og Worder et ord i denne teksten.

Minimum raggedness

En annen algoritme, brukt i TeX , minimerer summen av kvadratene til lengden på mellomrommene på slutten av linjene for å gi et mer estetisk tiltalende resultat. Følgende eksempel sammenligner denne metoden med den grådige algoritmen, som ikke alltid minimerer kvadratplass.

For inndatateksten

AAA BB CC DDDDD

med linjebredde 6 ville den grådige algoritmen produsere:

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

Summen av kvadratrommet igjen av denne metoden er . Imidlertid oppnår den optimale løsningen den mindre summen :

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

Forskjellen her er at den første linjen er brutt før i BBstedet for etter den, noe som gir en bedre høyremargin og en lavere kostnad 11.

Ved å bruke en dynamisk programmeringsalgoritme til å velge posisjonene som linjen skal brytes ved, i stedet for å velge pauser grådig, kan løsningen med minst mulig raggedness bli funnet i tide , hvor er antallet ord i inndatateksten. Vanligvis bør kostnadsfunksjonen for denne teknikken endres slik at den ikke teller plassen som er igjen på den siste linjen i et avsnitt; denne endringen tillater et avsnitt å ende midt på en linje uten straff. Det er også mulig å bruke den samme dynamiske programmeringsteknikken for å minimere mer komplekse kostnadsfunksjoner som kombinerer andre faktorer, for eksempel antall linjer eller kostnader for bindestrek for lange ord. Raskere, men mer kompliserte, lineære tidsalgoritmer basert på SMAWK -algoritmen er også kjent for problemet med minimalt raggedness, og for noen andre kostnadsfunksjoner som har lignende egenskaper.

Historie

En primitiv linjebrytende funksjon ble brukt i 1955 i en "sideskriverstyringsenhet" utviklet av Western Union . Dette systemet brukte reléer i stedet for programmerbare digitale datamaskiner, og trengte derfor en enkel algoritme som kunne implementeres uten databuffere . I Western Union -systemet ble hver linje brutt ved det første mellomromstegnet som dukket opp etter det 58. tegnet, eller med det 70. tegnet hvis det ikke ble funnet et mellomromstegn.

Den grådige algoritmen for linjeskifting går foran den dynamiske programmeringsmetoden som Donald Knuth skisserte i et ikke-publisert notat fra 1977 som beskriver TeX-settesystemet og senere utgitt mer detaljert av Knuth & Plass (1981) .

Se også

Referanser

Eksterne linker

Knuths algoritme

Andre lenker for ordomslag