Skip to content

Instantly share code, notes, and snippets.

@izabera
Last active August 29, 2015 14:03
Show Gist options
  • Save izabera/2b09ba766469ec996490 to your computer and use it in GitHub Desktop.
Save izabera/2b09ba766469ec996490 to your computer and use it in GitHub Desktop.
\mylettrine with utf8 capitals support and quotation marks / direct speech dashes
% !TEX encoding = UTF-8 Unicode
\documentclass{article}
\usepackage{lettrine}
\usepackage{luacode}
\usepackage{fontspec}
\usepackage[a4paper]{geometry}
\setmainfont{Adobe Caslon Pro}
\usepackage{multicol}
\usepackage{xcolor}
\usepackage{graphicx}
\usepackage{transparent}
\def\mylettrine#1 {
\luaexec{
lettersmatrix = {
A = {'A','À','Á','Â','Ã','Ä','Å','Ā','Ă','Ą','Ǻ','Ȁ','Ạ','Ả','Ấ','Ầ','Ẩ','Ẫ','Ậ','Ắ','Ằ','Ẳ','Ặ','Α'},
B = {'B','฿','Β'},
C = {'C','Ç','Ć','Ĉ','Ċ','Č'},
D = {'D','Ð','Ď','Đ','Ḍ','Ḏ'},
E = {'E','È','É','Ê','Ë','Ē','Ĕ','Ė','Ę','Ě','Ȅ','Ẹ','Ẻ','Ẽ','Ề','Ế','Ễ','Ể','Ệ','Ε','Ǽ'},
F = {'F'},
G = {'G','Ĝ','Ğ','Ġ','Ģ','Ǧ','Ǵ'},
H = {'H','Ĥ','Ħ','Ḥ','Ḧ','Ḫ','Η'},
I = {'I','Ì','Í','Î','Ï','Ĩ','Ī','Ĭ','Į','İ','Ȉ','Ỉ','Ị','Ι'},
J = {'J','Ĵ'},
K = {'K','Ķ','Κ'},
L = {'L','Ĺ','Ļ','Ł','Ḷ'},
M = {'M','Μ'},
N = {'N','Ñ','Ń','Ņ','Ň','Ṅ','Ṇ','Ν'},
O = {'O','Ò','Ó','Ô','Õ','Ö','Ø','Ō','Ŏ','Ő','Ọ','Ơ','Ǫ','Ǿ','Ȍ','Ỏ','Ố','Ồ','Ổ','Ỗ','Ộ','Ớ','Ờ','Ỡ','Ở','Ợ','Ο'},
P = {'P','Ρ'},
Q = {'Q'},
R = {'R','Ŕ','Ŗ','Ř','Ȑ','Ṛ','Ṙ','Ṝ'},
S = {'S','Ś','Ŝ','Ş','Š','Ș','Ṣ'},
T = {'T','Ţ','Ť','Ț','Ṭ','Ṯ','Τ'},
U = {'U','Ù','Ú','Û','Ü','Ũ','Ū','Ŭ','Ů','Ű','Ų','Ư','Ȕ','Ụ','Ủ','Ứ','Ừ','Ử','Ữ','Ự'},
V = {'V'},
W = {'W','Ŵ','Ẁ','Ẃ','Ẅ'},
X = {'X','Χ'},
Y = {'Y','Ý','Ŷ','Ÿ','Ỵ','Ỷ','Ỹ'},
Z = {'Z','Ź','Ż','Ž','Ẓ','Ζ'}
}
function find_letter (letter_to_find)
for key, value in pairs(lettersmatrix) do
for seckey, secvalue in pairs(lettersmatrix[key]) do
if secvalue == letter_to_find then
return key, seckey
end
end
end
end
function firstLetter(str)
return unicode["utf8"].sub(str,1,1)
end
function lastLetters(str)
return unicode["utf8"].sub(str,2)
end
param='\luatexluaescapestring{#1}'
ante=''
while unicode["utf8"].sub(param,1,1)=='`' do
temp=unicode["utf8"].sub(param,1,1)
ante=ante..temp
param=unicode["utf8"].sub(param,2)
end
while unicode["utf8"].sub(param,1,1)=='-' do
temp=unicode["utf8"].sub(param,1,1)
ante=ante..temp
param=unicode["utf8"].sub(param,2)
end
lettrine=firstLetter(param)
alltherest=lastLetters(param)
key,_=find_letter(lettrine)
valuesmatrix = {
A = {'1','7pt','-5pt','0'},
B = {'1','0pt','0pt','0'},
C = {'1','0pt','0pt','0'},
D = {'1','-3pt','0pt','0'},
E = {'1','0pt','0pt','0'},
F = {'1','-2pt','-3pt','0'},
G = {'1','0pt','0pt','0'},
H = {'1','2pt','-2pt','0'},
I = {'1','2pt','-2pt','0'},
J = {'0.7','0pt','-2pt','0.4'},
K = {'1','7pt','-5pt','0'},
L = {'1','0pt','0pt','0'},
M = {'1','2pt','-2pt','0'},
N = {'1','0pt','-2pt','0'},
O = {'1','-3pt','0pt','0'},
P = {'1','-4pt','0pt','0'},
Q = {'0.7','16pt','-1pt','0.5'},
R = {'1','5pt','-3pt','0'},
S = {'1','0pt','0pt','0'},
T = {'1','0pt','-6pt','0'},
U = {'1','0pt','-2pt','0'},
V = {'1','-4pt','-4pt','0'},
W = {'1','-4pt','-3pt','0'},
X = {'1','7pt','-5pt','0'},
Y = {'1','-1pt','-4pt','0'},
Z = {'1','2pt','-2pt','0'}
}
tex.sprint("\string\\lettrine[ante="..ante..",loversize="..valuesmatrix[key][1]..",nindent="..valuesmatrix[key][2]..",findent="..valuesmatrix[key][3]..",lraise="..valuesmatrix[key][4].."]{"..lettrine.."}{"..alltherest.."} ")
}}
\definecolor{myred}{cmyk}{0.11,1,0.75,0.2}
\renewcommand{\LettrineFontHook}{\color{myred}\transparent{0.8}}
\begin{document}
\pagestyle{empty}
\centerline{\large Sample output of \texttt{\textbackslash mylettrine}}
\vspace{.5cm}
Just write \texttt{\textbackslash mylettrine This is an awesome paragraph}. The first letter will be \texttt{lettrine}-ized with (almost) correct kerning (I'm still working on it), and the first word will be in small caps. Supports \textsc{utf-8} capital letters. \textsc{Currently it only works with Adobe Caslon Pro} since I started with that one and kerning other fonts is totally different. Supports \LaTeX -style quotes and direct speech dashes.
\vspace{.5cm}
\begin{multicols}{2}
\mylettrine
ALorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine BLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine CLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine DLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine ELorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine FLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine GLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine HLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine ILorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine JLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine KLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine LLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine MLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine NLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine OLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine PLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine QLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine RLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine SLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine TLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine ULorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine VLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine WLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine XLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine YLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine ZLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine ÐLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine ÀLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine ËLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.
\mylettrine ---ÍLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula. \emph{direct speech}
\mylettrine ``ŁLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.'' \emph{quotes}
\mylettrine `ŠLorem ipsum dolor sit amet, consectetur adipiscing elit. In tempor turpis at ligula tincidunt gravida. Etiam vel quam iaculis dolor dignissim mattis. Quisque magna magna, euismod quis eleifend et, porta eget justo. In hac habitasse platea dictumst. Pellentesque elementum ut velit at vehicula.' \emph{only one quote}
\end{multicols}
\end{document}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment