【環境】
lualatex, MacBook
【目標・問題点】
英文の品詞分解マクロを作ろうと試み(画像の通り),¥ifthenelse, counter, ¥expandafterなどを用い試行錯誤しましたが,文字の高さ調節を自動化するところがうまくいきません(${}_n$だと,nの高さが直後の文字列に影響されないので使えません)。
最終的に以下のサイトにこぎつけたのですが,長さを測っているからかコンパイルが異常に遅いです。そこで,解決方法をご教示願い,質問を投稿させていただきます。よろしくお願いいたします。
http://www-an.acs.i.kyoto-u.ac.jp/~fujiwara/tex/subscripts.html
【ソース】
¥documentclass[a4paper,18pt]{ltjsarticle}
¥usepackage{luatexja}
¥usepackage{luatexja-fontspec}
¥usepackage{luatexja-otf}
¥usepackage[hiragino-pron,deluxe,expert,bold]{luatexja-preset}
¥usepackage{amsmath,xcolor}
¥makeatletter
¥newcommand{¥subscripts}[3]{%
¥@mathmeasure¥z@¥displaystyle{#2}%
¥global¥setbox¥@ne¥vbox to¥ht¥z@{}¥dp¥@ne¥dp¥z@
¥setbox¥tw@¥box¥@ne
¥@mathmeasure4¥displaystyle{¥copy¥tw@_{#1}}%
¥@mathmeasure6¥displaystyle{{#2}_{#3}}%
¥dimen@-¥wd6 ¥advance¥dimen@¥wd4 ¥advance¥dimen@¥wd¥z@
¥hbox to¥dimen@{}¥mathop{¥kern-¥dimen@¥box4¥box6}%
}
¥def¥@seibun#1#2%
{%
$%
¥subscripts%
{¥text{¥textcolor{black!50!white}{#1}}}%
{%
¥text%
{%
¥textcolor{black!50!white}%
{%
¥underline{¥vphantom{bp}¥textcolor{black}{#2}}}%
}%
}%
{}%
$%
}%
¥def¥S#1{¥@seibun{S}{#1}}%
¥def¥V#1{¥@seibun{V}{#1}}%
¥def¥O#1{¥@seibun{O}{#1}}%
¥def¥C#1{¥@seibun{C}{#1}}%
¥def¥M#1{¥@seibun{M}{#1}}%
¥def¥A#1{¥@seibun{A}{#1}}%
¥def¥kM#1{¥@seibun{¥ajKakkoAlph{13}}{#1}}%
¥makeatother
¥begin{document}
¥S{He} ¥V{w¥kM{as}} ¥S{あ¥S{い¥kM{うえ¥V{p¥S{お}g}}}}
¥end{document}
emath を用いる例です。
下線の左端に,下線記号とでもいったものを付与する機能を用います。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass{jlreq}
\usepackage[notMy]{emath}
\usepackage{emkasen}
\newbox\myboxi
\newbox\myboxii
\newbox\myboxiii
\newbox\myboxiv
\begin{document}
\kasenkigoufont{\scriptsize}%
\kasenkigoulcr{*}%
\kasenkigousep{-.45em}%
\def\kakko#1{\smash[b]{(#1)}}%
%\ulineposition{-4pt}%
%
\emkasen{He} %
%
\setbox\myboxi=\hbox{\emkasen*{as}}%
\emkasen*{w \copy\myboxi}%
%
\setbox\myboxi=\hbox{\emkasen*{お}}%
\setbox\myboxii=\hbox{\emkasen*{p \copy\myboxi\ g}}%
\setbox\myboxiii=\hbox{\emkasen*{うえ \copy\myboxii}}%
\setbox\myboxiv=\hbox{\emkasen*{い \copy\myboxiii}}%
\emkasen*{あ \copy\myboxiv}
\end{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
我田引水が過ぎましたか。
では,emath とは無関係の方法も。
amsmath に,演算子の
左上 右上
演算子
左下 右下
4か所に添え字を添付するコマンド \sideset があります。
それを用います(左下だけですが.....)。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass{jlreq}
\usepackage{amsmath}
\begin{document}
\ensuremath{\displaystyle
\sideset{_a}{}{\mathop{\underline{\mbox{AAA}{ }%
\sideset{_b}{}{\mathop{\underline{\mbox{BBB}{ }%
\sideset{_c}{}{\mathop{\underline{\mbox{CCC}{ }%
\sideset{_d}{}{\mathop{\underline{\mbox{DDD}{ }%
\sideset{_e}{}{\mathop{\underline{\mbox{EEE}{ }%
}}}\mbox{g}}}}}}}}}}}}}}
\end{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
下線の左端に,下線記号とでもいったものを付与する機能を用います。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass{jlreq}
\usepackage[notMy]{emath}
\usepackage{emkasen}
\newbox\myboxi
\newbox\myboxii
\newbox\myboxiii
\newbox\myboxiv
\begin{document}
\kasenkigoufont{\scriptsize}%
\kasenkigoulcr{*}%
\kasenkigousep{-.45em}%
\def\kakko#1{\smash[b]{(#1)}}%
%\ulineposition{-4pt}%
%
\emkasen{He} %
%
\setbox\myboxi=\hbox{\emkasen*{as}}%
\emkasen*{w \copy\myboxi}%
%
\setbox\myboxi=\hbox{\emkasen*{お}}%
\setbox\myboxii=\hbox{\emkasen*{p \copy\myboxi\ g}}%
\setbox\myboxiii=\hbox{\emkasen*{うえ \copy\myboxii}}%
\setbox\myboxiv=\hbox{\emkasen*{い \copy\myboxiii}}%
\emkasen*{あ \copy\myboxiv}
\end{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
我田引水が過ぎましたか。
では,emath とは無関係の方法も。
amsmath に,演算子の
左上 右上
演算子
左下 右下
4か所に添え字を添付するコマンド \sideset があります。
それを用います(左下だけですが.....)。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass{jlreq}
\usepackage{amsmath}
\begin{document}
\ensuremath{\displaystyle
\sideset{_a}{}{\mathop{\underline{\mbox{AAA}{ }%
\sideset{_b}{}{\mathop{\underline{\mbox{BBB}{ }%
\sideset{_c}{}{\mathop{\underline{\mbox{CCC}{ }%
\sideset{_d}{}{\mathop{\underline{\mbox{DDD}{ }%
\sideset{_e}{}{\mathop{\underline{\mbox{EEE}{ }%
}}}\mbox{g}}}}}}}}}}}}}}
\end{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
あ い さんがウェブサイトから拾ってきたマクロ自体、
大熊さんが紹介している \sideset を改造したもののようですね。
しかし あ い さんのマクロに使うだけならもっと簡略化できるようです。
もとの あ い さんのマクロを次のようにすると、
組版結果を変えずに動作だけが軽くなるようでした。
\newcommand{\subscripts}[3]{%
\@mathmeasure\z@\displaystyle{#2}%
\null\mathop{\displaystyle\mathord{\vrule width0pt depth\dp\z@}_{#1}\box\z@_{#3}}%
}
例では #3 も使っていないようなので、省いても良いのかもしれません。
大熊さんが紹介している \sideset を改造したもののようですね。
しかし あ い さんのマクロに使うだけならもっと簡略化できるようです。
もとの あ い さんのマクロを次のようにすると、
組版結果を変えずに動作だけが軽くなるようでした。
\newcommand{\subscripts}[3]{%
\@mathmeasure\z@\displaystyle{#2}%
\null\mathop{\displaystyle\mathord{\vrule width0pt depth\dp\z@}_{#1}\box\z@_{#3}}%
}
例では #3 も使っていないようなので、省いても良いのかもしれません。