uplatexでLatin Small Letter H with Breve Belowを使いたい

uplatexでLatin Small Letter H with Breve Belowを使いたい

- kondo yuzo の投稿
返信数: 10
現在以下のような設定ですが、上記のU+1E2Bなどが使用できません
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage[utf8]{inputenc}
%\usepackage[utf8x]{inputenc}
\usepackage[prefernoncjk]{pxcjkcat}
\usepackage{extaccent,DeclareUnicode}
\usepackage[schinese,japanese]{pxbabel}

設定方法などについてご教示をおねがいします
pdfになればいいのでコマンドで表記する方法でもかまいません
kondo yuzo への返信

Re: uplatexでLatin Small Letter H with Breve Belowを使いたい

- 和田 勇 の投稿
不得手な問題ですが&「 ḫ」だけですが、
semtrans.sty でとりあえずは出力可能です。
(「Breve Below LaTeX」で検索してみました)

UNICODE 直でのご希望でしたら、また考えてみます。
( uplatex でなく lualatex でしたらUNICODE 直でも容易に可能です)


なお semtrans.sty を見ると以下のようなコマンドがあるとのこと。

  % The following commands are defined:
  % \Alif, \Ayn left and right half ring
  % \U breve below (e. g. \U h)
  % \D diaeresis below (e. g. \D d: Oromo retroflex d)
  % \T turn a letter (e. g. \T e: schwa)
  % For the turning of letters, the package fraphicx is required.

以下を保存し 「ptex2pdf -l ファイル名」か「llmk ファイル名」で
pdf 作成可能です。

%#! ptex2pdf -l -u
\documentclass[uplatex]{jlreq}

% 直接は関係はないが 参考にしたページ
% https://tex.stackexchange.com/questions/371759/breve-under-letter-is-not-in-italics-when-using-textit
% breve under letter is not in italics when using \textit

\usepackage{semtrans}
\begin{document}

ラテン語の小文字Hとその下のブレーベ \dotfill \U{h}
\end{document}
和田 勇 への返信

Re: uplatexでLatin Small Letter H with Breve Belowを使いたい

- kondo yuzo の投稿
ご教示ありがとうございます
原因は不明で、私の何かの勘違いかもしれませんが
intel Macの場合、上記の方法でうまくいきます
M1 Macではなぜかエラーがでるようです
他の方法でうまく行っていますので急場を凌ぐことはできております
kondo yuzo への返信

Re: uplatexでLatin Small Letter H with Breve Belowを使いたい

- 和田 勇 の投稿
おそらく、tlmgr update --self --all すると解決しそうな気がするのですが、
とりあえず intel Mac vs M1 Mac で記録された .log ファイルの diff を比較してみてください。
もし、原因不明なら、両方のファイルを添付ファイルでアップロードしてください。
kondo yuzo への返信

Re: uplatexでLatin Small Letter H with Breve Belowを使いたい

- ut の投稿
私の手元のシステムは W32TeX [2020/07/19] と古いので、最近の
システムでも同じ結果になるのかどうか分からないのですけれど、
以下のようにしてみましたら、一応出力は出来ました。
(でも、Latin Modern には当該グリフがあるはずなのですが、この
方法だと単一のグリフではなくて、合成グリフになるみたいです…)

\documentclass[uplatex,dvipdfmx]{jsarticle}
\usepackage{lmodern}
\usepackage{ucs}
\usepackage[utf8x]{inputenc}

\begin{document}

\unichar{7723}
\textit{\unichar{7723}}
\textbf{\unichar{7723}}
\textit{\bfseries\unichar{7723}}

\end{document}

添付 hbrevebelow.jpg
ut への返信

Re: uplatexでLatin Small Letter H with Breve Belowを使いたい

- ut の投稿
6 時間前の自分が何を考えていたのか、今となっては我ながら謎で
しかないのですが、10 進に直す必要なんてなくて、TeX の convention
通り、" を前置すれば:

  \unichar{"1E2B}

のように、16 進のままで大丈夫でした… orz。
ut への返信

Re: uplatexでLatin Small Letter H with Breve Belowを使いたい

- ut の投稿
先日の投稿で:

> Latin Modern には当該グリフがあるはずなのですが、

と書きましたが、その後、lmr10.afm を覗いてみましたら:

  C -1 ; WX 555.55556 ; N hbrevebelow ; B 32 -233 535 694 ;

という行がありました。

ちゃんと PostScript 名が入っていたので、それなら、enc にこの
名前を書いて tfm を作ったら、合成じゃない当該グリフにもアク
セスできるんじゃないかと思ってやってみましたら、無事うまく
いきました。

でも、実際に必要なグリフは U+1E2B 一文字だけではないでしょう
から、256 文字の軛の中で悪戦苦闘するよりも、XeTeX や LuaTeX
を使ったほうがいいんだろうな、とも思います。

添付 real_hbrevebelow.jpg
ut への返信

Re: uplatexでLatin Small Letter H with Breve Belowを使いたい

- kondo yuzo の投稿
貴重な情報ありがとうございます

私の環境では「utf8x」が通らないので「utf8」にしたら、同じ結果を得ることができました
報告が遅れてもうしわけありません
kondo yuzo への返信

Re: uplatexでLatin Small Letter H with Breve Belowを使いたい

- ut の投稿
# 結局、合成グリフにはなってしまいますが。

https://tex.stackexchange.com/questions/371759/breve-under-letter-is-not-in-italics-when-using-textit
というページを見てみました。

元々、plain.tex では以下のような "bar-under accent" というコ
マンドが定義されていました:

\def\b#1{{\o@lign{\relax#1\crcr\hidewidth\sh@ft{-3ex}%
    \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}}

それで、semtrans.sty [1998/02/10 v 1.0] では、これを模して:

\newcommand*\U[1]{\oalign{#1\crcr\hidewidth
  \vbox to .2ex{\hbox{\u{}}\vss}\hidewidth}}

というコマンドを定義しているようです。

ところが、両者を比べてみますと、\b に含まれている \sh@ft{-3ex}
に相当する部分が semtrans.sty の \U にはありません。

そのせいで、semtrans.sty で \textit{\U{h}} とすると、breve が
ズレてしまうのでどうしたらよいか、というのが質問の趣旨のよう
です。

対処法としては、元々 plain.tex でもそうしているように \sh@ft
を使って補正をすればよいわけですが、LaTeX では plain.tex とは
違う実装の \sh@ft を定義していて、更には、LaTeX 版の \sh@ft
である \ltx@sh@ft も用意されているので、それを使えばよい、と
いう回答がなされています。

LaTeX での \b の定義は:

ot1enc.def:

\DeclareTextCommand{\b}{OT1}[1]
  {\hmode@bgroup\o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-3ex}%
    \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}\egroup}

t1enc.def:

\DeclareTextCommand{\b}{T1}[1]
  {\hmode@bgroup\o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-3ex}%
    \vbox to.2ex{\hbox{\char9}\vss}\hidewidth}\egroup}

なので、これらに倣って、\U の定義としては、例えばデフォルトの
OT1 の場合であれば:

\makeatletter
\DeclareTextCommand{\U}{OT1}[1]
  {\hmode@bgroup\o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-3ex}%
  \vbox to.2ex{\hbox{\u{}}\vss}\hidewidth}\egroup}
\makeatother

とすればよい、というのが結論のようです。
(もちろん、"The simplest way these days is probably to use
xelatex or lualatex." とも回答されていますが)


\documentclass[uplatex,dvipdfmx]{jsarticle}
\usepackage[T1]{fontenc}
\usepackage{lmodern}

\makeatletter
\DeclareTextCommand{\U}{T1}[1]
  {\hmode@bgroup\o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-3ex}%
  \vbox to.2ex{\hbox{\u{}}\vss}\hidewidth}\egroup}
\makeatother

\begin{document}

\U{h}
\textit{\U{h}}
\textbf{\U{h}}
\textit{\bfseries\U{h}}

\end{document}
ut への返信

Re: uplatexでLatin Small Letter H with Breve Belowを使いたい

- ut の投稿
# 実務的にはまったくもってどうでもいい訂正です。

上の投稿では:

  plain.tex (\b) ---> semtrans.sty (\U)

とか適当なことを書いてしまいましたが、もうちょっとちゃんと確認
してみましたら、実際のところは:

  plain.tex (\b) ---> lplain.tex (\b) ---> exotex.tex (\U) ---> semtrans.sty (\U)

という流れだったみたいです…。

------------------------------------------------------------
(1) plain.tex [1978?/1982?--]

\def\b#1{{\o@lign{\relax#1\crcr\hidewidth\sh@ft{-3ex}%
    \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}}

------------------------------------------------------------
(2) LaTeX2.09: lplain.tex [1985?--1992]

\def\pb#1{\oalign{#1\crcr\hidewidth
    \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}
\def\b{\protect\pb}

------------------------------------------------------------
(3) exotex.tex [1988]

%  Input-File EXOTEX.TEX (V 0.4) (c) Peter J. Olivier, Frankfurt 1988
%  Letzte Aenderung: 8.8.88  (OL)    (auf Atari ST)

\def\U#1{\oalign{#1\crcr\hidewidth
  \kern-.4em \vbox to .2ex{\hbox{\char'25}\vss}\hidewidth}}

------------------------------------------------------------
(4) LaTeX2e: ltoutenc.dtx [1993--]

\DeclareTextCommand{\b}{OT1}[1]
  {\hmode@bgroup\o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-3ex}%
    \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}\egroup}

\DeclareTextCommand{\b}{T1}[1]
  {\hmode@bgroup\o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-3ex}%
    \vbox to.2ex{\hbox{\char9}\vss}\hidewidth}\egroup}

------------------------------------------------------------
(5) semtrans.sty [1997]

% (\textcopyleft) Copyleft 1997 J"org Knappen

% Alif, Ayn and \U are from the exotex package by Peter S. Olivier
% 1988/08/08
% Definitions translated into LaTeX2e by JK

\newcommand*\U[1]{\oalign{#1\crcr\hidewidth
  \vbox to .2ex{\hbox{\u{}}\vss}\hidewidth}}

------------------------------------------------------------
(\U を定義するに当たって、plain.tex の \b の定義にあった
\o@lign を \oalign に変えたり、\relax や \sh@ft{-3ex} を削っ
たりしているのは、私はてっきり semtrans.sty(や exotex.tex)
がやったことだろうと思ってしまったのですが、どうもこれ
らは 2.09 による変更を踏襲したに過ぎないのであって、他方、
2e の側では plain.tex 相当の定義に戻した、ということのよう
に見えます)
ut への返信

Re: uplatexでLatin Small Letter H with Breve Belowを使いたい

- ut の投稿
# 悪い癖が出て、独り相撲を始めてしまいました…。

今朝の投稿の plain.tex の \b の定義は、現在の定義であって、元々
は \sh@ft 等が使われていたわけではなかったようです。

つまり、「LaTeX2.09 が \sh@ft 等を削った」というのは間違いで
した… orz。

ざっと確認できた限りでは、LaTeX2.09 の頃の plain.tex の \b の
定義では、\o@lign や \sh@ft は使われてなかったみたいです:

------------------------------------------------------------
LaTeX0.97: lplain.tex [1983/05/12]

\def\b#1{\vtop{\baselineskip0pt\lineskip.25ex
    \halign{##\crcr#1\crcr\hidewidth
      \vbox to .2ex{\hbox{\char'22}\vss}\hidewidth\crcr}}}

------------------------------------------------------------
LaTeX0.9999: lplain.tex [1983/07/29]

\def\b#1{\oalign{#1\crcr\hidewidth
    \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}

------------------------------------------------------------
LaTeX0.99999: lplain.tex [1983/09/03]

\def\b#1{\oalign{#1\crcr\hidewidth
    \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}

------------------------------------------------------------
LaTeX0.999999: lplain.tex [1983/10/05]

\def\b#1{\oalign{#1\crcr\hidewidth
    \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}

------------------------------------------------------------
LaTeX1.0: lplain.tex [1983/11/10]

\def\b#1{\oalign{#1\crcr\hidewidth
    \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}

------------------------------------------------------------
texman.tex [1987/10/30]

\def\b#1{\oalign{#1\crcr\hidewidth
    \vbox to.2ex{\hbox{\char'26}\vss}\hidewidth}}

------------------------------------------------------------
LaTeX2.09: lplain.tex [1992/03/25]

\def\pb#1{\oalign{#1\crcr\hidewidth
    \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}
\def\b{\protect\pb}

------------------------------------------------------------
plain.tex [1995/03/09]

\def\b#1{{\o@lign{\relax#1\crcr\hidewidth\sh@ft{29}%
    \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}}

------------------------------------------------------------
plain.tex [1998/08/12]

\def\b#1{{\o@lign{\relax#1\crcr\hidewidth\sh@ft{-3ex}%
    \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}}

------------------------------------------------------------