
Entsprechenddie brillante Antwort auf diese Fragees ist möglich zu prüfen, ob Kapitälchen verfügbar sind oder nicht. Wenn ich jedoch versuche, diesen Code tatsächlich zu verwenden, erhalte ich ein seltsames Ergebnis: Wenn die Schriftformnicht definiertfunktioniert der Ersatz wie erwartet. Wenn die SchriftformNicht verfügbarDer Test sagt, dass die Schriftform verfügbar ist, aber Latex verwendet stattdessen einen Ersatz.
Gibt es eine Möglichkeit, \fakedsc
anstelle der Antiqua-Version Kapitälchen zu verwenden, die normal sind und keine Serifen haben?
Im folgenden Code können Sie sehen, dass Kapitälchen ersetzt werden, wenn T1/lmr/bx/sc
und T1/lmss/bx/sc
verwendet werden (beidenicht definiert), jedoch nicht, wenn T1/lmss/m/sc
verwendet wird (Nicht verfügbar):
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{relsize}
\usepackage{etoolbox}
\newcommand{\fakedsc}[3][1]{#2\begingroup\smaller[#1]{\MakeUppercase{#3}}\endgroup}
\makeatletter
\def\define@newfont{%
\begingroup
\let\typeout\@font@info
\escapechar\m@ne
\expandafter\expandafter\expandafter
\split@name\expandafter\string\font@name\@nil
\try@load@fontshape % try always
\expandafter\ifx
\csname\curr@fontshape\endcsname \relax
\expandafter\gdef\csname \curr@fontshape/sub\endcsname{}% new
\wrong@fontshape\else
\extract@font\fi
\endgroup}
\newcommand\testsc[3][1]{%
\ifcsname \f@encoding/\f@family/\f@series/sc/sub\endcsname
no \fakedsc[#1]{#2}{#3}
\else
\ifcsname \f@encoding/\f@family/\f@series/sc\endcsname yes \textsc{#2#3} \else no \fakedsc[#1]{#2}{#3} \fi
\fi
}
\makeatother
\begin{document}
\detokenize{\rmfamily} \textsc{Test} -- \testsc{T}{ested} -- without \fakedsc{T}{est} => test successful, no replacement
{\bfseries
\detokenize{\rmfamily} \textsc{Test} -- \testsc{T}{ested} -- without \fakedsc{T}{est}} => test successful, replaced
\sffamily
\detokenize{\sffamily} \textsc{Test} -- \testsc{T}{ested} -- without \fakedsc{T}{est} => test \textbf{not successful}, auto replacement
{\bfseries
\detokenize{\sffamily} \textsc{Test} -- \testsc{T}{ested} -- without \fakedsc{T}{est}} => test successful, replaced
\end{document}
Die Ergebnisse werden hier angezeigt:
BEARBEITEN:Ich fand etwas Hilfreiches in dersource2e-DokumentationOben auf Seite 166 heißt es:
Wenn die Kombination \curr@fontshape nicht verfügbar ist (also nicht definiert ist), rufen wir das Makro \wrong@fontshape auf, um diesen Fall zu berücksichtigen. Andernfalls lädt \extract@font die externe Schriftart für uns.
341 % \expandafter\ifx
342 % \csname\curr@fontshape\endcsname \relax
343 \try@load@fontshape % immer versuchen
344 % \fi
345 \expandafter\ifx
346 \csname\curr@fontshape\endcsname \relax
347 \falsch@Schriftform\sonst
Um eine Ersetzung zu ermöglichen, rufen wir das Makro curr@fontshape auf, das normalerweise zu \relax erweitert wird, aber auch Code zur Ersetzung enthalten kann (siehe Definition von \subst@fontshape).
348 % \csname\curr@fontshape\endcsname
349 \extract@font\fi
Wir sind fast fertig und müssen nur noch \escapechar wiederherstellen, indem wir die Gruppe schließen.
350 \Ende der Gruppe}
... also lautet das Zauberwortnicht definiert, also eine Lösung für eine Schriftform, dieNicht verfügbar(ist laut den LaTeX-Warnungen immer noch erforderlich).
EDIT2:
Soweit ich weiß, \testsc
werden bei Tests auf eine Substitution (die zur Warnung "Schriftform T1/lmr/bx/sc
undefiniert (Schriftart) T1/lmr/bx/n
stattdessen verwenden", wenn \textsc
verwendet wird). Dann wird geprüft, ob die Schriftform vorhanden ist. Aus bestimmten Gründen ist dieser Test für positiv, T1/lmss/m/sc
obwohl, wenn \textsc
er die Warnung "Schriftform T1/lmss/m/sc
in Größe <10.95> nicht verfügbar(Schriftart) Schriftform T1/lmr/m/sc
stattdessen versucht".Ist für diesen Fall ein zusätzlicher Test erforderlich? Im Gegensatz zur ersten Warnung konnte ich nicht herausfinden, wie diese Warnung zustande kommt. Eine Definition dieser Warnung fand ich auf Seite 64 desAnleitung zur Schriftartinstallation. Es sieht so aus, als ob die Familie vor dem Testen geändert wird, aber nur in diesem Fall.
EDIT3:
Ich habe mir die „Nicht verfügbar" Warnung. Es stellt sich heraus, dass dies erzeugt wird durcht1lmss.fd(zu finden in MiKTeX 2.9/tex/latex/lm). Neben anderen Ersetzungen wird Folgendes deklariert:
\DeclareFontShape{T1}{lmss}{m}{sc}
{<->sub*lmr/m/sc}{}
Durch Hinzufügen des folgenden Codes zur Präambel konnte ich die Ersetzung in die normale Form der serifenlosen Schriftart ändern.
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{lmodern} \sffamily\selectfont
\usepackage[T1]{fontenc}
\usepackage{relsize}
\usepackage{etoolbox}
\DeclareFontShape{T1}{lmss}{m}{sc}
{<->sub*lmss/m/n}{}
\normalfont
...
Ist es möglich, auch für diese Art der Substitution einen Test durchzuführen oder sie „aufzuheben“?ohne mit der .fd-Datei herumzuspielen?
Haftungsausschluss: Ich bin mir der Probleme bewusst, die bei der Vortäuschung von Kapitälchen auftreten, aber die Verwendung einer anderen Schriftart ist für mich keine Lösung.
Antwort1
Der letzte Schritt nachBEARBEITEN3war eigentlich ganz einfach: Kopieren Sie den Code aus demt1lmss.fdund löschen Sie den unerwünschten Code in der Tex-Datei selbst. Dadurch wird die Deklaration der Schriftform überschrieben, während die ursprüngliche FD-Datei intakt bleibt. Die vollständige Tex-Datei sieht wie folgt aus:
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{lmodern} %\sffamily\selectfont % (not needed if the whole fd file is inserted, which uses \DeclareFontFamily{T1}{lmss}{})
\usepackage[T1]{fontenc}
\usepackage{relsize}
\usepackage{etoolbox}
%%% taken from the .fd file (MiKTeX 2.9\tex\latex\lm\t1lmss.fd) -- this overrides the definitions in the fd file while leaving the original file untouched
\DeclareFontFamily{T1}{lmss}{}
\DeclareFontShape{T1}{lmss}{m}{n}
{<-8.5> ec-lmss8
<8.5-9.5> ec-lmss9 <9.5-11> ec-lmss10
<11-15.5> ec-lmss12 <15.5-> ec-lmss17
}{}
\DeclareFontShape{T1}{lmss}{m}{it}
{<->ssub*lmss/m/sl}{}
\DeclareFontShape{T1}{lmss}{m}{sl}
{<-8.5> ec-lmsso8
<8.5-9.5> ec-lmsso9 <9.5-11> ec-lmsso10
<11-15.5> ec-lmsso12 <15.5-> ec-lmsso17
}{}
%%%%%%% Font/shape undefined, therefore substituted
%\DeclareFontShape{T1}{lmss}{m}{sc} % <-- deleted
%{<->sub*lmr/m/sc}{} % <-- deleted
\DeclareFontShape{T1}{lmss}{b}{n}
{<->ssub * lmss/bx/n}{}
\DeclareFontShape{T1}{lmss}{b}{sl}
{<->ssub * lmss/bx/sl}{}
\DeclareFontShape{T1}{lmss}{b}{it}
{<->ssub * lmss/bx/it}{}
%%%%%%%% semibold condensed series
\DeclareFontShape{T1}{lmss}{sbc}{n}
{<-> ec-lmssdc10}{}
\DeclareFontShape{T1}{lmss}{sbc}{sl}
{<-> ec-lmssdo10}{}
\DeclareFontShape{T1}{lmss}{sbc}{it}
{<->ssub*lmss/sbc/sl}{}
%%%%%%%%% bold extended series
\DeclareFontShape{T1}{lmss}{bx}{n}
{<-> ec-lmssbx10}{}
\DeclareFontShape{T1}{lmss}{bx}{sl}
{<-> ec-lmssbo10}{}
\DeclareFontShape{T1}{lmss}{bx}{it}
{<->ssub*lmss/bx/sl}{}
%%% end of fd file
\normalfont
\newcommand{\fakedsc}[3][1]{#2\begingroup\smaller[#1]{\MakeUppercase{#3}}\endgroup}
\makeatletter
\def\define@newfont{%
\begingroup
\let\typeout\@font@info
\escapechar\m@ne
\expandafter\expandafter\expandafter
\split@name\expandafter\string\font@name\@nil
\try@load@fontshape % try always
\expandafter\ifx
\csname\curr@fontshape\endcsname \relax
\expandafter\gdef\csname \curr@fontshape/sub\endcsname{}% new
\wrong@fontshape\else
\extract@font\fi
\endgroup}
\newcommand\testsc[3][1]{%
\ifcsname \f@encoding/\f@family/\f@series/sc/sub\endcsname
no \fakedsc[#1]{#2}{#3}
\else
\ifcsname \f@encoding/\f@family/\f@series/sc\endcsname yes \textsc{#2#3} \else no \fakedsc[#1]{#2}{#3} \fi
\fi
}
\makeatother
\begin{document}
\detokenize{\rmfamily} \textsc{Test} -- \testsc{T}{ested} -- without \fakedsc{T}{est} => test successful, no replacement
{\bfseries
\detokenize{\rmfamily} \textsc{Test} -- \testsc{T}{ested} -- without \fakedsc{T}{est}} => test successful, replaced
\sffamily
\detokenize{\sffamily} \textsc{Test} -- \testsc{T}{ested} -- without \fakedsc{T}{est} => test finally successful, \detokenize{\fakedsc} used!!!
{\bfseries
\detokenize{\sffamily} \textsc{Test} -- \testsc{T}{ested} -- without \fakedsc{T}{est}} => test successful, replaced
\end{document}
Wie Sie sehen können, \sffamily \textsc{Test}
gibt es jetzt eine Warnung, dass die Schriftform istunbestimmt:
Wenn jedoch alle \textsc{Test}
Teile gelöscht werden, werden keine Warnungen angezeigt. Vielleicht könnte man sogar warnen, dass falsche Kapitälchen verwendet werden, falls das gewünscht ist (bei mir ist es das nicht).
Noch besser: \sffamily \testsc{Tested}
keine GeschenkeNEINals Antwort (was bedeutet, dass die Schriftformnicht definiert) und \fakedsc
bestimmungsgemäße Verwendung:
Das war harte Arbeit, aber ich bin froh, dass ich es endlich herausgefunden habe. Wenn es eine sauberere Lösung gibt, würde ich mich freuen, davon zu erfahren.
Haftungsausschluss:
Benutzen Sie diese Lösung auf eigene Verantwortung und nur, wenn Sie mit denschrecklichErgebnisse.