
17 世紀スペイン帝国の音楽の現代版を作成するために、原稿資料にある特定の古い略語をタイプセットする必要があります。この慣例により、単語の中央部分が省略され、末尾がピリオドの中央に配置されます。例:
興味深いことに、これは「アル・サンティッシモ [サクラメント]. a 8」と展開され、この曲が聖体礼儀に捧げられ(したがって聖体拝領または聖体礼拝に使用され)、8声部用に作曲されていることを意味します。
MWE のコマンドは を使用してこれを行います\rlap
が、末尾はピリオドと左揃えになります。斜体を使用する場合 (少なくとも を使用する場合ebgaramond
)、末尾が前の文字と衝突します。
ローマン体とイタリック体の両方で、末尾が衝突することなくピリオドの中央に配置されるように、これをより適切に配置するにはどうすればよいですか?
\documentclass[12pt]{article}
\usepackage{ebgaramond}
\usepackage[T1]{fontenc}
\newcommand{\oldabbrev}[2]{#1\rlap{.}\textsuperscript{#2}}
\begin{document}
\oldabbrev{M}{o} Salazar, \oldabbrev{Villan}{co} al \oldabbrev{SS}{mo} a 8
\itshape
\oldabbrev{M}{o} Salazar, \oldabbrev{Villan}{co} al \oldabbrev{SS}{mo} a 8
\end{document}
答え1
クレジット:ジョセフ現在使用されているテキスト「モード」(通常、斜体、太字など)を検出します。イタリック体かどうかを判断するのに役立ちます。イタリック体の場合は、イタリック体と見た目が一致するように、オーバースクリプトに追加のカーニングが適用されます (下のドットを基準として)。
OP の図に示されているように、オーバースクリプトの最初の文字の下にドットを中央に配置することを選択したことに注意してください。
\documentclass[12pt]{article}
\usepackage{ebgaramond}
\usepackage[T1]{fontenc}
\usepackage{stackengine}
\makeatletter
\newcommand*{\IfItalicTF}{%
\ifx\f@shape\my@test@it
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
}
\newcommand*{\my@test@it}{it}
\makeatother
\newcommand\oldabbrev[2]{#1\nobreak%
\def\stacktype{L}\setstackgap{L}{.5\baselineskip}\oldabbhelp#2\relax\relax}
\def\oldabbhelp#1#2\relax{\bgroup\scriptsize%
\stackon{\normalsize.}{\IfItalicTF{\kern1.5pt}{}#1}\stackon{}{#2}\egroup}
\begin{document}
\oldabbrev{M}{o} Salazar, \oldabbrev{Villan}{co} al \oldabbrev{SS}{mo} a 8
\itshape
\oldabbrev{M}{o} Salazar, \oldabbrev{Villan}{co} al \oldabbrev{SS}{mo} a 8
\end{document}
もし本当にその下の点が欲しかったら中心オーバースクリプトのこの単純な再定義
\def\oldabbhelp#1\relax{\bgroup\scriptsize%
\stackon{\normalsize.}{\IfItalicTF{\kern1.5pt}{}#1}\egroup}
次のような効果があります:
答え2
センタリングは簡単です。衝突は によって解決されます\/
。
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{ebgaramond}
\newcommand{\oa}[1]{%
\/{\ooalign{\textsuperscript{#1}\cr\hidewidth.\hidewidth\cr}}%
}
\begin{document}
M\oa{o} Salazar, Villan\oa{co} al SS\oa{mo} a 8
{\itshape
M\oa{o} Salazar, Villan\oa{co} al SS\oa{mo} a 8}
\end{document}
ただし、それが良いかどうかはわかりません。
答え3
私は、Steven B. Segletes のソリューションに、文脈上の歴史的な S を持つフォント (残念ながら EBGaramond にはない) と、ベースライン上にない中央のドットを使用する小さなバリエーションを提案せずにはいられませんでした。これは、またはでコンパイルされxelatex
ますlualatex
。
\documentclass[12pt]{article}
\usepackage{stackengine}
\usepackage{fontspec}
\setmainfont{Sabon Next LT Pro}
\newcommand{\myoldabbrev}[2]{#1\textsuperscript{\smash{\stackunder[0.5ex]{#2}{\normalsize.}}}}%
\begin{document}
\upshape \myoldabbrev{M}{o} Salazar, \myoldabbrev{Villan}{co} al \myoldabbrev{SS}{mo} a 8
\addfontfeature{StylisticSet={2, 4,5}, Ligatures=Historic}
\itshape
\myoldabbrev{M}{o} Salazar, \myoldabbrev{Villan}{co} al \myoldabbrev{SS}{mo} 8
\myoldabbrev{M}{o} Salazar, \myoldabbrev{Villan}{co} al \myoldabbrev{\char"017F\char"017F\kern0.25em}{mo} 8
\end{document}
答え4
はい、確かに可能です。次のことを試してください。
\documentclass{article}
\thispagestyle{empty}
\newlength{\dotcenterwd}
\def\dotcenter#1{%
\settowidth{\dotcenterwd}{\textsuperscript{#1}}%
\hbox to\dotcenterwd{\textsuperscript{#1}}%
\kern-\dotcenterwd%
\hbox to\dotcenterwd{\hfil.\hfil}%
}%
\begin{document}
\Huge
M\dotcenter{o}
\textit{M\dotcenter{o}}
M\dotcenter{co}
\textit{M\dotcenter{co}}
SS\dotcenter{mo}
\textit{SS\dotcenter{mo}}
\end{document}
これで、あなたが望んでいるものが得られるはずです:
この解決策にはいくつか問題があります。つまり、文字固有のカーニングが関係していないということです。実際、上付き文字の「m」は左側の文字に近すぎますが、それを修正すると「o」がそれらから離れすぎてしまいます。この問題をどう解決すればよいのかわかりません。
これもフォントに依存しない必要があることに注意してください。これで目的は達成されますか?