%表題   GRPH1 基本グラフィックルーチンライブラリ
%
%履歴
%\Drireki{
%         90/03/22 塩谷雅人
%         91/09/05 林祥介
%         91/12/11 塩谷雅人
%         92/02/07 塩谷雅人
%         92/04/22 林祥介   (4.1版)
%         94/04/04 塩谷雅人
%        }
%
\section{サブルーチンの説明 : テキストプリミティブ}
\label{sgpack.text}

文字列の図形出力(text primitive)に関するサブルーチン群.
% 使用例については\ref{sg.sgtxv}, \ref{sg.sgtxu}, \ref{sg.greek}節参照.

\vspace{1em}
GRPH1では2種類のストロークフォントが使用できる.また,システムにインストールされた
システムフォントも使用出来る．
ストロークフォントはフォント番号として内部変数{\tt 'IFONT'}を指定することによって選択できる
(初期値は1).
\ref{sgpack.cntl.sgpget}節, およびフォントテーブル
(\ref{append.table.sgfont1}, \ref{append.table.sgfont2}節)参照.

\vspace{1em}
普通, キーボードにある文字はそのまま表示される.
キーボードにない文字, あるいはキーボードにあっても正しく表現されない文字は,
関数副プログラム{\tt CSGI} (\ref{sgpack.csgi.csgi}節参照)の引数として
フォントテーブルに示してある番号(DCL文字番号)
を与えることによって描くことができる.
詳しくは, \ref{sgpack.csgi}節を参照のこと.
また,システムフォントでは{\tt UTF-8}で,直接多バイト文字を使用することが出来る．
システムフォントにあれば多言語も混在可能であるが,下位で利用している{\tt pango}
の実装によっては,代替フォントが利用出来ないことがある．

\vspace{1em}
簡単なマークアップによって、上付および下付添え字を描くことができる.
\begin{quote}
  $ {\rm (X_{i})^{2} } $
\end{quote}
と描くためには
\begin{quote}
  {\tt '(X\textbackslash \_i)\textbackslash  \textasciicircum 2'}
\end{quote}
と書けばいい.

その他の記述法もまとめると
{\tt \textbackslash \_}で下付添え字, {\tt \textbackslash \textasciicircum}で上付添え字を指定する．
これらに続けて{\tt \textbackslash \_\{x=1\}}のよう中括弧でくるむことで,複数文字を
まとめて添え字にすることが出来る．また,簡便な上下へのアクセント追加が用意されている．
{\tt \textbackslash o-} のようにすれば, 上線が引かれる．下線は{\tt \textbackslash u-}である．
{\tt -}の部分は何を載せてもかまわないし, 中括弧でくるむことも可能だが, 平たい記号を
アクセントで載せることを想定したものであり,簡便な実装になっているので, フォントによっては
思ったようにならないこともあるので、確認しながら
使用されたい．また, {\tt \textbackslash  }自体を表示させるときには,
 {\tt \textbackslash  }を前につけ, エスケープする．

\vspace{1em}
以下の方法は古い指定方法であり、互換性のために残されているが、DCL8までには廃止される予定である.
また、システムフォントを利用するときには、利用できない.

\vspace{1em}
内部変数{\tt 'LCNTL'}が{\tt .TRUE.}なら,
制御文字を有効として上付および下付添え字を描くことができる
(\ref{sgpack.cntl.sgpget}節参照).
たとえば, 制御文字の文字番号が\ref{sgpack.cntl.sgpget}節で設定してある
値のとき,
\begin{quote}
  $ {\rm (X_{i})^{2} } $
\end{quote}
と描くためには
\begin{quote}
  {\tt '(X\_i")|2"'}
\end{quote}
と指定すればよい
(いちばん最後の上付および下付添え字のモードの終わりをしめす制御文字は
省略できない).
制御文字の指定方法が妥当かどうかは,
文字の長さと高さを求める下位ルーチン{\tt SZQTXW}がチェックする.
したがって, 指定方法が妥当でないときエラーメッセージは
{\tt SZQTXW}から出力される.

\vspace{1em}
文字列の有効な長さはMATH1 (下位基本数学処理ライブラリ)の中の
関数{\tt LENC} (CHRLIB参照)を用いて決定される.
したがって, 与えた文字列の後方にあるNULL文字あるいは空白文字は
無視される.

\vspace{1em}
ストロークの文字は基本的に線分の集まりとして表現されるので
クリッピング(\ref{gaiyou.outp}節参照)の対象となる.
システムフォントもクリッピングの対象となる．

%------------------------------------------------------------------------------
\subsection{SGTXZU/SGTXZV/SGTXZR}
%\label{sgpack.text.sgtxzu}
\begin{enumerate}
  \item 機能
  \begin{quote}
    U/V/R座標系で文字列を描く. 属性も同時に指定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL SGTXZU(UX,UY,CHARS,RSIZE,IROTA,ICENT,INDEX)} \\
    {\tt CALL SGTXZV(VX,VY,CHARS,RSIZE,IROTA,ICENT,INDEX)} \\
    {\tt CALL SGTXZR(RX,RY,CHARS,RSIZE,IROTA,ICENT,INDEX)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt UX}, {\tt UY} & {\tt (R)} &
        U座標系における文字の位置の(X, Y)座標値を与える. \\
      {\tt VX}, {\tt VY} & {\tt (R)} &
        V座標系における文字の位置の(X, Y)座標値を与える. \\
      {\tt RX}, {\tt RY} & {\tt (R)} &
        R座標系における文字の位置の(X, Y)座標値を与える. \\
      {\tt CHARS} & {\tt (C*(*))} & 描く文字列. \\
      {\tt RSIZE} & {\tt (R)} & 文字の高さ. {\tt SGSTXS}参照. \\
      {\tt IROTA} & {\tt (I)} & 文字列の角度. {\tt SGSTXR}参照. \\
      {\tt ICENT} & {\tt (I)} & センタリングオプション. {\tt SGSTXC}参照. \\
      {\tt INDEX} & {\tt (I)} & 文字のラインインデクス. {\tt SGSTXI}参照.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item ここで指定した
      {\tt RSIZE}, {\tt IROTA}, {\tt ICENT}, {\tt INDEX}は,
      {\tt SGTXU}, {\tt SGTXV}, {\tt SGTXR}が参照する
      {\tt RSIZE}, {\tt IROTA}, {\tt ICENT}, {\tt INDEX}を変更しない.
  \end{enumerate}
\end{enumerate}

%------------------------------------------------------------------------------
\subsection{SGTXXU/SGTXXV/SGTXXR}
%\label{sgpack.text.sgtxxu}
\begin{enumerate}
  \item 機能
  \begin{quote}
    U/V/R座標系で文字列を描く. 属性も同時に指定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL SGTXXU(UX,UY,CHARS,RSIZE,IROTA,ICENT,INDEX,ICOLOR)} \\
    {\tt CALL SGTXXV(VX,VY,CHARS,RSIZE,IROTA,ICENT,INDEX,ICOLOR)} \\
    {\tt CALL SGTXXR(RX,RY,CHARS,RSIZE,IROTA,ICENT,INDEX,ICOLOR)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt UX}, {\tt UY} & {\tt (R)} &
        U座標系における文字の位置の(X, Y)座標値を与える. \\
      {\tt VX}, {\tt VY} & {\tt (R)} &
        V座標系における文字の位置の(X, Y)座標値を与える. \\
      {\tt RX}, {\tt RY} & {\tt (R)} &
        R座標系における文字の位置の(X, Y)座標値を与える. \\
      {\tt CHARS} & {\tt (C*(*))} & 描く文字列. \\
      {\tt RSIZE} & {\tt (R)} & 文字の高さ. {\tt SGSTXS}参照. \\
      {\tt IROTA} & {\tt (I)} & 文字列の角度. {\tt SGSTXR}参照. \\
      {\tt ICENT} & {\tt (I)} & センタリングオプション. {\tt SGSTXC}参照. \\
      {\tt INDEX} & {\tt (I)} & 文字のラインインデクス. {\tt SGSTXI}参照.\\
      {\tt ICOLOR} & {\tt (I)} & ICOLOR型の色. {\tt ISGRGB}参照.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item ここで指定した
      {\tt RSIZE}, {\tt IROTA}, {\tt ICENT}, {\tt INDEX}は,
      {\tt SGTXU}, {\tt SGTXV}, {\tt SGTXR}が参照する
      {\tt RSIZE}, {\tt IROTA}, {\tt ICENT}, {\tt INDEX}を変更しない.
  \end{enumerate}
\end{enumerate}

%------------------------------------------------------------------------------
\subsection{SGTXU/SGTXV/SGTXR}
%\label{sgpack.text.sgtxu}
\begin{enumerate}
  \item 機能
  \begin{quote}
    U/V/R座標系で文字列を描く.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL SGTXU(UX,UY,CHARS)} \\
    {\tt CALL SGTXV(VX,VY,CHARS)} \\
    {\tt CALL SGTXR(RX,RY,CHARS)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt UX}, {\tt UY} & {\tt (R)} &
        U座標系における文字の位置の(X, Y)座標値を与える. \\
      {\tt VX}, {\tt VY} & {\tt (R)} &
        V座標系における文字の位置の(X, Y)座標値を与える. \\
      {\tt RX}, {\tt RY} & {\tt (R)} &
        R座標系における文字の位置の(X, Y)座標値を与える. \\
      {\tt CHARS} & {\tt (C*(*))} & 描く文字列.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item 描く文字列の属性は
      {\tt SGSTXS}, {\tt SGSTXR}, {\tt SGSTXC}, {\tt SGSTXI}で設定する.
  \end{enumerate}
\end{enumerate}

%------------------------------------------------------------------------------
\subsection{SGSTXS}
%\label{sgpack.text.sgstxs}
\begin{enumerate}
  \item 機能
  \begin{quote}
    {\tt SGTXU}, {\tt SGTXV}, {\tt SGTXR}で描く文字の高さを設定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL SGSTXS(RSIZE)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt RSIZE} & {\tt (R)} & 文字の高さをV座標系における
        単位で指定する(初期値は0.05).
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item {\tt RSIZE}は0より大きくなければならない.
      ただし{\tt RSIZE}が0のとき, メッセージは出力されるがなにもしない.
    \item {\tt RSIZE}の妥当性はこのルーチンでチェックされず,
      {\tt SGTXU}, {\tt SGTXV}, {\tt SGTXR}を呼んだときにチェックされる.
    \item 現在設定されている文字の高さは
      \begin{quote}
        {\tt CALL SGQTXS(RSIZE)}
      \end{quote}
      によって参照できる.
  \end{enumerate}
\end{enumerate}

%------------------------------------------------------------------------------
\subsection{SGSTXR}
%\label{sgpack.text.sgstxr}
\begin{enumerate}
  \item 機能
  \begin{quote}
    {\tt SGTXU}, {\tt SGTXV}, {\tt SGTXR}で描く文字列の回転角を設定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL SGSTXR(IROTA)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt IROTA} & {\tt (I)} & 文字列の傾きを度の単位で与える
        (初期値は0).
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item 現在設定されている回転角は
      \begin{quote}
        {\tt CALL SGQTXR(IROTA)}
      \end{quote}
      によって参照できる.
  \end{enumerate}
\end{enumerate}

%------------------------------------------------------------------------------
\subsection{SGSTXC}
%\label{sgpack.text.sgstxc}
\begin{enumerate}
  \item 機能
  \begin{quote}
    {\tt SGTXU}, {\tt SGTXV}, {\tt SGTXR}で描く文字列の
    センタリングオプションを設定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL SGSTXC(ICENT)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt ICENT} & {\tt (I)} & センタリングオプション(初期値は0).
        $-$1, 0 +1 のいずれかを指定する. \\
      & & \makebox[2cm][r]{$-$1 :} \parbox[t]{7cm}{左あわせ} \\
      & & \makebox[2cm][r]{0 :}    \parbox[t]{7cm}{中央あわせ} \\
      & & \makebox[2cm][r]{+1 :}   \parbox[t]{7cm}{右あわせ} \\
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item {\tt ICENT}の妥当性はこのルーチンでチェックされず,
      {\tt SGTXU}, {\tt SGTXV}, {\tt SGTXR}を呼んだときにチェックされる.
    \item 現在設定されているセンタリングオプションは
      \begin{quote}
        {\tt CALL SGQTXC(ICENT)}
      \end{quote}
      によって参照できる.
  \end{enumerate}
\end{enumerate}

%------------------------------------------------------------------------------
\subsection{SGSTXI}
%\label{sgpack.text.sgstxi}
\begin{enumerate}
  \item 機能
  \begin{quote}
    {\tt SGTXU}, {\tt SGTXV}, {\tt SGTXR}で描く文字の
    ラインインデクスを設定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL SGSTXI(INDEX)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt INDEX} & {\tt (I)} & 文字を描く線のラインインデクス
        (\ref{gaiyou.outp}節参照;初期値は1).
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item {\tt INDEX}は1以上でなければならない.
      ただし{\tt INDEX}が0のとき, メッセージは出力されるがなにもしない.
    \item {\tt INDEX}の妥当性はこのルーチンでチェックされず,
      {\tt SGTXU}, {\tt SGTXV}, {\tt SGTXR}を呼んだときにチェックされる.
    \item 現在設定されている文字のラインインデクスは
      \begin{quote}
        {\tt CALL SGQTXI(INDEX)}
      \end{quote}
      によって参照できる.
  \end{enumerate}
\end{enumerate}
