Difference between revisions of "Hyphenation"

From Wiki
Jump to navigation Jump to search
(add hyphenateddigits)
(underscore hyphenation for SHA)
Line 42: Line 42:
 
</context>
 
</context>
  
 +
=== Underscore Hyphenation for SHA ===
 +
 +
The following sample deals with underscore hyphenation for SHA output (works with ConTeXt versions from 2021.05.15 22:45).
 +
 +
<context mode="lmtx" source=yes>
 +
\startluacode
 +
  function document.addfunnyhyphen(tfmdata)
 +
      local underscore = utf.byte("_")
 +
      local char      = tfmdata.characters[underscore]
 +
      if not char then return end
 +
      tfmdata.characters[0xFE000]  = {
 +
          width    = 0,
 +
          height  = 0,
 +
          depth    = 0,
 +
          commands = {
 +
              { "right", -char.width },
 +
              { "down", char.depth },
 +
              { "slot", 1, underscore },
 +
          }
 +
      }
 +
  end
 +
 +
  utilities.sequencers.appendaction("aftercopyingcharacters",
 +
  "after","document.addfunnyhyphen")
 +
 +
  local shared = {
 +
      start  = 1,
 +
      length = 1,
 +
      before = utf.char(0xFE000),
 +
      after  = nil,
 +
      left  = false,
 +
      right  = false,
 +
  }
 +
 +
  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,
 +
      righthyphenchar="FE000]
 +
 +
  \sethyphenationfeatures[sha]
 +
  \setuphyphenation[method=traditional]
 +
 +
  \ctxlua{require("util-sha")}
 +
  \def\hashfivefile#1{%
 +
    \ctxlua{context(utilities.sha2.hash512("#1"))}}
 +
 +
  \starttext
 +
  \startTEXpage[offset=1em, width=15em]
 +
  \hashfivefile{ConTeXt}
 +
  \stopTEXpage
 +
  \stoptext
 +
</context>
  
 
=== See also ===
 
=== See also ===

Revision as of 09:51, 22 May 2021

For hyphens in compound words, see Compound words.

When a word extends beyond the end of a line, it can be broken in the middle and written on two lines, with a hyphen to indicate the breakoff. This is called hyphenation. ConTeXt has a great many facilities for dealing with hyphenation, both automatically and manually; they are gathered on this page.

Change the hyphenation language

Use \language[de]. NB: this will also alter the marks used for \quotation, etc.

Allow breaking at existing hyphens

To allow breaking at hyphens, slashes, etc., write \setbreakpoints[compound] at the start of your document.

Specify how to break a word

Write \hyphenation{po-ly-syl-lab-ic} at the start of your document. (This will not be remembered across documents.)

Use the \- command. poly\-syllabic.

To never break a word, write \hyphenation{polysyllabic}.

Prevent hyphenation locally

There are two ways to prevent a word from being hyphenated: the traditional \hbox and the more natural command \unhyphenated.

\hbox{myfragileword}            % old-fashioned
\unhyphenated{myfragileword}   % MkIV, since 2013-04-21

Tune the auto-hyphenation algorithm

Use the \setupalign parameters concerning justification and hyphenation.

Penalize consecutive hyphens

To penalize hyphens on consecutive lines, set \doublehyphendemerits. Its default value is 10000; to double that, write \doublehyphendemerits=20000.

Mark hyphenated lines for review

See the article on reviewing hyphenation.

Hyphenate numbers and other non-words

Use \hyphenateddigits; it works in text and math mode and is available since 2021-01-28 (i.e. not yet in the wiki at the time of writing).

\pi\ = \hyphenateddigits[\unknown]{3.141592653589793238462643383279502884197169399375105}  \blank
  \pi\ = \hyphenateddigits{3.141592653589793238462643383279502884197169399375105}            \blank
x $\pi  = \hyphenateddigits[\unknown]{3.141592653589793238462643383279502884197169399375105}$ \blank
x $\pi  = \hyphenateddigits{3.141592653589793238462643383279502884197169399375105}$          \blank

Underscore Hyphenation for SHA

The following sample deals with underscore hyphenation for SHA output (works with ConTeXt versions from 2021.05.15 22:45).

 \startluacode
  function document.addfunnyhyphen(tfmdata)
      local underscore = utf.byte("_")
      local char       = tfmdata.characters[underscore]
      if not char then return end
      tfmdata.characters[0xFE000]   = {
          width    = 0,
          height   = 0,
          depth    = 0,
          commands = {
              { "right", -char.width },
              { "down", char.depth },
              { "slot", 1, underscore },
          }
      }
  end

  utilities.sequencers.appendaction("aftercopyingcharacters",
  "after","document.addfunnyhyphen")

  local shared = {
      start  = 1,
      length = 1,
      before = utf.char(0xFE000),
      after  = nil,
      left   = false,
      right  = false,
  }

  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,
      righthyphenchar="FE000]

  \sethyphenationfeatures[sha]
  \setuphyphenation[method=traditional]

  \ctxlua{require("util-sha")}
  \def\hashfivefile#1{%
    \ctxlua{context(utilities.sha2.hash512("#1"))}}

  \starttext
  \startTEXpage[offset=1em, width=15em]
  \hashfivefile{ConTeXt}
  \stopTEXpage
  \stoptext

See also