summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/lettrine/lettrine.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/lettrine/lettrine.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/lettrine/lettrine.dtx')
-rw-r--r--macros/latex/contrib/lettrine/lettrine.dtx1169
1 files changed, 1169 insertions, 0 deletions
diff --git a/macros/latex/contrib/lettrine/lettrine.dtx b/macros/latex/contrib/lettrine/lettrine.dtx
new file mode 100644
index 0000000000..a522c917b2
--- /dev/null
+++ b/macros/latex/contrib/lettrine/lettrine.dtx
@@ -0,0 +1,1169 @@
+% \CheckSum{650}
+%
+% \iffalse meta-comment
+%
+% Copyright © 1999-2018 Daniel Flipo.
+%
+% This program can be distributed and/or modified under the terms
+% of the LaTeX Project Public License either version 1.3c of this
+% license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This file has the LPPL maintenance status "maintained".
+%
+% \fi
+%
+% \iffalse
+%
+%<*sty>
+\NeedsTeXFormat{LaTeX2e}[2018-04-01]
+\ProvidesFile{lettrine.sty}
+%</sty>
+%<*dtx>
+\ProvidesFile{lettrine.dtx}
+%</dtx>
+%<*!cfg>
+ [2019-04-06 v2.22 (Daniel Flipo)]
+%</!cfg>
+%
+% Lettrine package for LaTeX version 2e
+%
+% Copyright © 1999-2019 by Daniel Flipo
+%
+% Please report errors to: daniel (dot) flipo (at) free (dot) fr
+%
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+\usepackage{unicode-math}
+\setmainfont{Latin Modern Roman}
+\setmathfont{XITS Math}
+\usepackage[expansion=true,protrusion=true]{microtype}
+\usepackage{url}
+\usepackage[numbered]{hypdoc}
+\hypersetup{colorlinks,urlcolor=blue,unicode}
+\usepackage{lettrine}
+\usepackage{tikz}
+\usetikzlibrary{shapes.arrows}
+%
+\RecordChanges
+\AtEndDocument{%
+ \clearpage
+ \section{Change History}%
+ \GlossaryPrologue{}%
+ Changes are listed in reverse order (latest first) from version~1.0
+ \PrintChanges
+}
+%
+\newcommand*\file[1]{\texttt{#1}}
+\newcommand*\lopt[1]{\texttt{#1}}
+\renewcommand\meta[1]{\textit{<#1>}} % no math mode (see doc.sty)
+%
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{.3\baselineskip}
+\begin{document}
+\GetFileInfo{lettrine.dtx}
+\begin{center}
+ \textbf{\Large Typesetting dropped capitals in \LaTeXe{} documents}
+ \\[.2\baselineskip]^^A\]
+ {\large Daniel Flipo}\\
+ \texttt{daniel.flipo@free.fr}
+\end{center}
+\DocInput{lettrine.dtx}
+\end{document}
+%</driver>
+%
+%\fi
+%
+% \section{Introduction}
+%
+% The file \file{\filename}\footnote{The file described in this
+% section has version number \fileversion\ and was last revised on
+% \filedate.}, provides a command |\lettrine| which requires two
+% mandatory arguments, and an optional one.
+%
+% Adding |\usepackage{lettrine}| in the preamble of a document
+% defines the command |\lettrine|, the simplest use of which is
+% |\lettrine{|\meta{letter}|}{|\meta{text}|}|.
+% It produces a dropped capital \meta{letter} (2 lines high),
+% followed by \meta{text} typeset in small caps, and the rest
+% of the paragraph is wrapped around the dropped capital.
+%
+% Various parameters are provided to control the size and layout
+% of the dropped capital and match the requirements described
+% in the books
+% \begin{itemize}
+% \item ``Lexique des règles typographiques en usage à
+% l’Imprimerie nationale’’ troisième édition (1994),
+% ISBN-2-11-081075-0,
+% \item ``Mise en page et impression’’ Yves~Perrousseaux,
+% ISBN-2-911220-01-3.
+% \end{itemize}
+% The parameters can be set using David Carlisle’s
+% \texttt{keyval.sty} syntax:
+% \begin{itemize}
+% \item \lopt{lines=}\meta{integer} sets how many lines the
+% dropped capital will occupy (default=2);
+%
+% \changes{v1.7}{2014/09/16}{New counter to add lines for
+% dropped capitals with positive depth, like Q.}
+%
+% \item \lopt{depth=}\meta{integer} sets the number of lines to
+% be reserved under the baseline, this is meant for dropped
+% capital with positive depth, like Q (default=0);
+% \item \lopt{lhang=}\meta{decimal} ($0\le|lhang|\le1$) sets
+% how much of the dropped capital’s width should hang into
+% the margin (default=0);
+% \item \lopt{loversize=}\meta{decimal} ($-1<\lopt{loversize}\le1$)
+% enlarges the dropped capital’s height: with
+% \lopt{loversize=0.1} its height is enlarged by 10\% so
+% that it raises above the top paragraph’s line (default=0);
+% \item \lopt{lraise=}\meta{decimal} does not affect the dropped
+% capital’s height, but moves it up (if positive),
+% down (if negative); useful with capitals like |J| or |Q|
+% which have a positive depth, (default=0);
+% \item \lopt{findent=}\meta{dimen} (positive or negative)
+% controls the horizontal gap between the dropped capital
+% and the indented block of text (default=0pt);
+% \item \lopt{nindent=}\meta{dimen} shifts all indented lines,
+% starting from the second one, horizontally by
+% \meta{dimen} (this shift is relative to the first
+% line, default=0.5em);
+% \item \lopt{slope=}\meta{dimen} can be used with dropped
+% capitals like |A| or |V| to add \meta{dimen}
+% (positive or negative) to the indentation of each line
+% starting from the third one (no effect if \lopt{lines=2},
+% default=0pt);
+% \item \lopt{ante=}\meta{text} can be used to typeset \meta{text}
+% \emph{before} the dropped capital (typical use is for
+% French guillemets starting the paragraph).
+%
+% \changes{v1.6}{2004/05/22}{Add a flag to switch to
+% images in eps or pdf format. Suggested by Bill Jetzer.}
+%
+% \item \lopt{image=true} (new to version 1.6) will force
+% |\lettrine| to replace the letter normally used as
+% dropped capital by an image in eps format (latex) or
+% in pdf, jpg, etc.\ format (pdflatex); this needs the
+% |graphicx| package to be loaded in the preamble of course.
+% |\lettrine[image=true]{A}{n exemple}| or just
+% |\lettrine[image]{A}{n exemple}| will load |A.eps|,
+% |A.jpg|, |A.png| or |A.pdf| instead of letter~A.
+% This was suggested by Bill Jetzer.\\
+% N.B.: Redefining |\LettrineFont| as |\LettrineFontEPS|
+% is no longer supported and |\LettrineFontEPS| has been
+% renamed as |\LettrineImage|.
+%
+% \changes{v1.8}{2015/02/06}{Added two keyval options:
+% `grid’ (true/false) and `novskip’ to override \cs{DiscardVskip}.}
+%
+% \item \lopt{grid=true} (new to version 1.8) will force
+% the vertical skip added above the paragraph starting with
+% |\lettrine| to be rounded up to an integer number of
+% |\baselineskip|.
+% This option is meant for grid typesetting.
+% \item \lopt{novskip=}\meta{dimen} (new to version 1.8)
+% overrides |\DiscardVskip| (default=0.2pt). In some cases
+% (see options \lopt{lraise}, \lopt{loversize} or
+% accentuated dropped capitals,\dots) the top of the
+% dropped capital will raise above the top of following
+% text (usually in small caps), this will trigger
+% a corresponding vertical skip above the paragraph
+% starting with |\lettrine|, \emph{only if} this skip
+% exceeds |\DiscardVskip|.
+% Consider enlarging |novskip| (or |\DiscardVskip|) to
+% prevent small vertical skips from being rounded up to
+% |\baselineskip| when using the `grid’ option.
+%
+% \changes{v1.9}{2015/08/31}{New keyval option: `realheight’
+% (true/false) and new global flag \cs{ifLettrineRealHeight}.}
+%
+% \item \lopt{realheight=true} (new to version 1.9) will
+% compute the default height of the initial so that the
+% top of it is exactly aligned with the top of the text
+% entered as second mandatory argument of |\lettrine|
+% taking possible accents into account.
+% Otherwise, the default height is computed using a
+% customisable string |\LettrineSecondString| instead of
+% the real argument. For backward compatibility, option
+% \lopt{realheight} defaults to \lopt{false} and
+% |\LettrineSecondString| to `x’.
+%
+% You probably don’t need this option if you choose to
+% typeset the second mandatory argument of |\lettrine| in
+% small caps (the default). If you change
+% |\LettrineTextFont| to |\relax| or |\upshape|, consider
+% these two examples:
+% \begin{description}
+% \item |\lettrine{H}{ello}| you probably would like the
+% top of the `H’ to be aligned with the top of the `ll’
+% rather than with the top of the `e’, adding option
+% |realheight| does the trick:
+% |\lettrine[realheight]{H}{ello}|.\par
+% Global variants : |\LettrineRealHeighttrue| or (without
+% |realheight| option)
+% |\renewcommand*{\LettrineSecondString}{l}|.
+% \item |\lettrine{L}{a misère}| option
+% \lopt{realheight=true} would align with the top
+% of the `L’ with the top of the grave accent, the
+% default is probably better (top of the `L’ aligned with
+% the top of the non accented letters).
+% \end{description}
+%
+% \item \lopt{refstring}\footnote{Unlike \lopt{grid} or
+% \lopt{realheight}, \lopt{refstring} is not a flag
+% (\emph{do not} add \lopt{=true}!); it is possible to set
+% \lopt{refstring=}\meta{string} to override
+% \cs{LettrineTestString} locally.}
+% (new to version 2.1) is meant for fancy initials with
+% irregular heights (i.e.\ taken in fonts like Yinit
+% (OpenType), \file{cfr-initials},\dots).
+% \lopt{refstring} forces the |\fontsize| computations to
+% be run on the initial given as |\lettrine|’s first
+% mandatory argument instead of the reference string
+% |\LettrineTestString|. In most cases, this option should
+% \emph{not} be used: think of accentuated initials or
+% capitals with optical correction.
+%
+% \end{itemize}
+%
+% Example: |\lettrine[lines=4, lraise=0.1, nindent=0em, |%
+% |slope=-.5em]%|\\
+% \mbox{}\phantom{\tt Example: lettrine}%
+% |{V}{oici} un exemple |\dots
+%
+% Coloured initials are possible in conjonction with package
+% \file{color}, examples: |\lettrine{\textcolor{red}{A}}{n} example|
+% \quad or\\ |\lettrine{\textcolor[gray]{0.5}{A}}{nother} one| \\
+% see package \file{color} for the syntax of colour commands.
+% Another possibility to colour initials globally is described
+% below, see |\LettrineFontHook|.
+%
+% Three dimensions, |\LettrineWidth|, |\LettrineHeight| and
+% |\LettrineDepth|, store the final size of the initial.
+%
+% Once \file{lettrine.sty} will be installed (run \texttt{latex}
+% on \file{lettrine.ins} to extract it), compile and print
+% \file{demo.tex} to see the possible usage of these parameters.
+%
+% \changes{v1.9}{2015/08/31}{New customisable string
+% \cs{LettrineSecondString} to tune the initial’s height.}
+%
+% The default settings can be customized either in a config file
+% \file{lettrine.cfg} (for a global usage), or on a per document
+% basis, in the preamble of each document. The following list
+% shows the syntax to set them and their default values:
+% \begin{itemize}
+% \item |\setcounter{DefaultLines}{2}|,
+% \item |\setcounter{DefaultDepth}{0}|,
+% \item |\renewcommand*{\DefaultLoversize}{0}|,
+% \item |\renewcommand*{\DefaultLraise}{0}|,
+% \item |\renewcommand*{\DefaultLhang}{0}|,
+% \item |\LettrineImagefalse|,
+% \item |\LettrineOnGridfalse|,
+% \item |\LettrineRealHeightfalse|,
+% \item |\LettrineSelfReffalse|,
+% \item |\setlength{\DefaultFindent}{0pt}|,
+% \item |\setlength{\DefaultNindent}{0.5em}|,
+% \item |\setlength{\DefaultSlope}{0pt}|.
+% \item |\setlength{\DiscardVskip}{0.2pt}|.
+% \end{itemize}
+%
+% Instead of giving optional parameters to the |\lettrine| command,
+% it is possible, from version 1.5, to set them on a per character
+% basis in a second config file (suggested by Pascal Kockaert):
+% |\renewcommand{\DefaultOptionsFile}{|\textit{filename}|}|
+% in the preamble (or anywhere in the document) will
+% force each call to |\lettrine| to read the file \textit{filename}.
+% See examples of such config files in the subdirectory
+% \file{contrib}.
+%
+% The dimensional parameters \lopt{findent}, \lopt{nindent} and
+% \lopt{slope}, can be set in \textit{filename} relative to
+% |\LettrineWidth| if needed. The settings read from this file
+% will be overridden by the optional arguments eventually given to
+% |\lettrine|.
+%
+% |\LettrineTextFont| sets the font used for the second argument
+% of |\lettrine|, its default definition is
+% |\newcommand{\LettrineTextFont}{\scshape}| (second argument in
+% small caps, this can be changed using |\renewcommand|).
+%
+% |\LettrineFont| sets the font used for the dropped capital,
+% usually the current font in a (large) size, computed
+% automatically from the number of lines it will fill:
+% the font size is computed so that, a \emph{standard} dropped
+% capital (say Z, not À) when sitting on its baseline, gets
+% its top aligned with the top of the following text (provided
+% $|loversize|=0$ and $|lines|\ge 2$). When \lopt{lines=1},
+% size is computed as if \lopt{lines} was~2.\\
+% A hook |\LettrineFontHook| is provided to change the font
+% used for the dropped capital, syntax follows \LaTeX{}’s
+% low-level font interface (see \LaTeX{} Companion, p.187--192),
+% the |\selectfont| command is issued by |\LettrineFont|:\\
+% |\renewcommand{\LettrineFontHook}{\fontfamily{ppl}|\ignorespaces
+% |\fontseries{bx}}%|\\
+% | \fontshape{sl}}|,\\
+% selects Palatino bold expanded slanted for the dropped capital.\\
+% |\LettrineFontHook| can also be used to change the colour of
+% all initials in a (part of) document:
+% |\renewcommand{\LettrineFontHook}{\color[gray]{0.5}}| \\
+% will colour the initials following this command in grey.
+%
+% \changes{v1.3}{2002/08/23}{Correct the documentation to
+% mention the cm-super fonts and the type1ec package by
+% Vladimir Volovich.}
+%
+% \vspace{\baselineskip}
+% \textbf{Important notice:}
+% the sizing works fine with \emph{fully scalable} fonts (like the
+% standard PostScript fonts), but might not work well with CM/EC
+% fonts which have two limitations: only a limited number of sizes
+% is available by default (precise adjustments are impossible),
+% and the largest size (25pt or 35pt) is often too small.
+% The CM fonts are now available in PostScript type1 format for
+% free (courtesy of BlueSky/Y\&Y), to make them fully scalable,
+% it is mandatory to add |\usepackage{type1cm}| in the preamble
+% of your document.
+% The EC fonts are also available in type1 format for free
+% (thanks to Vladimir Volovich, they are called cm-super), and
+% adding |\usepackage{type1ec}|\footnote{This package, available on
+% CTAN, was first released on 2002/07/30.}
+% in the preamble will make them fully scalable too.
+% So, if you want \file{lettrine.sty} to work properly with CM
+% or EC fonts, you will need \emph{PostScript versions} of these
+% fonts \emph{and} one of the packages |type1cm.sty| or
+% |type1ec.sty|.
+%
+% The LM fonts are a good replacement for both CM and EC fonts they
+% are fully scalable, so you should use them instead of CM or EC
+% fonts. |\usepackage{lmodern}| is the command to switch them on
+% (add |\usepackage[T1]{fontenc}| when composing in one of the
+% western languages other than English in order to get proper
+% hyphenation).
+%
+% You can also consider using one of the standard PostScript fonts
+% (Palatino, Times, Utopia\dots), or any OpenType font, they are
+% fully scalable too!
+%
+% \vspace{\baselineskip}
+% \textbf{Known issues:}
+% \begin{itemize}
+% \item Nothing is done to prevent page-breaking in a paragraph
+% starting with a dropped capital; when it happens to hang
+% into the footer, page-breaking has to be done manually.
+% \item |\lettrine| works within `quote’ `quotation’, `abstract’
+% environments but does not work within `center’ environments
+% except with option \texttt{[lines=1]}.
+% \item |\lettrine| does not work within lists.
+% \item If a \emph{list} has to be included in a paragraph starting
+% with |\lettrine|, it is necessary to add the command
+% |\parshape=0| just after the end of the list (starting a new
+% paragraph just before or just after the list works too).
+% Remember that `quote’, `quotation’, `abstract’ environments
+% are implemented as \emph{lists} in \LaTeX{}.
+% \item If you are facing some slight height inaccuracy for a
+% dropped capital, you can try option \lopt{refstring};
+% this option is meant for fancy (unaccented) initials.
+% Informations about targeted and effective initial’s
+% height are available in the \file{.log} file. Using LuaTeX
+% or XeTeX engines with OpenType fonts may be an option
+% (some TFM files for Type1 fonts are slightly inaccurate).
+% \item |\LettrineTestString|’s value has changed over the time;
+% these changes may result in slight size differences for the
+% initial. Starting with version~2.2, the lettrine package takes
+% advantage of the rollback facilities recently introduced by
+% the LaTeX Team\footnote{A LaTeX kernel dated 2018-04-01 or
+% newer is required.}. Three rollback versions are provided in
+% order to produce exactly the same output as with former
+% versions: you can request
+% |\usepackage{lettrine}[=v1.6]|\footnote{Don’t forget the
+% \texttt{=} sign!} for 1999-2012 documents or
+% |\usepackage{lettrine}[=v1.9]| (documents from 2012 to
+% July 2018) or |\usepackage{lettrine}[=v2.0]| (August 2018).
+% Using any date in ISO format works too:
+% |\usepackage{lettrine}[=2014-03-15]| will load v1.9.
+% \end{itemize}
+%
+% \StopEventually{}
+%
+% \section{\TeX{}nical details}
+%
+% \iffalse
+%<*sty>
+% \fi
+%
+% \changes{v2.2}{2018/08/25}{Rollback mechanism used for recovering
+% older versions.}
+%
+% The lettrine package now uses the rollback mechanism recently
+% introduced by the LaTeX Team to provide easier backward
+% compatibility. This requires a recent LaTeX kernel (at least
+% 2018-04-01), roolback is ignored with older kernels.
+% \begin{macrocode}
+\ifdefined\DeclareRelease
+ \DeclareRelease{v1.6}{1999-03-03}{lettrine-2006-03-17.sty}
+ \DeclareRelease{v1.9}{2012-07-20}{lettrine-2015-08-31.sty}
+ \DeclareRelease{v2.0}{2018-07-21}{lettrine-2018-08-18.sty}
+ \DeclareCurrentRelease{}{2019-03-30}
+\else
+ \PackageWarning{lettrine}{Your LaTeX kernel is too old to provide
+ access\MessageBreak to former versions of the lettrine package.%
+ \MessageBreak If you need rollback, please upgrade%
+ \MessageBreak your LaTeX kernel (2018-04-01 or newer),%
+ \MessageBreak otherwise you are fine; reported}
+\fi
+% \end{macrocode}
+%
+% This package only runs with \LaTeXe{} and requires files
+% \file{keyval.sty} and \file{minifp.sty}.
+%
+% \begin{macrocode}
+\RequirePackage{keyval,minifp}
+% \end{macrocode}
+%
+% Default initializations: define the necessary counters, lengths,
+% and commands to hold the default settings and set these default
+% settings. They can be overwritten in file |lettrine.cfg|.
+%
+% \changes{v1.2}{2002/03/13}{\cs{newlength} changed to
+% \cs{newdimen}, to correct a bug with seminar.cls (pointed out
+% by Peter Münster).}
+%
+% \changes{v1.6}{2004/05/22}{Added newif \cs{ifLettrineImage}.}
+%
+% \changes{v1.8}{2015/02/06}{Added newif \cs{ifLettrineOnGrid}
+% and new dimen \cs{DiscardVskip}, default (0.2pt) set for
+% compatibility with previous releases.}
+%
+% \changes{v2.1}{2018/08/14}{Newif \cs{ifLettrineVone} and
+% new option `Vone’ (removed in v2.2, rollback prefered).}
+%
+% \changes{v2.1}{2018/08/14}{New option `refstring’ and newif
+% \cs{ifLettrineSelfRef}.}
+%
+% \begin{macrocode}
+\newcounter{DefaultLines}
+\setcounter{DefaultLines}{2}
+\newcounter{DefaultDepth}
+\newcommand*{\DefaultOptionsFile}{\relax}
+\newcommand*{\DefaultLoversize}{0}
+\newcommand*{\DefaultLraise}{0}
+\newcommand*{\DefaultLhang}{0}
+\newdimen\DefaultFindent
+\setlength{\DefaultFindent}{\z@}
+\newdimen\DefaultNindent
+\setlength{\DefaultNindent}{0.5em}
+\newdimen\DefaultSlope
+\setlength{\DefaultSlope}{\z@}
+\newdimen\DiscardVskip
+\setlength{\DiscardVskip}{0.2\p@}
+\newif\ifLettrineImage
+\newif\ifLettrineOnGrid
+\newif\ifLettrineRealHeight
+\newif\ifLettrineSelfRef
+% \end{macrocode}
+%
+% Then let’s define the necessary internal counters, lengths,
+% and commands.
+%
+% \changes{v1.6}{2004/05/22}{Added newif \cs{ifL@image}.}
+%
+% \changes{v1.6}{2015/02/06}{Added newif \cs{ifL@grid}.}
+%
+% \begin{macrocode}
+\newsavebox{\L@lbox}
+\newsavebox{\L@tbox}
+\newcounter{L@lines}
+\newcounter{L@depth}
+\newdimen\L@Pindent
+\newdimen\L@Findent
+\newdimen\L@Nindent
+\newdimen\L@lraise
+\newdimen\L@first
+\newdimen\L@next
+\newdimen\L@slope
+\newdimen\L@height
+\newdimen\L@novskip
+\newdimen\L@target@ht
+\newdimen\L@target@dp
+\newdimen\L@target@tht
+\newdimen\LettrineWidth
+\newdimen\LettrineHeight
+\newdimen\LettrineDepth
+\newcommand*{\L@file}{}
+\newcommand*{\L@hang}{}
+\newcommand*{\L@oversize}{}
+\newcommand*{\L@raise}{}
+\newcommand*{\L@ante}{}
+\newif\ifL@image
+\newif\ifL@grid
+\newif\ifL@realh
+\newif\ifL@selfref
+% \end{macrocode}
+%
+% Provide commands for the fonts used to typeset the two
+% mandatory arguments of |\lettrine|.
+%
+% \changes{v2.21}{2018/08/28}{Code clean up, new commands
+% \cs{computeL@height}, \cs{compute@fontsize}, \cs{setupL@lbox}.}
+%
+% \begin{macro}{\LettrineTextFont}
+% In French, small caps usually follow the dropped capital.
+% \begin{macrocode}
+\newcommand*{\LettrineTextFont}{\scshape}
+\newcommand*{\LettrineSecondString}{x}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LettrineFontHook}
+% |\LettrineFontHook| enables to select another font for the
+% dropped capital. Its default definition is empty (the current
+% text font is used).
+% \begin{macrocode}
+\newcommand*{\LettrineFontHook}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\computeL@height}
+% The default size for the dropped capital is computed so that the
+% top of it is exactly aligned with the top of the following text;
+% an extra height (positive or negative) may be added globally by
+% redefining |\Defaultloversize| or locally using optional
+% argument \lopt{loversize=}.
+% If \lopt{lines=1}, the default size for the dropped capital is
+% computed as if \lopt{lines=2}.
+% \begin{figure}[ht]
+% \centering
+% \begin{tikzpicture}[>=stealth]
+% \node[font=\fontfamily{lmr}\fontsize{160}{160}\mdseries]
+% at (3,2) {F} ;
+% \node[right, font=\fontfamily{lmr}\fontsize{20}{20}\bfseries]
+% at (4.6,3.65) {IRST};
+% \node[right, font=\fontfamily{lmr}\fontsize{28}{28}\bfseries]
+% at (5,2.63) {bla bla};
+% \node[right, font=\fontfamily{lmr}\fontsize{28}{28}\bfseries]
+% at (5,1.53) {bla bla};
+% \node[right, font=\fontfamily{lmr}\fontsize{28}{28}\bfseries]
+% at (5,0.43) {bla bla};
+% \draw[dotted] (0,3.9) -- (9,3.9);
+% \draw (1,3.4) -- (9,3.4);
+% \draw[dashed] (1.5,2.3) -- (9,2.3);
+% \draw[dashed] (1.5,1.2) -- (9,1.2);
+% \draw[dashed] (0,0.1) -- (9,0.1);
+% \draw[<->] (0,0.1) -- (0,3.9);
+% \node[left] at (0,2.1) {tht};
+% \draw[<->] (1.3,0.1) -- (1.3,3.4);
+% \node[left] at (1.3,1.8) {dp};
+% \draw[<->] (1,3.4) -- (1,3.9);
+% \node[left] at (1,3.7) {ht};
+% \end{tikzpicture}
+% \caption{Initial’s targeted dimensions ($\mbox{\cs{lines}}=4$)}
+% \label{fig:target}
+% \end{figure}
+%
+% |\computeL@height| first computes the targeted height for the
+% dropped capital and stores it into |\L@target@tht|. This height
+% only depends on |L@lines| and on the height of |\L@tbox| (see
+% fig.~\ref{fig:target}). So options \emph{must} be read and
+% |\L@tbox| must be properly initialised \emph{before} executing
+% |\computeL@height| (see below in |\@lettrine| code).
+%
+% |\L@height| is set to |\L@target@tht| raised by the |\L@oversize|
+% factor.
+%
+% \changes{v1.2}{2002/03/13}{\cs{baselineskip} may be a
+% rubber length, we convert it to a dimen.}
+%
+% \changes{v1.9}{2015/08/31}{\cs{theL@lines} changed
+% to \cs{value\{L@lines\}}. Needed for babel-hebrew which
+% redefines \cs{@arabic}.}
+%
+% \changes{v2.0}{2018/07/21}{Store targeted dimensions of the
+% dropped capital (ht, dp, tht) for further use.}
+%
+% \changes{v2.1}{2018/08/01}{Height computations moved out of
+% \cs{LettrineFont}: \cs{global} settings no longer required.}
+%
+% \begin{macrocode}
+\def\computeL@height{%
+ \setlength{\L@target@ht}{\ht\L@tbox}%
+% \end{macrocode}
+% As |\baselineskip| might be a rubber length, let’s convert it
+% into a `dimen’ using |\@tempdima|.
+% \begin{macrocode}
+ \@tempdima=\baselineskip
+ \setlength{\L@target@dp}{\value{L@lines}\@tempdima}%
+ \ifnum\value{L@lines}>1
+ \addtolength{\L@target@dp}{-\@tempdima}%
+ \else
+ \addtolength{\L@target@ht}{\L@target@dp}%
+ \setlength{\L@target@dp}{0pt}%
+ \fi
+ \setlength{\L@target@tht}{\L@target@ht}%
+ \addtolength{\L@target@tht}{\L@target@dp}%
+ \setlength{\L@height}{\L@target@tht}%
+ \addtolength{\L@height}{\L@oversize\L@target@tht}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LettrineTestString}
+% After executing |\computeL@height|, |\L@height| holds the exact
+% height required for the dropped capital, nothing more is needed if
+% the initial is a picture, otherwise we need to compute the matching
+% |\fontsize|’s value. This is done by measuring the height of
+% a ``reference’’ capital (i.e.\ either listed in
+% |\LettrineTestString| or the initial itself).
+% As some font designers apply optical correction to capitals C, G,
+% O, or Q (they are slightly taller than `T’ or `Z’), they are better
+% left out of |\LettrineTestString|. |EFTZ| should be a good default
+% for most fonts.
+%
+% \changes{v1.63}{2012/07/20}{(new) it defaults to
+% `ABCDEFGHIJKLMNOQPRSTUVWXYZ’. In previous versions height
+% computations were based on letter `X’ which might not exist
+% in some (rare) fonts. Pointed out by Raphaël Pinson.}
+%
+% \changes{v2.0}{2018/07/21}{changed from `ABCDEFGHIJKLMNOQPRSTUVWXYZ’
+% to `EFTZ’ as some capitals like C, G, O, Q or X might be slightly
+% taller (possible optical correction).}
+%
+% \begin{macrocode}
+\newcommand*{\LettrineTestString}{EFTZ}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\compute@fontsize}
+% This command compares the height of a ``reference’’ capital scaled
+% by |\fontsize| with argument |\L@height| to |\L@height| (the
+% required height for the initial); both are converted into integers
+% (in sp) to compute a ratio |\L@factor|.
+% Up to v2.01, possible values for |\L@factor| were either 1 or any
+% value $\geq 1.1$ which was fine for almost every font but not
+% all (i.e.\ \file{cfr-initials}). Starting with v2.1, |\L@factor|
+% is computed more accurately by |\MFPdiv| from \file{minifp.sty}.
+%
+% \changes{v2.1}{2018/08/14}{Computation of \cs{L@factor} for
+% \cs{fontsize} done by the minifp package.}
+%
+% \changes{v2.22}{2018/09/14}{Warn if \cs{fontsize} computation fails
+% due to division by 0.}
+%
+% When optional argument \lopt{selfref} is \lopt{true} the initial
+% itself is taken as reference to compute |\fontsize|, this can be
+% handy when working with fancy fonts (i.e.\ cfr-initials, Yinit).
+% In most cases, the default is a better choice.
+% \begin{macrocode}
+\def\compute@fontsize{%
+ \ifL@selfref
+ \def\Lettrine@RefString{\l@refstring}%
+ \else
+ \def\Lettrine@RefString{\LettrineTestString}%
+ \fi
+ \sbox{\@tempboxa}{\LettrineFontHook
+ \fontsize{\L@height}{\L@height}\selectfont
+ \Lettrine@RefString}%
+ \@tempcnta=\ht\@tempboxa
+ \ifnum\@tempcnta=0
+ \PackageWarning{lettrine}{Unable to compute \protect\fontsize!%
+ \MessageBreak \protect\LettrineTestString\space empty? reported}
+ \def\L@factor{1}%
+ \else
+ \@tempcntb=\L@height
+ \MFPdiv{\the\@tempcntb}{\the\@tempcnta}\L@factor
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LettrineFont}
+% |\fontsize|’s argument providing the requested |\L@height| is
+% |\L@factor\L@height|.
+% \begin{macrocode}
+\newcommand*{\LettrineFont}{%
+ \LettrineFontHook
+ \fontsize{\L@factor\L@height}{\L@factor\L@height}%
+ \selectfont
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v0.9}{1998/03/13}{\cs{LettrineFontEPS} added.}
+%
+% \changes{v2.21}{2018/08/28}{\cs{LettrineFontEPS} renamed as
+% \cs{LettrineImage}.}
+%
+% \begin{macro}{\LettrineImage}
+% The following definition is for use with dropped capitals defined
+% as images: EPS, PDF, JPG, PNG files (see examples in demo.tex).
+% Its use requires the |graphicx| package to be loaded in the
+% preamble with |\usepackage{graphicx}|. The required size is
+% computed just as in the standard case, |\includegraphics|
+% prints the image at this size.
+%
+% \changes{v1.6}{2004/05/22}{Added \cs{LettrineFontHook}
+% to \cs{LettrineFontEPS}. This is needed for color options.}
+%
+% \begin{macrocode}
+\newcommand*{\LettrineImage}{%
+ \LettrineFontHook\includegraphics[height=\L@height]%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setupL@lbox}
+% The next (internal) command computes the requested size for the
+% initial (letter or image) and prepares a box |\L@lbox| holding it.
+% \begin{macrocode}
+\def\setupL@lbox{%
+ \computeL@height
+ \ifL@image
+ \sbox{\L@lbox}{\LettrineImage{\l@initial}}%
+ \else
+ \compute@fontsize
+ \sbox{\L@lbox}{\LettrineFont \l@initial}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Set up keyval initializations.
+%
+% \begin{macrocode}
+\define@key{L}{lines}{\setcounter{L@lines}{#1}}
+\define@key{L}{depth}{\setcounter{L@depth}{#1}}
+\define@key{L}{lhang}{\renewcommand*{\L@hang}{#1}}
+\define@key{L}{loversize}{\renewcommand*{\L@oversize}{#1}}
+\define@key{L}{lraise}{\renewcommand*{\L@raise}{#1}}
+\define@key{L}{ante}{\renewcommand*{\L@ante}{#1}}
+\define@key{L}{findent}{\setlength{\L@Findent}{#1}}
+\define@key{L}{nindent}{\setlength{\L@Nindent}{#1}}
+\define@key{L}{slope}{\setlength{\L@slope}{#1}}
+\define@key{L}{image}[true]{\csname L@image#1\endcsname}
+\define@key{L}{grid}[true]{\csname L@grid#1\endcsname}
+\define@key{L}{realheight}[true]{\csname L@realh#1\endcsname}
+\define@key{L}{novskip}{\setlength{\L@novskip}{#1}}
+\define@key{L}{refstring}[\l@initial]{\L@selfreftrue
+ \def\l@refstring{#1}}
+% \end{macrocode}
+%
+% \changes{v1.5}{2003/08/18}{\cs{LettrineOptionsFor} and
+% \cs{LettrineWidth} added.}
+%
+% \begin{macro}{\LettrineOptionsFor}
+% This command is to be used in an optional config file (the name
+% of which is found in |\DefaultOptionsFile|) to set the values
+% of parameters on a per character basis, for instance:\\
+% |\LettrineOptionsFor{A}{slope=0.6em, findent=-1em, nindent=0.6em}|\\
+% creates an internal command (|\l@A-keys| in this example),
+% which expands to the options given as second argument of
+% |\LettrineOptionsFor| for letter `A’.
+%
+% \begin{macrocode}
+\newcommand*{\LettrineOptionsFor}[2]{\@namedef{l@#1-keys}{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\lettrine}
+% Now let’s define |\lettrine|.
+%
+% \begin{macrocode}
+\def\lettrine{\@ifnextchar[\@lettrine{\@lettrine[]}}
+\def\@lettrine[#1]#2#3{%
+ \def\l@initial{#2}\let\l@refstring\l@initial
+% \end{macrocode}
+%
+% \changes{v1.9}{2015/08/31}{\cs{theDefaultLines} changed to
+% \cs{value\{DefaultLines\}}, same with \cs{theDefaultDepth}.
+% Needed for babel-hebrew which redefines \cs{@arabic}.
+% Thanks to Ulrike Fischer for providing the fix.}
+%
+% First reset the parameters to their default values:
+% \begin{macrocode}
+ \setcounter{L@lines}{\value{DefaultLines}}%
+ \setcounter{L@depth}{\value{DefaultDepth}}%
+ \renewcommand*{\L@hang}{\DefaultLhang}%
+ \renewcommand*{\L@oversize}{\DefaultLoversize}%
+ \renewcommand*{\L@raise}{\DefaultLraise}%
+ \renewcommand*{\L@ante}{}%
+ \setlength{\L@Findent}{\DefaultFindent}%
+ \setlength{\L@Nindent}{\DefaultNindent}%
+ \setlength{\L@slope}{\DefaultSlope}%
+ \setlength{\L@novskip}{\DiscardVskip}%
+ \ifLettrineImage\L@imagetrue\else\L@imagefalse\fi
+ \ifLettrineOnGrid\L@gridtrue\else\L@gridfalse\fi
+ \ifLettrineRealHeight\L@realhtrue\else\L@realhfalse\fi
+ \ifLettrineSelfRef\L@selfreftrue\else\L@selfreffalse\fi
+% \end{macrocode}
+%
+% The final initial size depends on the height of |\L@tbox|; the
+% content of |\L@tbox| depends on option |realheight|, so we have
+% to read |\lettrine|’s optional argument and initialise the
+% |\L@tbox| content now\footnote{Now means before eventually
+% reading the config file.}.
+%
+% \changes{v1.9}{2015/08/31}{Use the second mandatory
+% argument of \cs{lettrine} or \cs{LettrineSecondString} (which
+% defaults to `x’) to compute \cs{L@height}. This is controlled by
+% the `realheight’ flag.}
+%
+% \begin{macrocode}
+ \setkeys{L}{#1}%
+ \sbox{\L@tbox}{\LettrineTextFont{\LettrineSecondString}}%
+ \ifL@realh
+ \def\@tempa{#3}%
+ \ifx\@tempa\@empty
+ \PackageWarning{lettrine.sty}%
+ {Empty second argument,\MessageBreak
+ ignoring option `realheight';}%
+ \else
+ \sbox{\L@tbox}{\LettrineTextFont{#3}}%
+ \fi
+ \fi
+% \end{macrocode}
+% \changes{v1.5}{2003/08/18}{Added reading of an optional
+% config file \cs{DefaultOptionsFile}.}
+% Then try to read an optional file (its name is given by
+% |\DefaultOptionsFile|), do this inside a group, and define a
+% global command |\l@LOKeys| which will expand to the list of
+% options given by |\LettrineOptionsFor| for the current initial
+% (defined by |#2|)\dots
+% \begin{macrocode}
+ \if\DefaultOptionsFile\relax
+ \else
+ \begingroup
+ \InputIfFileExists{\DefaultOptionsFile}%
+ {}%
+ {\PackageWarning{lettrine.sty}%
+ {File \DefaultOptionsFile\space not found}%
+ }%
+% \end{macrocode}
+% Gobble the colour commands, just keep the letter argument.
+% \begin{macrocode}
+ \def\color##1##{\l@color{##1}}%
+ \let\l@color\@gobbletwo
+ \def\textcolor##1##{\l@textcolor{##1}}%
+ \def\l@textcolor##1##2##3{##3}%
+% \end{macrocode}
+% Save the list of options relevant to the letter in |#2|
+% in |\l@LOKeys| (list is empty eventually).
+% \begin{macrocode}
+ \expandafter\ifx\csname l@#2-keys\endcsname\relax
+ \gdef\l@LOKeys{}%
+ \else
+ \xdef\l@LOKeys{\csname l@#2-keys\endcsname}%
+ \fi
+ \endgroup
+% \end{macrocode}
+% Now apply these options (the following code executes
+% |\setkeys{L}{\l@LOKeys}}| where |\l@LOKeys| is expanded,
+% see \file{keyval.sty}).
+% \begin{macrocode}
+ \def\KV@prefix{KV@L@}%
+ \let\@tempc\relax
+ \expandafter\KV@do\l@LOKeys,\relax,
+% \end{macrocode}
+% As some parameters’ values \lopt{findent}, \lopt{nindent} and
+% \lopt{slope} ---which do not influence the initial’s size--- may
+% be given relative to |\LettrineWidth|, the |\L@lbox| has to be
+% set up to evaluate |\LettrineWidth|.
+%
+% \changes{v2.21}{2018/08/28}{\lopt{findent} computation
+% relative to \cs{LettrineWidth} in \lopt{.cfl} files fixed;
+% thanks to Frank Mittelbach for raising the issue.}
+%
+% \begin{macrocode}
+ \setupL@lbox
+ \setlength{\LettrineWidth}{\wd\L@lbox}%
+ \def\KV@prefix{KV@L@}%
+ \let\@tempc\relax
+ \expandafter\KV@do\l@LOKeys,\relax,
+% \end{macrocode}
+% As local options prevail on those held in the config file, we
+% have to read local options again:
+% \begin{macrocode}
+ \setkeys{L}{#1}%
+ \fi
+% \end{macrocode}
+% Options and optional config file have be taken into account, we
+% can now finally save the first mandatory argument of |\lettrine|
+% properly scaled into |\L@lbox|.
+% \begin{macrocode}
+ \setupL@lbox
+% \end{macrocode}
+%
+% \changes{v1.65}{2014/09/04}{Measure and store the initial’s
+% final dimensions.}
+% Store the initial’s final dimensions,
+% \begin{macrocode}
+ \setlength{\LettrineWidth}{\wd\L@lbox}%
+ \setlength{\LettrineHeight}{\ht\L@lbox}%
+ \setlength{\LettrineDepth}{\dp\L@lbox}%
+% \end{macrocode}
+%
+% \changes{v2.0}{2018/07/21}{Add informations about targeted
+% and actual height of the initial to the .log file.}
+%
+% print some informations about accuracy to the log file,
+% \begin{macrocode}
+ \begingroup
+ \def\IeC##1{##1}%
+ \@tempdima=\L@oversize pt\relax
+ \PackageInfo{lettrine.sty}%
+ {Targeted height = \the\L@target@tht\MessageBreak
+ (no accent, loversize=0),\MessageBreak
+ Lettrine height = \the\LettrineHeight\space (#2)%
+ \ifdim\@tempdima=\z@\else\space loversize=\L@oversize\fi;%
+ \MessageBreak reported}%
+ \endgroup
+% \end{macrocode}
+% and reset |\L@tbox|’s content (mandatory in case
+% \lopt{realheight=false}):
+%
+% \changes{v1.6}{2004/05/22}{Add braces around \#3 to allow
+% commands taking an argument (such as \cs{MakeLowercase}) in
+% \cs{LettrineTextFont}. Suggested by Philipp Lehman.}
+%
+% \begin{macrocode}
+ \sbox{\L@tbox}{\LettrineTextFont{#3}}%
+% \end{macrocode}
+%
+% Start a new paragraph, skipping the necessary amount of space
+% if the dropped capital sticks out of the top of paragraph.
+% We use |\L@first| to compute the amount of space to be skipped.
+%
+% \changes{v0.9}{1998/02/23}{Calculations of length
+% \cs{L@first} changed. Do not `vskip’ small lengths ($<$0.2pt),
+% they are just rounding errors.}
+%
+% \changes{v1.8}{2015/02/06}{The 0.2pt limit for discarded
+% vskips is now customisable through \cs{DiscardVskip} and option
+% `novskip’.}
+%
+% \changes{v1.2}{2002/03/13}{\cs{baselineskip} may be a
+% rubber length, we convert it to a dimen.}
+%
+% The basis for |\L@raise| (and |\L@oversize|, see
+% |\LettrineFont|) is |\L@target@tht|.
+%
+% \begin{macrocode}
+ \setlength{\L@first}{\LettrineHeight}%
+ \setlength{\L@lraise}{\L@raise\L@target@tht}%
+ \addtolength{\L@first}{\L@lraise}%
+ \ifnum\value{L@lines}=1
+ \addtolength{\L@first}{-\ht\L@tbox}%
+ \else
+ \addtolength{\L@first}{-\L@target@tht}%
+ \addtolength{\L@lraise}{-\L@target@dp}%
+ \fi
+ \par
+% \end{macrocode}
+% |\L@first| now holds the height of the needed |\vskip|; if too
+% small it will be discarded.
+% \begin{macrocode}
+ \ifdim\L@first>\L@novskip
+% \end{macrocode}
+% When the \lopt{grid} option is \lopt{true}, let’s round up
+% |\L@first| to the next integer number of |\baselineskip|.
+% \begin{macrocode}
+ \ifL@grid
+ \@tempdima=\baselineskip
+ \@tempdimb=\@tempdima
+ \advance\@tempdimb by \L@novskip
+ \@tempcnta=1
+ \loop\ifdim\L@first>\@tempdimb
+ \advance\@tempcnta by 1
+ \advance\L@first by -\@tempdima
+ \repeat
+ \L@first=\@tempcnta\baselineskip
+ \fi
+ \vskip\L@first
+ \fi
+% \end{macrocode}
+% Again, we (mis)use the length |\L@first| to compute the width of
+% the text eventually coming before the dropped capital. It is
+% reset later on to hold the first line’s length.
+% \begin{macrocode}
+ \setlength{\L@Pindent}{\wd\L@lbox}%
+ \addtolength{\L@Pindent}{-\L@hang\wd\L@lbox}%
+ \settowidth{\L@first}{\L@ante}%
+ \addtolength{\L@Pindent}{\L@first}%
+ \addtolength{\L@Pindent}{\L@Findent}%
+ \setlength{\L@first}{\linewidth}%
+ \addtolength{\L@first}{-\L@Pindent}%
+% \end{macrocode}
+% Now let’s compute |\L@Nindent| and |\L@next| for the next lines.
+% \begin{macrocode}
+ \addtolength{\L@Nindent}{\L@Pindent}%
+ \setlength{\L@next}{\linewidth}%
+ \addtolength{\L@next}{-\L@Nindent}%
+% \end{macrocode}
+%
+% \changes{v1.1}{1999/08/18}{Add \cs{rightmargin} to
+% \cs{L@Pindent} for \cs{Lettrine} to work properly in quote,
+% quotation, abstract environments\dots{} but do not change
+% \cs{linewidth} which is set by these environments.}
+%
+% \changes{v1.4}{2002/10/26}{\cs{lettrine} still didn’t
+% work properly in quote, quotation, abstract environments,
+% pointed out by Matthias C.\ Schmidt. \cs{rightmargin} was added
+% too early to \cs{L@Nindent}, thus making \cs{\L@next} too short
+% by \cs{rightmargin}.}
+%
+% \changes{v2.22}{2019/04/04}{\cs{@totalleftmargin} is the correct
+% indentation for quote, quotation and abstract environments.}
+%
+% This is for quotation, quote, abstract\dots{} environments:
+% |\linewidth| is set by these environments, all we have to do
+% is to shift our text left by |\@totalleftmargin|.
+% \begin{macrocode}
+ \addtolength{\L@Pindent}{\@totalleftmargin}%
+ \addtolength{\L@Nindent}{\@totalleftmargin}%
+% \end{macrocode}
+% Now, set up the shape of the new paragraph (designed by
+% |\parshape|).
+%
+% \changes{v1.9}{2015/08/31}{\cs{theL@depth} changed to
+% \cs{value\{L@depth\}}.}
+%
+% \begin{macrocode}
+ \addtocounter{L@lines}{1}%
+ \addtocounter{L@lines}{\value{L@depth}}%
+ \def\L@parshape{\c@L@lines \the\L@Pindent \the\L@first}%
+ \@tempcnta=\tw@
+ \@whilenum \@tempcnta<\c@L@lines\do{%
+ \edef\L@parshape{\L@parshape \the\L@Nindent \the\L@next}%
+ \addtolength{\L@Nindent}{\L@slope}%
+ \addtolength{\L@next}{-\L@slope}%
+ \advance\@tempcnta\@ne}%
+ \edef\L@parshape{\L@parshape \@totalleftmargin \the\linewidth}%
+ \noindent
+ \parshape=\L@parshape\relax
+% \end{macrocode}
+% \changes{v1.64}{2013/03/14}{Remove \$ around \cs{smash}
+% and add \cs{relax}. Bug pointed out by David Monniaux.
+% Correction by Enrico Gregorio.}
+% Write the dropped capital into the left margin, and wrap
+% the rest of paragraph around it.
+% \begin{macrocode}
+ \smash{\llap{\mbox{\L@ante}\raisebox{\L@lraise}{\usebox{\L@lbox}}%
+ \hskip \the\L@Findent}}%
+ \usebox{\L@tbox}%
+% \end{macrocode}
+%
+%\changes{v2.22}{2019/03/30}{\cs{parshape} reset added in lists.}
+%
+% A |\parshape| reset is required in abstract, quote and quotation
+% environments beginning with |\lettrine| and spreading over several
+% paragraphs. When the list ends, |\parshape| returns to~|0|.
+% \begin{macrocode}
+ \ifnum\@listdepth>0 \Lreset@listparshape \fi
+}
+% \end{macrocode}
+% \end{macro}
+% This ends the definition of |\lettrine|; |\Lreset@listparshape|
+% adds the parshape reset to the first occurence of |\everypar|
+% following the |\lettrine| command.
+% \begin{macrocode}
+\newtoks\Llist@everypar
+\def\Lreset@listparshape{%
+ \let\Lnew@everypar\everypar
+ \Llist@everypar=\expandafter{\the\everypar}%
+ \Lnew@everypar={\the\Llist@everypar
+ \parshape=\@ne \@totalleftmargin \linewidth \relax
+ \let\everypar\Llist@everypar
+ }%
+}
+% \end{macrocode}
+%
+% Load a local config file if present in \LaTeX{}’s search path.
+% \begin{macrocode}
+\InputIfFileExists{lettrine.cfg}
+ {\typeout{Loading lettrine.cfg}}
+ {\typeout{lettrine.cfg not found, using default values}}
+% \end{macrocode}
+% \iffalse
+%</sty>
+% \fi
+% \clearpage
+% \section{Configuration file}
+%
+% \iffalse
+%<*cfg>
+% \fi
+% \begin{macrocode}
+%% lettrine.cfg: configuration file for lettrine.sty
+%%
+%% If you want to customize lettrine, please *do not* hack into the
+%% code, copy this file to your working directory and customize the
+%% copy as you like.
+%%
+%% Uncomment any of these lines and change the parameters’ values
+%% to fit your needs (see lettrine.dtx).
+%%
+%%\setcounter{DefaultLines}{2}
+%%\setcounter{DefaultDepth}{0}
+%%
+%% These are *decimal* numbers:
+%%\renewcommand*{\DefaultLoversize}{0}
+%%\renewcommand*{\DefaultLraise}{0}
+%%\renewcommand*{\DefaultLhang}{0}
+%%
+%% These are *lengths* (don't forget the unit):
+%%\setlength{\DefaultFindent}{0pt}
+%%\setlength{\DefaultNindent}{0.5em}
+%%\setlength{\DefaultSlope}{0mm}
+%%\setlength{\DiscardVskip}{0.2pt}
+%%
+%% Theses are *flags* (value=true/false):
+%%\LettrineImagefalse
+%%\LettrineOnGridfalse
+%%\LettrineRealHeightfalse
+%%\LettrineSelfReffalse
+%%
+%% Theses are *commands* (value=string, only height matters):
+%%\renewcommand*{\LettrineTestString}{EFTZ}
+%%\renewcommand*{\LettrineSecondString}{x}
+%%
+%% In case you want to set parameters for some letters
+%% in file `optfile.cfl'
+%% \renewcommand{\DefaultOptionsFile}{optfile.cfl}
+% \end{macrocode}
+% \iffalse
+%</cfg>
+% \fi
+%
+% \iffalse
+%<*dtx>
+% \fi
+%%
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+% \iffalse
+%</dtx>
+% \fi
+%
+% \Finale
+\endinput
+
+%%% Local Variables:
+%%% fill-column: 72
+%%% coding: utf-8
+%%% End: