Difference between revisions of "Wrapping"
Jump to navigation
Jump to search
m |
(minor changes) |
||
Line 1: | Line 1: | ||
− | Very long continuous strings (such as SHA512 keys or DNA sequences) might have to be broken after any character | + | Very long continuous strings (such as SHA512 keys or DNA sequences) might have to be broken after any character, independent from the current hyphenation scheme. |
== Example SHA512 == | == Example SHA512 == | ||
− | This is | + | This is Hans’ trick from the list for SHA512 keys |
− | < | + | <context source="yes"> |
\startluacode | \startluacode | ||
Line 93: | Line 93: | ||
\showframe | \showframe | ||
− | \ | + | \startTEXpage[offset=3em] |
\setupalign[tolerant,stretch] | \setupalign[tolerant,stretch] | ||
Line 104: | Line 104: | ||
} | } | ||
− | \ | + | \stopTEXpage |
</texcode> | </texcode> | ||
Revision as of 09:35, 4 February 2023
Very long continuous strings (such as SHA512 keys or DNA sequences) might have to be broken after any character, independent from the current hyphenation scheme.
Example SHA512
This is Hans’ trick from the list for SHA512 keys
\startluacode -- local shared = { -- start = 1, -- length = 1, -- left = false, -- right = false, -- } local shared = { start = 1, length = 1, before = utf.char(0xB7), after = nil, left = false, right = false, } -- languages.hyphenators.traditional.installmethod("sha", -- function(dictionary,word,n) -- local t = { } -- for i=1,#word do -- t[i] = shared -- end -- return t -- end -- ) -- or more efficient when used often: -- local all = { } -- for i=1,512 do -- all[i] = shared -- end -- languages.hyphenators.traditional.installmethod("sha", -- function(dictionary,word,n) -- return all -- end -- ) -- or more obscure: -- local all = table.setmetatableindex({ }, function(t,k) -- t[k] = shared -- return shared -- end) -- -- languages.hyphenators.traditional.installmethod("sha", -- function(dictionary,word,n) -- return all -- end -- ) -- or just (lua is fast enough anyway) local all = table.setmetatableindex({ }, function(t,k) return shared end) languages.hyphenators.traditional.installmethod("sha", function(dictionary,word,n) return all end ) \stopluacode \definehyphenationfeatures [sha] [characters=all, alternative=sha] % \unexpanded\def\sha#1% % {\begingroup % \sethyphenationfeatures[sha]% % #1% % \endgroup} % % \setuphyphenation[method=traditional] \unexpanded\def\sha#1% {\begingroup \sethyphenationfeatures[sha]% \setuphyphenation[method=traditional]% #1% \endgroup} \showframe \startTEXpage[offset=3em] \setupalign[tolerant,stretch] \dorecurse {10} {% some sha \sha{8b2f3c087046c3943ace0dc4f958ef2138e58a51b40e% ef6fab6fa1aeb845cc257a410ab1b914bc399b4293f% 31c76fc2c73e5be5ea4d329f9e6820984688efec2} and } \stopTEXpage == Example DNA sequences == This is an adoption from Wolfang using Lua:="yes"> \startluacode local shared = { start = 1, length = 1, before = nil, after = nil, left = false, right = false, } local all = table.setmetatableindex({ }, function(t,k) return shared end) languages.hyphenators.traditional.installmethod("dna", function(dictionary,word,n) return all end ) \stopluacode \definehyphenationfeatures [dna] [characters=all, alternative=dna] \startframedtext[width=6cm,style=mono] \sethyphenationfeatures[dna] \setuphyphenation[method=traditional] GATTGCTTACTCCTGGTTGGTGGGGCTTACATTCTGTCGCCTCAAAACTACTAGAGCCGGCATATTCTAGAAGGGCCGCCTTCATGTGG \stopframedtext
And a solution using \handletokens by Rik:
\define[1]\DNA{\handletokens #1\with\DNAspacer} \define[1]\DNAspacer{#1\hskip 2.3pt plus .1pt} \startframedtext[width=6cm,style=mono] \DNA{GATTGCTTACTCCTGGTTGGTGGGGCTTACATTCTGTCGCCTCAAAACTACTAGAGCCGGCATATTCTAGAAGGGCCGCCTTCATGTGG} \stopframedtext
One caveat, however: this method always adds the spacer value, and can result in a blank line at the end in some cases, even when the spacer value is zero. This is not the case with the lua mechanism.
See also
- Hyphenation
- \hyphenation to define the hyphenation of a specific word
- \startexceptions to define language-specific hyphenations
- \- to define an ad-hoc breakpoint
- \unhyphenated to prevent hyphenation
- \doublehyphendemerits to penalize hyphenation on consecutive lines
- \setupalign justification parameters to tweak the auto-hyphenation algorithm
- \definebreakpoints to initialize a breakpoint set
- \definebreakpoint to add to a breakpoint set
- \setbreakpoints to activate a breakpoint set
- \language to activate a language's settings, including hyphenation
- Wrapping
Verbatim with line breaks for another solution to the problem above.
Help from ConTeXt-Mailinglist/Forum
All issues with:
- SHA512 on the mailing list (all results)
- SHA512 on the mailing list (subject only)
- SHA512 on stack exchange
- SHA512 in ConTeXt's source
- after x characters+sort:newest Linebreak after x characters on the mailing list (all results)
- after x characters+sort:newest Linebreak after x characters on the mailing list (subject only)
- after x characters Linebreak after x characters on stack exchange
- after x characters Linebreak after x characters in ConTeXt's source