Portál AbcLinuxu, 31. října 2025 05:12
Řešení dotazu:
 26.2.2019 19:18
Josef Kufner             | skóre: 70
        26.2.2019 19:18
Josef Kufner             | skóre: 70
            
            
         26.2.2019 23:44
Josef Kufner             | skóre: 70
        26.2.2019 23:44
Josef Kufner             | skóre: 70
            
            
         26.2.2019 22:10
wamba             | skóre: 38
             | blog: wamba
        26.2.2019 22:10
wamba             | skóre: 38
             | blog: wamba
            
        < --- > binmode(STDIN, ":utf8"); > binmode(STDOUT, ":utf8"); > > 18,19c21 < my $hyp = new TeX::Hyphen; < --- > my $hyp = new TeX::Hyphen '/usr/share/texmf-dist/tex/csplain/base/czhyphen.tex', 'style' => 'czech',;
Groff umí dělit slova, dokonce má i slovník s českým dělení slov (ukradený z TeXu). Jen se mu musí říci, že jazyk je čeština parametrem -mcs. Příklad manuálové stránky natažené na šířku terminálu včetně dělených slov:
(echo ".ll ${COLUMNS}\n"; bzcat /usr/share/man/cs/man1/shigofumi.1.bz2) | /usr/bin/preconv | groff -Tutf8 -mandoc -mcs
            ... řádek textu zadané šířky další řádek blbě vycházejícíTotiž můžeš zarovnat:
... řádek textu zadané šířky další řádek blbě vychá- zejícínebo:
... řádek textu zadané šířky další řádek blbě vycháze- jícícož není ani v jednom případě do bloku.
 26.2.2019 23:42
Josef Kufner             | skóre: 70
        26.2.2019 23:42
Josef Kufner             | skóre: 70
            
            
        Těby dived ptyzruně. Měji šlucry tří chré lážlotist vumrou tiper v nic gláti úmýpech. Vlydi trou- di prýv k paská sro prytě fly- křu v kust. Oří o půcpa a vimoj opo trouchetrá utě děšležrokla a mlehřou. Puďni šru vonitědre crodra vremhrn niv, nit těpoma- bud zroum nědě hlysk srážlo věti v chévu břat z mřidis. Vrůštniž hrec z divluděře důd hrovu mru- fí hlů člymflů miť. Dě timan vé vřep dředi hlíboumrů otoučpa- bi vadigu skecru krel opiv ha- ti. Flůchlavrum o mrepré z glouš stomřá, cláni ratikřes sámřáč- lit šle a matěňáďsé. Z dělkác vostáčloř děť nip chlapréleň s myktý. Fi mlíďglůch v clů ně- chreť nichra kra zytý pepo zlo- famne leř. Třužláč klyť i vydě vo těž ďodlo hružlech drbětrévře tlezaz myv. Mežrůst šlévro nyd.A kdyby to někdo potřeboval, tady je kód:
#!/usr/bin/env python3
def monoblock(text,width=80,lang='czech',emergencystretch='2em'):
    content=r'''
    \documentclass[]{article}
    \usepackage{polyglossia}
    \setdefaultlanguage{%s}
    %%\usepackage{showhyphens}
    \usepackage{fontspec}
    \setmainfont{Latin Modern Mono}
    \pagestyle{empty}
    \usepackage{ragged2e}
    \lefthyphenmin=2
    %% tune emergencystretch by hand until happy
    \emergencystretch=%s
    \parindent=0pt
    \begin{document}
        \begin{minipage}{%dex}
            \RaggedRight
            %s
        \end{minipage}
    \end{document}
    '''%(lang,emergencystretch,width,text)
    import tempfile, subprocess, os.path, webbrowser, time
    with tempfile.TemporaryDirectory() as tmpDir:
        tex,pdf=[tmpDir+'/main.'+ext for ext in ('tex','pdf')]
        print(tex)
        f=open(tex,'w')
        f.write(content)
        f.close()
        subprocess.call(['lualatex',tex],cwd=tmpDir)
        txt=subprocess.check_output(['pdftotext','-raw',pdf,'-']).decode('utf-8')
        webbrowser.open('file://'+os.path.abspath(pdf))
        time.sleep(2)
        return expandToBlock(txt,width)
def expandToBlock(txt,wd):
    import re, random
    ll=txt.split('\n')
    lens=[len(l) for l in ll]
    maxWd=max(lens)
    if maxWd>wd: print('WARN: max unexpanded text width %d is greater than required width %d. Increasing to %d.'%(maxWd,wd,maxWd))
    wd=maxWd
    for i,l in enumerate(ll):
        # skip last paragraph line
        if i+1==len(ll) or (i+1<len(ll) and ll[i+1]==''): continue
        pats=[r'… \b',r'\. \b',r': \b',r', \b',r'\) \b',r'\b \(',r'\b \b']
        patReps=['… ','. ',': ',', ',') ',' (',' ']
        for ex in range(1,5): # expand to multiple spaces
            for pat,prep in zip([p.replace(' ',ex*' ') for p in pats],patReps):
                matches=list(re.finditer(pat,l))
                if not matches: continue
                #random.shuffle(matches)
                todo=min(len(matches),wd-len(l))
                m2=random.sample(matches,todo)
                # print('use %d occurrences of "%s" (out of %d)'%(todo,pat,len(matches)))
                # replace from right to left to preserve indices
                for m in sorted(m2,key=lambda x: -x.span()[0]): l=l[:m.span()[0]]+prep.replace(' ',(ex+1)*' ')+l[m.span()[1]:]
                if len(l)==wd: break
            if len(l)==wd: break
        ll[i]=l
    return '\n'.join(ll)
if __name__=='__main__':
    print('\n\n'+monoblock('Těby dived ptyzruně. Měji šlucry tří chré lážlotist vumrou tiper v nic gláti úmýpech. Vlydi troudi prýv k paská sro prytě flykřu v kust. Oří o půcpa a vimoj opo trouchetrá utě děšležrokla a mlehřou. Puďni šru vonitědre crodra vremhrn niv, nit těpomabud zroum nědě hlysk srážlo věti v chévu břat z mřidis. Vrůštniž hrec z divluděře důd hrovu mrufí hlů člymflů miť. Dě timan vé vřep dředi hlíboumrů otoučpabi vadigu skecru krel opiv hati. Flůchlavrum o mrepré z glouš stomřá, cláni ratikřes sámřáčlit šle a matěňáďsé. Z dělkác vostáčloř děť nip chlapréleň s myktý. Fi mlíďglůch v clů něchreť nichra kra zytý pepo zlofamne leř. Třužláč klyť i vydě vo těž ďodlo hružlech drbětrévře tlezaz myv. Mežrůst šlévro nyd.',width=40,emergencystretch='2em'))
            
        Tiskni
            
                Sdílej:
                 
                 
                 
                 
                 
                 
            
    
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.