在 LaTeX 中堆疊字元後標準化空格:排版 o͘

在 LaTeX 中堆疊字元後標準化空格:排版 o͘

我正在嘗試排版特點在 LaTeX 中,透過在字母頂部堆疊凸起的句點o。我所獲得的結果的間距不一致,如下面的螢幕截圖所示:

字距調整不好 o͘

請注意,該字元後面的空格比常規字元後面的空格要大o

雖然我可以嘗試手動調整間距,但我想要一個更通用的解決方案,該解決方案也不依賴包含特殊字元的字體。

這是一個 MWE:

\documentclass{article}

\newlength{\templen}
\newlength{\templentwo}

\newcommand{\oo}{%
  \settowidth{\templen}{o}%
  \settowidth{\templentwo}{.}%
  o\hspace{\dimexpr-\templen/2\relax}%
  \raisebox{1ex}{.}%
  \hspace{\dimexpr-\templentwo\relax}
}

\begin{document}

o\oo o \oo oo \oo\oo o ooo

\end{document}

更新

在提供的答案的幫助下,我得出了以下解決方案。為了將來參考,我包含了整個代碼,顯示了帶有其他變音符號的字元的排版。

\documentclass{article}

\usepackage{stackengine}
\usepackage{upquote}

\renewcommand{\.}[1]{\stackinset{c}{}{t}{-0.75ex}{\textquotesingle}{#1}}

\newcommand{\OX}{o\DOTABOVERIGHT{o}{0.6}\leavevmode\phantom{o}}
\DeclareRobustCommand{\DOTABOVERIGHT}[2]{%
  \kern-\fontcharwd\font`#1% back up
  \makebox[0pt][l]{%
    \sbox0{\leavevmode\phantom{#1}}%
    \raisebox{\ht0}[0pt][0pt]{\kern#2\wd0 .}%
  }%
}

\newcommand{\OO}[1]{\stackinset{r}{}{t}{-1.5pt}{.}{#1}}



\begin{document}

So-i goan u siat pat-mih e hoat-to, eng peh-oe-ji lai in-chheh, ho lin cheng-lang khoa\textsuperscript{n} khah khoai bat.

S\OO{\'{o}}-\'{i} g\'{o}an \={u} siat p\.{a}t-mih \^{e} hoat-t\OO{\={o}}, \={e}ng p\.{e}h-\={o}e-j\={i} l\^{a}i \`{i}n-chheh, h\OO{\={o}} l\'{i}n ch\`{e}ng-l\^{a}ng kh\`{o}a\textsuperscript{n} khah kh\`{o}ai bat.

S\'{\OX}-\'{i} g\'{o}an \={u} siat p\.{a}t-mih \^{e} hoat-t\={\OX}, \={e}ng p\.{e}h-\={o}e-j\={i} l\^{a}i \`{i}n-chheh, h\={\OX} l\'{i}n ch\`{e}ng-l\^{a}ng kh\`{o}a\textsuperscript{n} khah kh\`{o}ai bat.

Thai-khong peng-iu, lin-ho. Lin chiah-pa--be? U-eng, toh lai gun chia che--o!

Th\`{a}i-khong p\^{e}ng-i\'{u}, l\'{i}n-h\'{o}. L\'{i}n chi\.{a}h-p\'{a}--b\={e}? \={U}-\^{e}ng, t\.{o}h l\^{a}i g\'{u}n chia ch\={e}--\OO{\^{o}}!

Th\`{a}i-khong p\^{e}ng-i\'{u}, l\'{i}n-h\'{o}. L\'{i}n chi\.{a}h-p\'{a}--b\={e}? \={U}-\^{e}ng, t\.{o}h l\^{a}i g\'{u}n chia ch\={e}--\^{\OX}!


\end{document}

這是排版文字的圖像:

正確調整字距 o͘

我個人更喜歡該\OX版本,其中變音符號正確地出現在.

答案1

如果要保留字母之間的自動字距調整,則需要列印「o」兩次,將它們疊加,但在中間添加一個凸起的點。

\documentclass{article}

\newcommand{\oo}{o\DOTABOVERIGHT{o}{0.6}o}
\DeclareRobustCommand{\DOTABOVERIGHT}[2]{%
  \kern-\fontcharwd\font`#1% back up
  \makebox[0pt][l]{%
    \sbox0{#1}%
    \raisebox{\ht0}[0pt][0pt]{\kern#2\wd0 .}%
  }%
}

\begin{document}

o\oo o \oo oo \oo\oo o ooo

ooo  ooo ooo ooo

\end{document}

\DOTABOVERIGHT指令採用兩個參數:應套用點的字母和偏移量(作為字母寬度的分數)。

在此輸入影像描述

答案2

如果我很好地理解你想要什麼,這裡有一個使用 \stackinset 命令的解決方案stackengine

\documentclass{article}

\usepackage{stackengine}

\newcommand{\Oo}{\stackinset{r}{}{t}{-1.5pt}{.}{o}}

\begin{document}

o\Oo o \Oo oo \Oo\Oo o ooo

\end{document}

在此輸入影像描述

相關內容