Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

Small caps (\sc) is not producing dotted I (İ)

Here is mwe

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[turkish]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage[left=3.50cm, right=2.50cm, top=3.00cm, bottom=3.00cm]{geometry}

\addto\extrasturkish{\uccode`i=\string"9D \lccode`I=\string"19 }
\addto\noextrasturkish{\uccode`i=`I \lccode`I=`i }
\begin{document}
\shorthandoff{=}
\sc{ı and i. just like I and İ}
\end{document}

How can i force it?

share|improve this question
add comment

3 Answers

up vote 7 down vote accepted

Note that \sc is deprecated and would be used as {\sc ...} not \sc{...} I use \textsc below.

I think the easiest thing to do is remove the magic association of \.\i with i so that it always uses a dot accent.

enter image description here

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[turkish]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage[left=3.50cm, right=2.50cm, top=3.00cm, bottom=3.00cm]{geometry}

\addto\extrasturkish{\uccode`i=\string"9D \lccode`I=\string"19 }
\addto\noextrasturkish{\uccode`i=`I \lccode`I=`i }
\begin{document}
\expandafter\let\csname\string\T1\string\.-\string\i\endcsname\relax
\shorthandoff{=}
\textsc{ı and \.\i. just like I and İ}

\textrm{ı and \.\i. just like I and İ}
\end{document}
share|improve this answer
    
Would you go so far as to say that's a bug in babel Turkish support? –  Brent.Longborough Jun 1 '12 at 11:06
    
Well I'll pass it on anyway –  David Carlisle Jun 1 '12 at 11:10
    
This is a nice answer but it is not actually a solution to my problem. It's more like a hack to use small caps not the actual command (\sc). I need \sc to use in \newcommand{\mysidestyle}{\small\sc} Is there any alternatives to do this? –  interlude Jun 1 '12 at 12:15
3  
The aside about \sc was just a general point that the command has been deprecated since LaTeX2e came out in 1993. If you need a decaration form then use \scshape rather than \sc. But the change I made to \.\i is independent of this it works whether you use \sc \textsc` or \scshape. –  David Carlisle Jun 1 '12 at 12:40
    
@Brent.Longborough The problem exists even if babel is not used. I wonder if this can be fixed from within standard TeX (ie, neither luatex nor a Turkish font, as suggested by egreg) in a more or less straightforward way. –  Javier Bezos Jun 1 '12 at 14:02
add comment

This is quite a big problem. :(

The lower case letter i in small caps has no dot and changing it to produce a dotted i is bound to bigger problems than it would solve.

The real solution would be a proper Turkish font, where i always has a dot.

In your case I propose a workaround: add to the preamble

\providecommand*\UndeclareTextComposite[3]{%
  \expandafter\let\csname\expandafter\string\csname
  #2\endcsname\string#1-#3\endcsname\relax}

\UndeclareTextComposite{\.}{T1}{i}

\makeatletter
\DeclareTextCompositeCommand{\.}{T1}{i}{%
  \ifx\f@shape\scdefault\accent10i\else i\fi}
\makeatother

and input your dotted i's in small caps as

\textsc{ı and \.i. just like I and İ}

Writing \.i in normal text should cause no big harm.

share|improve this answer
    
i don't think this sort of mucking about is ever going to be satisfactory. as for a "proper turkish font" -- any unicode-encoded font can potentially do the business. just (ha!) use luatex, and select a uc/lc table that maps i<->\.I (which appears as a character in unicode, since several languages use it) and \i<->I -- and bob's your uncle (or in my case, brother-in-law) –  wasteofspace Jun 2 '12 at 8:31
    
@wasteofspace Of course, using (Xe|Lua)LaTeX will solve the problem, provided the fonts have the "TRK" language feature. –  egreg Jun 2 '12 at 9:54
add comment

In the following, I will try to give an example that attempts to solve the problem by using lualatex. As commented above, the use of an open type font that was properly designed solves the problem almost immediately. Unfortunately, there are a quite large number of fonts that need tweaking to get them to produce a small caps dotted i. Here, I will use four different fonts—Minion Pro, Scala Pro, TeX Gyre Termes and Latin Modern. The first two are commercial fonts whereas the last two can be downloaded from http://www.gust.org.pl/projects/e-foundry.

The end result looks like the following. enter image description here

I will now explain what I did for each line in the table above.

1) Minion Pro has been through quite a number of updates. Recent versions have the correct settings for Turkish in the lookup tables. Here you can see that

version 2.012 created 2004/06/29
Edited 'smcp' feature to remove a redundant i->i.sc substitution which was interfering with Turkish substitution i->idotaccent.sc.
version 2.030 created 2007/08/16
Added glyph "i.dot" as duplicate of glyph "i". Added substitution to 'locl' feature to substitute "i.dot" from "i" in certain languages (e.g. Turkish).

The font works out of the box. No fiddling is necessary.

2-3) Scala Pro seems to work out of the box. However, due to the ambiguities it creates, the fi ligature is not applied when the language is Turkish. Unfortunately, the kerning is too close between the f-i pair for my taste. Even though not specifically asked in the question, I provide an example feature file that adds some space to fix the kerning.

4-5) TeX Gyre Termes has a glyph called idotaccent.sc but there is no reference to it in the font's lookup tables. The feature file below fixes the problem, albeit in a brute force way. There is probably a much more elegant solution than the one illustrated: I used the Font Forge program to extract the feature file of the font (Font Forge->Element Menu->Font Info->Click on lookups->Right click on the table->Save feature file), copied the relevant lookup table used in small caps conversion, modified the lookup info for the Turkish language in a new feature named sctr (small caps turkish) and activated the feature.

6-7) Latin Modern does not have the dotted i in small caps. This time I took the dotless i small caps, added a dot accent to it (uni0307) and roughly fixed the kerning. I again created a new feature named sctr, and activated it.

There are probably ways to directly modify the rules used in smcp lookup tables, but I was not able to do it using feature files. No matter what I do, the predefined substitutions in smcp rules seem to override the changes I instruct. As a result, the only remedy I could find was to create a new feature to do the hacks.

For more information on feature files please see the file syntax page. Furthermore, the following pages have long discussions on how feature files should be defined for dottless i small caps, and various ligatures for Turkish: page 1, page 2, page 3.

Here is the code that generates the table above:

% !TeX program = lualatex
% !TeX spellcheck = tr

\documentclass[12pt,oneside,a4paper]{article}
\pagestyle{empty}

\usepackage[no-math]{fontspec}
\usepackage[turkish]{babel}
\defaultfontfeatures{Ligatures=TeX, Language=Turkish}
\setmainfont[SmallCapsFont={Latin Modern Roman Caps}]{Latin Modern Roman}
\newfontfamily\scalaKern[FeatureFile={scala.fea}]{Scala Pro}
\newfontface\termesSC[FeatureFile={termes.fea},RawFeature={+sctr}]{TeX Gyre Termes}
\newfontfamily\lmSC[SmallCapsFont={Latin Modern Roman Caps}, SmallCapsFeatures={FeatureFile={lm.fea},RawFeature={+sctr}}]{Latin Modern Roman}

\newcommand{\test}{fizik}
\newcommand{\TEST}{FİZİK}

\begin{document}
\begin{tabular}{rllll}
&Font & Regular & Small Caps & All Caps \\ 
1) &Minion Pro v2.030 & {\fontspec{Minion Pro}\test} & {\fontspec{Minion     Pro} \textsc{\test}} & {\fontspec{Minion Pro} \TEST} \\
2) &Scala Pro & {\fontspec{Scala Pro} \test} & {\fontspec{Scala Pro} \textsc{\test}} & {\fontspec{Scala Pro} \TEST}\\
3) &Scala Pro (scala.fea) & {\scalaKern \test} & &\\
4) &TeX Gyre Termes v2.004& {\fontspec{TeX Gyre Termes} \test} & {\fontspec{TeX Gyre Termes} \textsc{\test}} & {\fontspec{TeX Gyre Termes} \TEST}\\
5) &TeX Gyre Termes (termes.fea) & & {\termesSC \test} & \\
6) &Latin Modern  v2.004 & {\test} & {\textsc{\test}} & {\TEST} \\
7) &Latin Modern (lm.fea) & & {\lmSC \textsc{\test}} & \\
\end{tabular}
\end{document}

scala.fea contents


feature kern {
language TRK;
pos \f \i.latn_TRK 40;
} kern;

termes.fea contents


lookup smcpLowercasetoSmallCapitalsloo {
  lookupflag 0;
    sub \a by \a.sc ;
    sub \b by \b.sc ;
    sub \c by \c.sc ;
    sub \d by \d.sc ;
    sub \e by \e.sc ;
    sub \f by \f.sc ;
    sub \g by \g.sc ;
    sub \h by \h.sc ;
 #   sub \i by \i.sc ;
    sub \j by \j.sc ;
    sub \k by \k.sc ;
    sub \l by \l.sc ;
    sub \m by \m.sc ;
    sub \n by \n.sc ;
    sub \o by \o.sc ;
    sub \p by \p.sc ;
    sub \q by \q.sc ;
    sub \r by \r.sc ;
    sub \s by \s.sc ;
    sub \t by \t.sc ;
    sub \u by \u.sc ;
    sub \v by \v.sc ;
    sub \w by \w.sc ;
    sub \x by \x.sc ;
    sub \y by \y.sc ;
    sub \z by \z.sc ;
    sub \aacute by \aacute.sc ;
    sub \abreve by \abreve.sc ;
    sub \abreveacute by \abreveacute.sc ;
    sub \abrevedotbelow by \abrevedotbelow.sc ;
    sub \abrevegrave by \abrevegrave.sc ;
    sub \abrevehookabove by \abrevehookabove.sc ;
    sub \abrevetilde by \abrevetilde.sc ;
    sub \acircumflex by \acircumflex.sc ;
    sub \acircumflexacute by \acircumflexacute.sc ;
    sub \acircumflexdotbelow by \acircumflexdotbelow.sc ;
    sub \acircumflexgrave by \acircumflexgrave.sc ;
    sub \acircumflexhookabove by \acircumflexhookabove.sc ;
    sub \acircumflextilde by \acircumflextilde.sc ;
    sub \adblgrave by \adblgrave.sc ;
    sub \adieresis by \adieresis.sc ;
    sub \adotbelow by \adotbelow.sc ;
    sub \ae by \ae.sc ;
    sub \aeacute by \aeacute.sc ;
    sub \agrave by \agrave.sc ;
    sub \ahookabove by \ahookabove.sc ;
    sub \amacron by \amacron.sc ;
    sub \aogonek by \aogonek.sc ;
    sub \aring by \aring.sc ;
    sub \aringacute by \aringacute.sc ;
    sub \atilde by \atilde.sc ;
    sub \cacute by \cacute.sc ;
    sub \ccaron by \ccaron.sc ;
    sub \ccedilla by \ccedilla.sc ;
    sub \ccircumflex by \ccircumflex.sc ;
    sub \cdotaccent by \cdotaccent.sc ;
    sub \dcaron by \dcaron.sc ;
    sub \dcroat by \dcroat.sc ;
    sub \ddotbelow by \ddotbelow.sc ;
    sub \dlinebelow by \dlinebelow.sc ;
    sub \eacute by \eacute.sc ;
    sub \ebreve by \ebreve.sc ;
    sub \ecaron by \ecaron.sc ;
    sub \ecircumflex by \ecircumflex.sc ;
    sub \ecircumflexacute by \ecircumflexacute.sc ;
    sub \ecircumflexdotbelow by \ecircumflexdotbelow.sc ;
    sub \ecircumflexgrave by \ecircumflexgrave.sc ;
    sub \ecircumflexhookabove by \ecircumflexhookabove.sc ;
    sub \ecircumflextilde by \ecircumflextilde.sc ;
    sub \edblgrave by \edblgrave.sc ;
    sub \edieresis by \edieresis.sc ;
    sub \edotaccent by \edotaccent.sc ;
    sub \edotbelow by \edotbelow.sc ;
    sub \egrave by \egrave.sc ;
    sub \ehookabove by \ehookabove.sc ;
    sub \emacron by \emacron.sc ;
    sub \eng by \eng.sc ;
    sub \eogonek by \eogonek.sc ;
    sub \ereversed by \ereversed.sc ;
    sub \eth by \eth.sc ;
    sub \etilde by \etilde.sc ;
    sub \gacute by \gacute.sc ;
    sub \gbreve by \gbreve.sc ;
    sub \gcaron by \gcaron.sc ;
    sub \gcircumflex by \gcircumflex.sc ;
    sub \gcommaaccent by \gcommaaccent.sc ;
    sub \gdotaccent by \gdotaccent.sc ;
    sub \germandbls by \germandbls.sc ;
    sub \hbar by \hbar.sc ;
    sub \hbrevebelow by \hbrevebelow.sc ;
    sub \hcircumflex by \hcircumflex.sc ;
    sub \hdieresis by \hdieresis.sc ;
    sub \hdotbelow by \hdotbelow.sc ;
    sub \iacute by \iacute.sc ;
    sub \ibreve by \ibreve.sc ;
    sub \icircumflex by \icircumflex.sc ;
    sub \idblgrave by \idblgrave.sc ;
    sub \idieresis by \idieresis.sc ;
    sub \idotbelow by \idotbelow.sc ;
    sub \igrave by \igrave.sc ;
    sub \ihookabove by \ihookabove.sc ;
    sub \i_j by \i_j.sc ;
    sub \imacron by \imacron.sc ;
    sub \iogonek by \iogonek.sc ;
    sub \itilde by \itilde.sc ;
    sub \jcircumflex by \jcircumflex.sc ;
    sub \kcommaaccent by \kcommaaccent.sc ;
    sub \lacute by \lacute.sc ;
    sub \lcaron by \lcaron.sc ;
    sub \lcommaaccent by \lcommaaccent.sc ;
    sub \ldot by \ldot.sc ;
    sub \ldotbelow by \ldotbelow.sc ;
    sub \ldotbelowmacron by \ldotbelowmacron.sc ;
    sub \lslash by \lslash.sc ;
    sub \mdotbelow by \mdotbelow.sc ;
    sub \nacute by \nacute.sc ;
    sub \ncaron by \ncaron.sc ;
    sub \ncommaaccent by \ncommaaccent.sc ;
    sub \ndotaccent by \ndotaccent.sc ;
    sub \ndotbelow by \ndotbelow.sc ;
    sub \ntilde by \ntilde.sc ;
    sub \oacute by \oacute.sc ;
    sub \obreve by \obreve.sc ;
    sub \ocircumflex by \ocircumflex.sc ;
    sub \ocircumflexacute by \ocircumflexacute.sc ;
    sub \ocircumflexdotbelow by \ocircumflexdotbelow.sc ;
    sub \ocircumflexgrave by \ocircumflexgrave.sc ;
    sub \ocircumflexhookabove by \ocircumflexhookabove.sc ;
    sub \ocircumflextilde by \ocircumflextilde.sc ;
    sub \odblgrave by \odblgrave.sc ;
    sub \odieresis by \odieresis.sc ;
    sub \odotbelow by \odotbelow.sc ;
    sub \oe by \oe.sc ;
    sub \ograve by \ograve.sc ;
    sub \ohookabove by \ohookabove.sc ;
    sub \ohorn by \ohorn.sc ;
    sub \ohornacute by \ohornacute.sc ;
    sub \ohorndotbelow by \ohorndotbelow.sc ;
    sub \ohorngrave by \ohorngrave.sc ;
    sub \ohornhookabove by \ohornhookabove.sc ;
    sub \ohorntilde by \ohorntilde.sc ;
    sub \ohungarumlaut by \ohungarumlaut.sc ;
    sub \omacron by \omacron.sc ;
    sub \oogonek by \oogonek.sc ;
    sub \oslash by \oslash.sc ;
    sub \oslashacute by \oslashacute.sc ;
    sub \otilde by \otilde.sc ;
    sub \racute by \racute.sc ;
    sub \rcaron by \rcaron.sc ;
    sub \rcommaaccent by \rcommaaccent.sc ;
    sub \rdblgrave by \rdblgrave.sc ;
    sub \rdotaccent by \rdotaccent.sc ;
    sub \rdotbelow by \rdotbelow.sc ;
    sub \rdotbelowmacron by \rdotbelowmacron.sc ;
    sub \sacute by \sacute.sc ;
    sub \scaron by \scaron.sc ;
    sub \scedilla by \scedilla.sc ;
    sub \scircumflex by \scircumflex.sc ;
    sub \uni0219 by \uni0219.sc ;
    sub \sdotbelow by \sdotbelow.sc ;
    sub \tcaron by \tcaron.sc ;
    sub \tcedilla by \tcedilla.sc ;
    sub \uni021B by \uni021B.sc ;
    sub \tdieresis by \tdieresis.sc ;
    sub \tdotbelow by \tdotbelow.sc ;
    sub \thorn by \thorn.sc ;
    sub \tlinebelow by \tlinebelow.sc ;
    sub \uacute by \uacute.sc ;
    sub \ubreve by \ubreve.sc ;
    sub \ucircumflex by \ucircumflex.sc ;
    sub \udblgrave by \udblgrave.sc ;
    sub \udieresis by \udieresis.sc ;
    sub \udotbelow by \udotbelow.sc ;
    sub \ugrave by \ugrave.sc ;
    sub \uhookabove by \uhookabove.sc ;
    sub \uhorn by \uhorn.sc ;
    sub \uhornacute by \uhornacute.sc ;
    sub \uhorndotbelow by \uhorndotbelow.sc ;
    sub \uhorngrave by \uhorngrave.sc ;
    sub \uhornhookabove by \uhornhookabove.sc ;
    sub \uhorntilde by \uhorntilde.sc ;
    sub \uhungarumlaut by \uhungarumlaut.sc ;
    sub \umacron by \umacron.sc ;
    sub \uogonek by \uogonek.sc ;
    sub \uring by \uring.sc ;
    sub \utilde by \utilde.sc ;
    sub \wacute by \wacute.sc ;
    sub \wcircumflex by \wcircumflex.sc ;
    sub \wdieresis by \wdieresis.sc ;
    sub \wgrave by \wgrave.sc ;
    sub \yacute by \yacute.sc ;
    sub \ycircumflex by \ycircumflex.sc ;
    sub \ydieresis by \ydieresis.sc ;
    sub \ydotbelow by \ydotbelow.sc ;
    sub \ygrave by \ygrave.sc ;
    sub \yhookabove by \yhookabove.sc ;
    sub \ytilde by \ytilde.sc ;
    sub \zacute by \zacute.sc ;
    sub \zcaron by \zcaron.sc ;
    sub \zdotaccent by \zdotaccent.sc ;
    sub \zdotbelow by \zdotbelow.sc ;
    sub \aogonekacute by \aogonekacute.sc ;
    sub \eogonekacute by \eogonekacute.sc ;
    sub \iogonekacute by \iogonekacute.sc ;
    sub \jacute by \jacute.sc ;
    sub \oogonekacute by \oogonekacute.sc ;
    sub \u_uni032F by \ubrevebelowinverted.sc ;
    sub \h_uni0303 by \h_uni0303.sc ;
    sub \imacron.alt by \imacron.alt.sc ;
    sub \l_uni0303 by \l_uni0303.sc ;
    sub \t_uni0303 by \t_uni0303.sc ;
} smcpLowercasetoSmallCapitalsloo;

feature sctr { language TRK; sub i by idotaccent.sc; lookup smcpLowercasetoSmallCapitalsloo; } sctr;

lm.fea contents

feature sctr {
language TRK;
sub i by \i \uni0307;
} sctr;

feature kern { language TRK; position \uni0307 <150 0 0 0>; } kern;

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.