3
% FROM: http://tex.stackexchange.com/a/262596
5
% Additional: http://tex.stackexchange.com/a/70240
9
\ProvidesPackage{FixSmallCaps}
10
%[2017-03-23, Provides fake smallcaps ]
12
% Fix Smallcaps in fonts that does not have it.
15
% \usepackage{FixSmallCaps}
18
% * Problem with using other enviorments inside this.
19
% * teletext (textt) does not work as it should. (it is not
23
% When dealing with fonts that do not have small caps
24
% it can be a hassle to use different text sizes for
25
% at different points in words to mimic small caps.
27
% This package redefines the behaviour of \textsc{}
28
% to mimic the small caps in fonts that do not have
29
% it, by scaling the lower case letters by to a factor
30
% of 0.75 of the original size and applys \uppercase.
35
\RequirePackage{xstring}
36
\RequirePackage{forloop}
37
\RequirePackage{relsize}
39
\newcounter{sccounter}
40
\newcounter{tempStringLength}
43
\renewcommand{\textsc}[1]{%
44
% this \betterfakesc command requires these two packages:
48
% First, we obtain the length of the input string.
49
\StrLen{#1}[\stringLength]%
51
% Our main forloop will be using a condition of “while less than \stringLength”,
52
% so we’ll need to increase \stringLength by 1 so the forloop will be able to iterate
53
% over the entire string. we’ll use a temporary counter tempStringLength to make
54
% this increase. That’s what the next three lines are about.
55
\setcounter{tempStringLength}{\stringLength}%
56
\addtocounter{tempStringLength}{1}%
57
\def\stringLength{\arabic{tempStringLength}}%
59
% Here is our main loop. We iterate over the characters in the input string,
60
% and the currentLetter is compared to the case rules we have defined. Basically
61
% if the currentLetter is any of the lowercase a-z letters, then we apply a
62
% “fake small caps” effect to it and output it.
63
\forloop[1]{sccounter}{1}{\value{sccounter}<\stringLength}{%
64
\StrChar{#1}{\value{sccounter}}[\currentLetter]%
66
\IfEqCase*{\currentLetter}{%
67
% The lines below are the rules. Obviously more could be added.
68
{a}{{\uppercase{\relscale{0.75}a}}}%
69
{b}{{\uppercase{\relscale{0.75}b}}}%
70
{c}{{\uppercase{\relscale{0.75}c}}}%
71
{d}{{\uppercase{\relscale{0.75}d}}}%
72
{e}{{\uppercase{\relscale{0.75}e}}}%
73
{f}{{\uppercase{\relscale{0.75}f}}}%
74
{g}{{\uppercase{\relscale{0.75}g}}}%
75
{h}{{\uppercase{\relscale{0.75}h}}}%
76
{i}{{\uppercase{\relscale{0.75}i}}}%
77
{j}{{\uppercase{\relscale{0.75}j}}}%
78
{k}{{\uppercase{\relscale{0.75}k}}}%
79
{l}{{\uppercase{\relscale{0.75}l}}}%
80
{m}{{\uppercase{\relscale{0.75}m}}}%
81
{n}{{\uppercase{\relscale{0.75}n}}}%
82
{o}{{\uppercase{\relscale{0.75}o}}}%
83
{p}{{\uppercase{\relscale{0.75}p}}}%
84
{q}{{\uppercase{\relscale{0.75}q}}}%
85
{r}{{\uppercase{\relscale{0.75}r}}}%
86
{s}{{\uppercase{\relscale{0.75}s}}}%
87
{t}{{\uppercase{\relscale{0.75}t}}}%
88
{u}{{\uppercase{\relscale{0.75}u}}}%
89
{v}{{\uppercase{\relscale{0.75}v}}}%
90
{w}{{\uppercase{\relscale{0.75}w}}}%
91
{x}{{\uppercase{\relscale{0.75}x}}}%
92
{y}{{\uppercase{\relscale{0.75}y}}}%
93
{z}{{\uppercase{\relscale{0.75}z}}}%
94
{å}{{\uppercase{\relscale{0.75}å}}}%
95
{ä}{{\uppercase{\relscale{0.75}ä}}}%
96
{ö}{{\uppercase{\relscale{0.75}ö}}}%
97
{ü}{{\uppercase{\relscale{0.75}ü}}}%
99
% if our \currentLetter isn’t any of the letters we have rules for,
100
% then just output it now