Hyphenation

From Wiki
Jump to navigation Jump to search
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