Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Justification for Indic scripts (Malayalam) #308

Closed
rajeeshknambiar opened this issue Apr 13, 2016 · 5 comments
Closed

Justification for Indic scripts (Malayalam) #308

rajeeshknambiar opened this issue Apr 13, 2016 · 5 comments

Comments

@rajeeshknambiar
Copy link
Contributor

I'm making use of frametricks to typeset a 3 column article for Malayalam script (language 'ml'). With default linebreak.tolerance and even upto 9000, text 'overflows' to next column.
sile-default-linebreak

With linebreak.tolerance set to 10000, text fits well within the column boundaries, but justification is really bad.
sile-linebreak-10k

Not sure if it is related with issue #102. MWE below:

\begin[class=book]{document}%
\script[src=packages/frametricks]
\script[src=packages/image]
\set[parameter=linebreak.tolerance,value=10000]
%\set[parameter=linebreak.hyphenPenalty,value=10]

\begin[first-content-frame=title]{pagetemplate}
  \frame[id=gutter,width=3%]
  \frame[id=title, top=top(content), bottom=top(title)+5%, left=left(content), right=right(content),next=column1]
  \frame[id=column1,left=left(content),right=left(gutter),top=bottom(title)+2,bottom=bottom(content),width=25%,next=column2]
  \frame[id=column2,left=right(gutter),top=top(column1),bottom=top(bottomBox)-2%,width=width(column1),next=column3]
  \frame[id=column3,left=right(gutter)+width(column2)+width(gutter),top=top(column2),bottom=top(bottomBox)-2%,width=width(column2)]
  \frame[id=bottomBox,bottom=bottom(content),left=left(column2)+1%,right=right(column3),height=200px]
\end{pagetemplate}

% Main title
\raggedleft{\font[family=Keraleeyam,size=40pt]{{മീൻപിടിക്കാൻ പോരുന്നോ?}}}
\raggedleft{\font[family=Keraleeyam,size=20pt]{മനോജ് കരിങ്ങാമഠത്തിൽ}}
\par\framebreak\par

\font[family=Rachana,language=ml,size=14pt]

\noindent\float[bottomboundary=10pt]{\font[size=36pt]{വേ}}ണുച്ചേട്ടനോട് സംസാരിച്ചിരിക്കുക നല്ല രസമാണ്. ഒരു ദിവസം വൈകിട്ടാണ് അദ്ദേഹത്തെ കാണുന്നത്. നീണ്ടുപരന്നു കിടക്കുന്ന പാടത്തിനു നടുവിലെ ചെമ്മൺനിരത്തിൽ പാടത്തേക്കു കാലും തൂക്കിയിട്ടിരിക്കുന്നു. കൈയിൽ പാടത്തെ വെള്ളത്തിൽ താഴ്ത്തിയിട്ടിരിക്കുന്ന ചൂണ്ടയും. ഞങ്ങളുടെ തലമുറയ്ക്ക് കേട്ടുകേൾവിപോലും ഇല്ലാത്ത പല കാര്യങ്ങളും അദ്ദേഹത്തിനറിയാം. പ്രത്യേകിച്ചും തൃശ്ശൂരിലെ കോൾപ്പാടങ്ങളെക്കുറിച്ചും അവിടുത്തെ മീനുകളെക്കുറിച്ചും അവയെ പിടിക്കാനുള്ള രസകരമായ ചില രീതികളെക്കുറിച്ചും. അത്ര എളുപ്പത്തിൽ പിടിതരുന്ന ആളൊന്നുമല്ല വേണുച്ചേട്ടൻ. കുറെ നേരത്തെ സൗഹൃദസംഭാഷണത്തിനു ശേഷമാണ് അദ്ദേഹം പലതും പറഞ്ഞുതന്നതു തന്നെ.

അനുഗ്രഹീതമായ കാലാവസ്ഥയും ആവശ്യത്തിലധികം മഴയും വർഷം മുഴുവൻ കുടിനീർ ചുരത്തുന്ന കാടുകളും അവിടെ നിന്നുത്ഭവിക്കുന്ന പുഴകളും അതിനോടനുബന്ധിച്ചുള്ള തണ്ണീർത്തടങ്ങളും പാടശേഖരവും കായലുകളുമൊക്കെയുള്ള നമ്മുടെ നാട്ടിൽ ഒരുകാലത്ത് സുലഭമായി ലഭിച്ചിരുന്ന ഒന്നായിരുന്നു മീനുകൾ. അനേകമനേകം ജാതി മീനുകൾ. പലരുടെയും ജീവിതം തന്നെ മീൻപിടുത്തത്തെ ആശ്രയിച്ചായിരുന്നു എന്നും പറയാം. കടലോടു ചേർന്നുള്ള മീൻപിടുത്തം മാത്രമായിരുന്നില്ല ഇവിടെ. ഗ്രാമപ്രദേശങ്ങളിലൂടെ ഒഴുകുന്ന കുഞ്ഞുകുഞ്ഞ് അരുവികളിലും തോട്ടിലും കുളങ്ങളിലും എല്ലാം മീനുകളുണ്ടായിരുന്നു, മീൻപിടുത്തക്കാരും. അവരുടെ മീൻപിടുത്തരീതികൾ, മീനുകളുടെ ചില സ്വഭാവങ്ങൾ എല്ലാം വേണുച്ചേട്ടന്റെ സംഭാഷണത്തിൽ നിറഞ്ഞുനിന്നു.

തൃശ്ശൂരിലെ കോൾനിലങ്ങളുടെ കൃഷിയുമായി അഭേദ്യമായ ബന്ധമാണ് അവിടത്തെ മീൻപിടുത്തരീതികൾക്കുള്ളത്. ഇടവപ്പാതി എത്തുമ്പോൾ നാട്ടിലെ മിക്കവരും കൂട്ടത്തോടെ മീൻപിടുത്തത്തിനിറങ്ങും. ഒട്ടും ശാസ്ത്രീയമല്ലെങ്കിൽപ്പോലും എളുപ്പത്തിൽ മീൻപിടിക്കാനാക്കുന്ന ഊത്ത അല്ലെങ്കിൽ ഊത്തയിളക്കം എന്ന പ്രതിഭാസം ഇക്കാലത്താണ്. മീൻപിടിക്കാൻ ചെറുപ്പക്കാരുടെ ഒരു പടതന്നെയുണ്ടാകും.

\typeset-into[frame=bottomBox]{\img[src=images/manjakkoori.jpg,width=300px,height=200px] \center{മഞ്ഞക്കൂരി (Horabagrus brachysoma)}}

മീനുകൾ കൂട്ടത്തോടെ നടത്തുന്ന ദേശാന്തരഗമനമാണ് ഊത്തയിളക്കം. ജൂൺ ആദ്യത്തോടെ കേരളത്തിലെത്തുന്ന കാലവർഷം മീനുകളുടെ പ്രജനനകാലം കൂടിയാണ്. ഒഴുക്കിനെതിരെ സഞ്ചരിക്കുന്ന സ്വഭാവമുണ്ട് ഇക്കാലത്ത് മീനുകൾക്ക്. മഴക്കാലത്ത് വെള്ളംകെട്ടുന്ന വയലുകൾ, ചെറുതടാകങ്ങൾ, കൈത്തോടുകൾ, കൃത്രിമക്കനാലുകൾ, ചതുപ്പുകൾ തുടങ്ങിയ ഇടങ്ങളിലേക്ക് കൂട്ടത്തോടെ നദികളിൽനിന്നും മറ്റും സഞ്ചരിച്ചു ചെന്ന് പ്രജനനം നടത്തി അവർ തിരിച്ചു പോകുന്നു.
\end{document}

Fonts used in MWE can be downloaded from https://smc.org.in/downloads/fonts/rachana/Rachana-Regular.ttf and https://smc.org.in/downloads/fonts/keraleeyam/Keraleeyam.ttf

For comparison, here is better output using XeTeX. For optimal hyphenation I defined \lefthyphenmin=3 and \righthyphenmin=5 for Malayalam.
xetex-linebreak

SILE would be very useful with its concept of 'frame' over XeTeX in easily typesetting magazines and articles for our language, so it would be great to find solution for these issues.
Questions:

  1. What is the optimal linebreak for a good justification, how to experiment with it?
  2. How best to define frames? Could the frametricks documentation be elaborated?
@rajeeshknambiar rajeeshknambiar changed the title Hyphenation/Justification for Indic scripts (Malayalam) Justification for Indic scripts (Malayalam) Apr 13, 2016
@simoncozens
Copy link
Member

Thanks; I shall take a look at this. Is there any chance you can give me the xetex source as well? That way I can trace where the H&J engine is behaving differently.

@rajeeshknambiar
Copy link
Contributor Author

Oh yes, certainly. Here is the XeTeX source:

\documentclass[a4paper,12pt]{article} 
\usepackage{multicol}
\usepackage{polyglossia} 
\setdefaultlanguage{malayalam} 
\setmainfont[Script=Malayalam,Ligatures=TeX,Numbers=OldStyle]{Rachana} 
\newfontfamily\headingfont[Script=Malayalam]{Keraleeyam}

\lefthyphenmin=3
\righthyphenmin=5

\newenvironment{myFigure}
  {\par\medskip\noindent\minipage{2\linewidth}}
  {\endminipage\par\medskip}

\begin{document}

\begin{flushright} {\fontsize{40pt}{20pt} \bf \headingfont മീൻപിടിക്കാൻ പോരുന്നോ?} \\
 {\fontsize{16pt}{12pt} \headingfont മനോജ് കരിങ്ങാമഠത്തിൽ} \\
\end{flushright}
\bigskip

\begin{multicols}{3}
\setlength{\columnsep}{24pt}

\noindent {\fontsize{36pt}{20pt}\selectfont വേ}ണുച്ചേട്ടനോട് സംസാരിച്ചിരിക്കുക നല്ല രസമാണ്. ഒരു ദിവസം വൈകിട്ടാണ് അദ്ദേഹത്തെ കാണുന്നത്. നീണ്ടുപരന്നു കിടക്കുന്ന പാടത്തിനു നടുവിലെ ചെമ്മൺനിരത്തിൽ പാടത്തേക്കു കാലും തൂക്കിയിട്ടിരിക്കുന്നു. കൈയിൽ പാടത്തെ വെള്ളത്തിൽ താഴ്ത്തിയിട്ടിരിക്കുന്ന ചൂണ്ടയും. ഞങ്ങളുടെ തലമുറയ്ക്ക് കേട്ടുകേൾവിപോലും ഇല്ലാത്ത പല കാര്യങ്ങളും അദ്ദേഹത്തിനറിയാം. പ്രത്യേകിച്ചും തൃശ്ശൂരിലെ കോൾപ്പാടങ്ങളെക്കുറിച്ചും അവിടുത്തെ മീനുകളെക്കുറിച്ചും അവയെ പിടിക്കാനുള്ള രസകരമായ ചില രീതികളെക്കുറിച്ചും. അത്ര എളുപ്പത്തിൽ പിടിതരുന്ന ആളൊന്നുമല്ല വേണുച്ചേട്ടൻ. കുറെ നേരത്തെ സൗഹൃദസംഭാഷണത്തിനു ശേഷമാണ് അദ്ദേഹം പലതും പറഞ്ഞുതന്നതു തന്നെ.

അനുഗ്രഹീതമായ കാലാവസ്ഥയും ആവശ്യത്തിലധികം മഴയും വർഷം മുഴുവൻ കുടിനീർ ചുരത്തുന്ന കാടുകളും അവിടെ നിന്നുത്ഭവിക്കുന്ന പുഴകളും അതിനോടനുബന്ധിച്ചുള്ള തണ്ണീർത്തടങ്ങളും പാടശേഖരവും കായലുകളുമൊക്കെയുള്ള നമ്മുടെ നാട്ടിൽ ഒരുകാലത്ത് സുലഭമായി ലഭിച്ചിരുന്ന ഒന്നായിരുന്നു മീനുകൾ. അനേകമനേകം ജാതി മീനുകൾ. പലരുടെയും ജീവിതം തന്നെ മീൻപിടുത്തത്തെ ആശ്രയിച്ചായിരുന്നു എന്നും പറയാം. കടലോടു ചേർന്നുള്ള മീൻപിടുത്തം മാത്രമായിരുന്നില്ല ഇവിടെ. ഗ്രാമപ്രദേശങ്ങളിലൂടെ ഒഴുകുന്ന കുഞ്ഞുകുഞ്ഞ് അരുവികളിലും തോട്ടിലും കുളങ്ങളിലും എല്ലാം മീനുകളുണ്ടായിരുന്നു, മീൻപിടുത്തക്കാരും. അവരുടെ മീൻപിടുത്തരീതികൾ, മീനുകളുടെ ചില സ്വഭാവങ്ങൾ എല്ലാം വേണുച്ചേട്ടന്റെ സംഭാഷണത്തിൽ നിറഞ്ഞുനിന്നു.

\begin{myFigure}
\includegraphics[width=\textwidth]{images/manjakkoori.jpg}
%\centering \caption{മഞ്ഞക്കൂരി (Horabagrus brachysoma)}
\end{myFigure}

തൃശ്ശൂരിലെ കോൾനിലങ്ങളുടെ കൃഷിയുമായി അഭേദ്യമായ ബന്ധമാണ് അവിടത്തെ മീൻപിടുത്തരീതികൾക്കുള്ളത്. ഇടവപ്പാതി എത്തുമ്പോൾ നാട്ടിലെ മിക്കവരും കൂട്ടത്തോടെ മീൻപിടുത്തത്തിനിറങ്ങും. ഒട്ടും ശാസ്ത്രീയമല്ലെങ്കിൽപ്പോലും എളുപ്പത്തിൽ മീൻപിടിക്കാനാക്കുന്ന ഊത്ത അല്ലെങ്കിൽ ഊത്തയിളക്കം എന്ന പ്രതിഭാസം ഇക്കാലത്താണ്. മീൻപിടിക്കാൻ ചെറുപ്പക്കാരുടെ ഒരു പടതന്നെയുണ്ടാകും.

മീനുകൾ കൂട്ടത്തോടെ നടത്തുന്ന ദേശാന്തരഗമനമാണ് ഊത്തയിളക്കം. ജൂൺ ആദ്യത്തോടെ കേരളത്തിലെത്തുന്ന കാലവർഷം മീനുകളുടെ പ്രജനനകാലം കൂടിയാണ്. ഒഴുക്കിനെതിരെ സഞ്ചരിക്കുന്ന സ്വഭാവമുണ്ട് ഇക്കാലത്ത് മീനുകൾക്ക്. മഴക്കാലത്ത് വെള്ളംകെട്ടുന്ന വയലുകൾ, ചെറുതടാകങ്ങൾ, കൈത്തോടുകൾ, കൃത്രിമക്കനാലുകൾ, ചതുപ്പുകൾ തുടങ്ങിയ ഇടങ്ങളിലേക്ക് കൂട്ടത്തോടെ നദികളിൽനിന്നും മറ്റും സഞ്ചരിച്ചു ചെന്ന് പ്രജനനം നടത്തി അവർ തിരിച്ചു പോകുന്നു.
\end{multicols}
\end{document} 

@simoncozens
Copy link
Member

OK, so the quick fix is "install icu4c". With libicu support compiled in, the result looks like this:

screen shot 2016-04-14 at 21 15 58

The long story is: there's a bug in SILE.nodeMakers.unicode.dealWith (unicode.lua) such that Indic words are coming out of the tokenizer in pieces, rather than in words, and SILE is trying to hyphenate each piece. I will try to work on fixing that bug too.

@simoncozens
Copy link
Member

Sorry, I forgot to answer your second question. The answer is basically, please stay tuned. You're doing the right thing, and the interface is currently unpleasant. One of the milestone goals for 0.9.5 is making multi-column layouts easier and more reliable.

@rajeeshknambiar
Copy link
Contributor Author

Perfect! The output is now much better (there is still some whitespace compared to the output of XeTeX and with linebreak.tolerance < 10000 content still horizontally overflows frames).
Thanks for the quick fix and response. Looking forward to 0.9.5 release.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants