uline--.styで穴埋め問題を作る

uline--.styで穴埋め問題を作る

- あ い の投稿
返信数: 9
穴埋めに下線を引くことについて,質問させていただきます。

【環境など】
OS: MacBook (TeX Shop)
Compiler: lualatex
目標:書き込みの空白を伸長して,下線を引く


uline--.styで,以下のように穴埋め箇所に点線の下線を引こうと試みました。


%【souce】
¥documentclass{ltjsarticle}% !lualatex

¥usepackage{luatexja}% lualatexの日本語設定
¥usepackage{luatexja-fontspec}% lualatex多書体化
¥usepackage{luatexja-otf}% lualatex用otf
¥usepackage[usetype1]{uline--}% 本題の下線
¥newlength{¥testblanklength}%
¥newcommand{¥testblank}{¥settowidth{¥testblanklength}{#1}¥uline{¥hspace{¥testblanklength}}}%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%¥AddCommandInUline¥testlength[][]{}% ←uline--.styに設置
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

¥begin{document}

¥textgt{【短い場合】}
 
¥testblank{あいうえお}
 
¥textgt{【長い場合】}
 
¥testblank{摩訶般若波羅密多心経観自在菩薩行深般若波羅密多時照見五蘊皆空度一切苦厄舎利子色不異空空不}

¥end{document}

エラーメッセージは以下です。

%【error message】
./testblank.tex:9: Illegal parameter number in definition of \testblank.
<to be read again>
1
l.9 ...length}{#1}\uline{\hspace{\testblanklength}}}

log fileは添付してあります。

発想としては,
① 穴埋めにしたい箇所の長さを測定する
② 測定値を1.5倍してhspaceで水平方向にその分の長さを取る
③ 水平方向のスペースを下線(点線)で括る
なのですが,以下のような問題点があります。
① そもそも\uline{\hspace{30cm}}が改行しない
② \settolengthをuline中で使えない(?)

どうすれば解決できるのでしょうか?

ちなみにuline--.styに一行追加したものを添付しようと思ったのですが,著作権についてよくわからないのでアーカイプを下に載せておきます。
申し訳ありません。

【uline--.sty archive】
https://web.archive.org/web/20160613154204/http://www.h4.dion.ne.jp:80/~latexcat/macros/macro-index.html

よろしくお願いいたします。
あ い への返信

Re: uline--.styで穴埋め問題を作る

- 北見 けん の投稿
エラーメッセージは
> Illegal parameter number in definition of \testblank.
マクロ定義中にあるパラメータ番号がおかしい
ということですね。

> ¥newcommand{¥testblank}{¥settowidth{¥testblanklength}{#1}¥uline{¥hspace{¥testblanklength}}}%

ではパラメータとして「#1」が使われています。
TeX Wikiの「LaTeX入門/LaTeXマクロの作成」などを参考にすると、
https://texwiki.texjp.org/?LaTeX%E5%85%A5%E9%96%80%2FLaTeX%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E4%BD%9C%E6%88%90#veb3f0df
パラメータ付きのマクロをLaTeXの \newcommand で定義するには、
パラメータの個数を指定する必要があるのがわかります。

¥newcommand{¥testblank}[1]{¥settowidth.... (以下略)

のように「[1]」を入れることになります。
北見 けん への返信

Re: uline--.styで穴埋め問題を作る

- あ い の投稿
北見けん様,ご丁寧にご指摘ありがとうございます。

大変申し訳ありません,初歩的なミスをしてしまっていました。

修正した結果,コンパイルは通ったのですがtestblankの箇所が何も表示されませんでした。

どうすれば良いのでしょうか。。。
あ い への返信

Re: uline--.styで穴埋め問題を作る

- 和田 勇 の投稿
hspace で空白を確保した後であれば以下のようになるかと思います。
\newcommand{\testblank}[1]{\settowidth{\testblanklength}{#1}\uline{\hspace{1.5\testblanklength}}#1}
ただし、仕様の 1.5 倍の長さに関して、二つ目の例の場合 linewidth を超えてしまっているので最低限その考慮は必要です。
あと行の途中から利用して、改行が発生する場合などの考慮も必要かと思います。
和田 勇 への返信

Re: uline--.styで穴埋め問題を作る

- 和田 勇 の投稿
行溢れを回避させるためのやっつけマクロです。:-(
\uline の引数には半角と全角それぞれの空白が一個づつ入っています。
半角の空白を入れることにより行溢れが生じたら改行を発生させています。
\makeatletter
\newcommand{\TESTBLANK}[1]{%
    \@tfor\char:=#1\do{\uline{  }}#1%半角の空白の幅が全角の半分だと仮定して
}
\makeatother
本当は、 植字工が文字の幅の 1.5 倍の「アキ」を文字数分「組版」するようにしたく
\char の文字幅を取得してその 1.5 倍の \hspace をと考えていたのですが、
\hfill とかの調整がうまくできないのでとりあえずコメントに書いた仮定で作成しました。
追伸
@tfor は「LaTeX2eまくろの八衢」という書籍か、
その第一版が  http://xymtex.com/fujitas2/yatimata2/index.html にPDF で公開されているので参考にしてください。
和田 勇 への返信

Re: uline--.styで穴埋め問題を作る

- あ い の投稿
和田勇さま,返信ありがとうございます。

ご提示いただいたものだと,下線はうまくいくのですが破線や波線だとうまくいきません(添付の通り)。

どうすれば良いのでしょうか。
あ い への返信

Re: uline--.styで穴埋め問題を作る

- 和田 勇 の投稿
私のマクロを利用した後だと \uwave \udotline のマクロが動かなくなっていましたね :-(
調べると \char がバッティングしていたみたい :-( なので \moji に置き換えました。
\makeatletter
\newcommand{\ULINE}[1]{%
    \@tfor\moji:=#1\do{\uline{  }}#1%半角の空白の幅が全角の半分だと仮定して
}
\newcommand{\UWAVE}[1]{
    \@tfor\moji:=#1\do{\uwave{  }}#1%半角の空白の幅が全角の半分だと仮定して
}
\newcommand{\UDOTLINE}[1]{
    \@tfor\moji:=#1\do{\udotline{  }}#1%半角の空白の幅が全角の半分だと仮定して
}
\makeatother
和田 勇 への返信

Re: uline--.styで穴埋め問題を作る

- あ い の投稿
和田勇さま,返信ありがとうございます。

mojiの置き換えにより,無事結果を得ることができました。

本当にありがとうございました!
あ い への返信

Re: uline--.styで穴埋め問題を作る

- しっぽ 愛好家 の投稿
そもそも,(ここでつい先日話題になっていたように)その uline--.sty は
「LuaTeX(での和文処理)には非対応」(和文文書に関しては pTeX の使用を
前提とした代物(*))ですが,その点についてはよろしいですか.
また,それの LuaTeX 対応については,私には期待しないでください
(私にはそれをやるモチベーションが皆無ですので).

(*) マニュアル等では明言していませんでしたが,あれを作成した当時
(約 15 年前)の状況では仕方のないことではないかと思います.
しっぽ 愛好家 への返信

Re: uline--.styで穴埋め問題を作る

- あ い の投稿
しっぽ愛好家さま,返信ありがとうございます。

和文と欧文の両方で下線を引き,なおかつ線種も豊富で改行可能なのはuline--.styだけなようなので,おっしゃるようなlualatexでは解決しきれない問題に当たれば,それは受け入れて使おうと思います。

ご注意ありがとうございます。