Calculating the the exact width of the text and a lettrine
Here is a simple macro similar to what lettrine
package does. The LaTeX source and its PDF output. This is done mainly for RTL (in this case Persian). Note that the macro programming is done in Persian as xepersian provides the tools for Persian macro programming so if you need equivalent English commands, then have a look at xepersian
documentation.
Also note that lettrine
package is fully supported by bidi
package but picins
is not supported by bidi
package and you may get some problems with it for typesetting RTL text (Why is not it supported? Well, because picins is written in LaTeX2.09, not a free package and more importantly not included in TeXLive).
I know it's quite late, but I saw this question linked to another one of yours.
I think that lettrine
is not the correct way to solve your problem. Here's a different way to cope with it.
\documentclass[paper=a5,pagesize=pdftex]{scrbook}
\usepackage[top=2cm,bottom=1.5cm, left=1.5cm, right=1.5cm]{geometry}
\usepackage[pagestyles]{titlesec}
\usepackage{fontspec}
\usepackage{etoolbox}
\setmainfont{Cardo}
\newcommand{\Sectionnumber}{%
\sbox\Sectionbox{\smash{\raisebox{-\baselineskip}{%
\fontsize{2.2\baselineskip}{0}\selectfont\theSection}}\enspace}}
\newcounter{Section}
\newcounter{Subsection}[Section]
\newlength{\Sectionwidth}
\newif\ifFirstSubsection
\newsavebox{\Sectionbox}
\makeatletter
\newcommand{\Section}{\par\vskip\z@ \@plus 2\p@
\FirstSubsectiontrue\clubpenalty\@M
\refstepcounter{Section}\stepcounter{Subsection}%
\Sectionnumber\setlength{\Sectionwidth}{\wd\Sectionbox}%
\hangindent\Sectionwidth\hangafter-2
\leavevmode\llap{\box\Sectionbox}\ignorespaces}
\newcommand{\Subsection}{%
\par\clubpenalty\@clubpenalty
\ifFirstSubsection
\ifnum\prevgraf=\@ne\nobreak\hspace*{\Sectionwidth}\fi
\FirstSubsectionfalse
\fi
\refstepcounter{Subsection}\textbf{\theSubsection}\enspace\ignorespaces}
\makeatother
\parindent=0pt
\parskip=0pt
\begin{document}
\setcounter{Section}{8}
\Section Kom nou, julle rykes, ween en huil oor die ellendes wat oor julle kom.
\Subsection Julle rykdom is bedorwe, en julle klere is deur die motte verniel.
\Subsection Julle goud en silwer is verroes, en hulle roes sal tot 'n getuienis
teen julle wees en sal soos 'n vuur julle vlees verteer. Julle het skatte vergader
in die laaste dae.
\Section Kom nou, julle rykes, ween en huil oor die ellendes wat oor julle kom.
\Subsection Julle rykdom is bedorwe, en julle klere is deur die motte verniel.
\Subsection Julle goud en silwer is verroes, en hulle roes sal tot 'n getuienis
teen julle wees en sal soos 'n vuur julle vlees verteer. Julle het skatte vergader
in die laaste dae.
\end{document}
The trick is counting the line of the \Section
paragraph with the internal counter \prevgraf
. If we are in the first subsection after a section and the section paragraph is only one line long, then an indent is inserted to get the correct spacing.
Consider this not so much an answer to your question, but rather a suggestion. Some reference to the problems you are experiencing are added at the end of the post. It seems like you're trying to typeset some chapters and verses from the book of James - Afrikaanse Bybel: Jakobus. Understandably lettrine
seems like a good option here. However, as you have already noted, it doesn't enjoy short paragraphs (typical in your case if you're typesetting verses as a sectional item or a paragraph). Here is a rather simple alternative using the picins
package.
picins
provides
\parpic(<width>,<height>)(<x-offset>,<y-offset>)[<options>][<position>]{<stuff>}
that typesets <stuff>
in a similar manner that wrapfig
does. I just sometimes find it easier to work with. <option>
allows some elementary border/shadow commands, and <position>
specifies the location (left l
or right r
) where picins
will put the paragraph picture. Additional movement is provided by the offset parameters. So, instead of fiddling with lettrine
and titlesec
definitions, the above provides a clean interface and very readable code. Well, that is mainly due to some macro writing...
Since I do not have the Cardo font and have stripped your MWE down, the following does not require xelatex
:
\documentclass{article}
\usepackage[paper=a5paper,margin=15mm]{geometry}% http://ctan.org/pkg/geometry
\usepackage{picins}% http://ctan.org/pkg/picins
\usepackage{needspace}% http://ctan.org/pkg/needspace
\newcounter{bchapter} \renewcommand{\thebchapter}{\Huge\arabic{bchapter}}% Chapter
\newcounter{bverse}[bchapter] \renewcommand{\thebverse}{\textbf{\arabic{bverse}}}% Verse
\newcommand{\bchapter}{%
\refstepcounter{bchapter}% Increment counter and allow referencing (\stepcounter would also work)
\setcounter{bverse}{1}% First verse doesn't need to typeset '1'
\setbox0=\hbox{\Huge\thebchapter}% Store \Huge chapter number in box0
\needspace{\ht0}% Need at least the height of box0
\pichskip{5pt}\noindent\parpic(\wd0,\ht0)(0pt,20pt)[][r]{\usebox0}% Insert \Huge chapter number
}%
\newcommand{\bverse}{%
\par\refstepcounter{bverse}% Increment counter and allow referencing (\stepcounter would also work)
\thebverse~\ignorespaces%
}
% Remove paragraph indentation & skip
\setlength{\parindent}{0pt} \setlength{\parskip}{0pt}
\begin{document}
\bchapter Kom nou, julle rykes, ween en huil oor die ellendes wat oor julle kom.
\bverse Julle rykdom is bedorwe, en julle klere is deur die motte verniel.
\bverse Julle goud en silwer is verroes, en hulle roes sal tot 'n getuienis teen julle wees en sal soos ‘n vuur julle vlees verteer. Julle het skatte vergader in die laaste dae.
\bverse Kyk, die loon van die arbeiders wat julle lande afgeoes het, wat deur julle agtergehou is, roep uit; en die geroep van die maaiers het gekom tot in die ore van die Here van die leërskare.
\bverse Julle het op die aarde 'n weelderige en losbandige lewe gelei; julle het jul harte vet gevoer soos op ‘n slagdag.
\bverse Veroordeel, vermoor het julle die regverdige; hy versit hom nie teen julle nie.
\bverse Wees dan geduldig, broeders, tot op die wederkoms van die Here. Kyk, die landbouer wag op die kostelike vrug van die aarde en het geduld daarmee totdat dit die vroe\"e en die laat re\"en ontvang het.
\bverse Julle moet ook geduldig wees; versterk julle harte, want die wederkoms van die Here is naby.
\bverse Moenie teen mekaar sug nie, broeders, sodat julle nie veroordeel word nie. Kyk, die Regter staan voor die deur.
\bverse Neem as voorbeeld van lyding, my broeders, en van geduld die profete wat in die Naam van die Here gespreek het.
\bverse Kyk, ons reken hulle geluksalig wat verdra. Julle het gehoor van die lydsaamheid van Job, en julle het die einddoel van die Here met hom gesien, dat die Here vol medelye en ontferming is.
\bverse Maar bo alles, my broeders, moenie sweer nie: nie by die hemel nie, ook nie by die aarde nie en ook geen ander eed nie; maar laat julle ja ja wees en julle nee nee, sodat julle nie onder ‘n oordeel val nie.
\bverse Is daar iemand onder julle wat ly? Laat hom bid. Is iemand opgeruimd? Laat hom psalmsing.
\bverse Is daar iemand siek onder julle? Laat hom die ouderlinge van die gemeente inroep, en laat hulle oor hom bid nadat hulle hom in die Naam van die Here met olie gesalf het.
\bverse En die gebed van die geloof sal die kranke red, en die Here sal hom oprig. Selfs as hy sonde gedoen het, sal dit hom vergewe word.
\bverse Bely mekaar julle misdade en bid vir mekaar, sodat julle gesond kan word. Die vurige gebed van ‘n regverdige het groot krag.
\bverse Elía was ‘n mens net soos ons, en hy het ernstig gebid dat dit nie moes re\"en nie, en dit het op die aarde drie jaar en ses maande lank nie gere\"en nie;
\bverse en hy het weer gebid, en die hemel het re\"en gegee en die aarde het sy vrug laat uitspruit.
\bverse Broeders, as een onder julle van die waarheid afgedwaal het en iemand hom bekeer,
\bverse laat hy weet dat die een wat ‘n sondaar van sy dwaalweg bekeer, 'n siel uit die dood sal red en 'n menigte sondes sal bedek.
\setcounter{bchapter}{9}%
\bchapter Kom nou, julle rykes, ween en huil oor die ellendes wat oor julle kom.
\bverse Julle rykdom is bedorwe, en julle klere is deur die motte verniel.
\bverse Julle goud en silwer is verroes, en hulle roes sal tot 'n getuienis teen julle wees en sal soos 'n vuur julle vlees verteer. Julle het skatte vergader in die laaste dae.
\bverse Kyk, die loon van die arbeiders wat julle lande afgeoes het, wat deur julle agtergehou is, roep uit; en die geroep van die maaiers het gekom tot in die ore van die Here van die le\"erskare.
\bverse Julle het op die aarde 'n weelderige en losbandige lewe gelei; julle het jul harte vet gevoer soos op 'n slagdag.
\bverse Veroordeel, vermoor het julle die regverdige; hy versit hom nie teen julle nie.
\bverse Wees dan geduldig, broeders, tot op die wederkoms van die Here. Kyk, die landbouer wag op die kostelike vrug van die aarde en het geduld daarmee totdat dit die vroe\"e en die laat re\"en ontvang het.
\bverse Julle moet ook geduldig wees; versterk julle harte, want die wederkoms van die Here is naby.
\bverse Moenie teen mekaar sug nie, broeders, sodat julle nie veroordeel word nie. Kyk, die Regter staan voor die deur.
\bverse Neem as voorbeeld van lyding, my broeders, en van geduld die profete wat in die Naam van die Here gespreek het.
\bverse Kyk, ons reken hulle geluksalig wat verdra. Julle het gehoor van die lydsaamheid van Job, en julle het die einddoel van die Here met hom gesien, dat die Here vol medelye en ontferming is.
\bverse Maar bo alles, my broeders, moenie sweer nie: nie by die hemel nie, ook nie by die aarde nie en ook geen ander eed nie; maar laat julle ja ja wees en julle nee nee, sodat julle nie onder 'n oordeel val nie.
\bverse Is daar iemand onder julle wat ly? Laat hom bid. Is iemand opgeruimd? Laat hom psalmsing.
\bverse Is daar iemand siek onder julle? Laat hom die ouderlinge van die gemeente inroep, en laat hulle oor hom bid nadat hulle hom in die Naam van die Here met olie gesalf het.
\bverse En die gebed van die geloof sal die kranke red, en die Here sal hom oprig. Selfs as hy sonde gedoen het, sal dit hom vergewe word.
\bverse Bely mekaar julle misdade en bid vir mekaar, sodat julle gesond kan word. Die vurige gebed van 'n regverdige het groot krag.
\bverse El\'\i a was 'n mens net soos ons, en hy het ernstig gebid dat dit nie moes re\"en nie, en dit het op die aarde drie jaar en ses maande lank nie gere\"en nie;
\bverse en hy het weer gebid, en die hemel het re\"en gegee en die aarde het sy vrug laat uitspruit.
\bverse Broeders, as een onder julle van die waarheid afgedwaal het en iemand hom bekeer,
\bverse laat hy weet dat die een wat 'n sondaar van sy dwaalweg bekeer, 'n siel uit die dood sal red en 'n menigte sondes sal bedek.
\end{document}
You'll notice that I also used the needspace
package. This is because you don't want a situation where the chapter number (the counter bchapter
) only has 1 line left on the page while it actually needs 2. \needspace{<len>}
issues a \break
if there's less than <len>
space left on the page.
Specific to your MWE, your main concern is with the setting of lengths. To quote the calc
package documentation:
The
\setcounter
and\addtocounter
commands have global effect, while the\setlength
and\addtolength
commands obey the normal scoping rules.
As such, when you use \setlength\NumLen{\howwide}
within a macro (like \IndOne
), the change is only valid within that macro, and reverts back to it's original setting once the macro terminates. If you wish for the effects to be global, you need to store it in a box or another macro so it can be used outside the scope that it is set in.
Dit was lekker om weer Afrikaans te lees, dankie!