emath BBS (Read Only)

新規発言一覧最新記事過去一覧検索HOME

スレッド

└◇12826:
zahyou環境を自作マクロに組み込むと余分な空白が現れる [KEN] 09/23 04:07

 └◇12827:Re:zahyou環境を自作マクロに組み込むと余分な空白が現れる [飯島 徹] 09/23 05:28
  └◇12828:Re[2]:zahyou環境を自作マクロに組み込むと余分な空白が現れる [KEN] 09/23 06:11
   └◇12829:Re[3]:zahyou環境を自作マクロに組み込むと余分な空白が現れる [田中徹] 09/23 10:57
    └◇12830:Re[4]:zahyou環境を自作マクロに組み込むと余分な空白が現れる [KEN] 09/23 22:46<-last


12826● zahyou環境を自作マクロに組み込むと余分な空白が現れる[ KEN ] 2015 09/23 04:07
はじめまして。
emathにはいつもお世話になり、こちらの掲示板にも幾度となく救われています。
今回、初めて質問させていただきます。

現在、emathを用いて数学マーク式問題の解答一覧のマクロを作っています。
以下のソースのように、ア以降、順に縦に解答を並べながら、横に配点を示した表を目標にしています。
その際、zahyou*環境を利用しているのですが、図の左側に余分な空白が現れてしまいます。
図のサイズが大きくなるにつれ、空白も大きくなります。
何か打開策を授けてはいけないでしょうか。

以下、ソースです。
emathの配列や計算を多用しているため見にくいとは思いますが、ご容赦ください。
よろしくお願いします。

\documentclass[11pt,a4paper]{jsarticle}
\usepackage[dvipdfmx]{graphicx}
\usepackage{emathPp}
\usepackage{emathPs}
%
% マーク式解答一覧作成
% フォーマット:\markKaitou{#1,#2;#3,#4;以下略}
% #1,#2:解答の数字文字をベタ打ち,配点
% #3,#4:解答の数字文字をベタ打ち,配点
% 以下略
% 問題の区切りはセミコロン(;)
\makeatletter
\def\markKaitou#1{%
        % 文字列を;でばらし、一時的に配列fooに格納
        % 要素の個数は\kkosuuに格納(つまり、\kkosuu:問題数)
        \hairetusyokika{foo}
        \argsep{#1}{;}{foo}\kkosuu
        % 各要素を,でばらす
        % 前方を配列@AnSwerへ、後方を配列@TenSuuへ
        % @AnSwerを1文字ずつバラバラにしたものを配列@AAnSwerへ
        % @AnSwerの文字数を配列@Kosuuへ
        \hairetusyokika{@AnSwer} % 解答(バラバラ前)
        \hairetusyokika{@AAnSwer} % 解答(バラバラ後)
        \hairetusyokika{@TenSuu} % 点数
        \hairetusyokika{@Kosuu} %各問の文字数
        \Ifor\@loop{0}{\kkosuu}\Do{%
                \IAdd{\@loop}{1}\@MyCnt
                \strsep{\hairetu{foo}{\@MyCnt}}{,}\@a\@aa
                \strlen{\@a}\kosuu
                \hairetutuika{@Kosuu}{\kosuu}
                \hairetutuika{@AnSwer}{\@a}
                \hairetutuika{@TenSuu}{\@aa}
                \Ifor\l@@op{0}{\kosuu}\Do{%
                        \headchar{\@a}\@MoZi\nokori
                        \hairetutuika{@AAnSwer}{\@MoZi}
                \let\@a\nokori}%
        }%
        \hairetucsv{@AAnSwer}\Acsv
        \hairetusyokika{Afoo}
        \argsep{\Acsv}{,}{Afoo}\SouSuu
        \IMul{\SouSuu}{-1}\@KaTan
        \ISub{\@KaTan}{1}\KaTan
%%%%% ここまで計算部分
%%%%% ここから出力部分
\begin{zahyou*}[ul=5mm,xscale=2,haiti=t](0,4)(\KaTan,0)
        \linethickness{.8pt}
        \Drawline{(0,0)(4,0)}
        \Put{(0.5,-0.5)}[c]{番号}
        \Put{(1.5,-0.5)}[c]{解答}
        \Put{(2.5,-0.5)}[c]{配点}
        \Put{(3.5,-0.5)}[c]{結果}
        \Drawline{(0,-1)(4,-1)}
        %%%%%% 番号・解答を出力
        %%%%%% 横罫線はすべて描画
        \def\yval{-1.5}
        \def\dval{-2}
        \Ifor\ival{0}{\SouSuu}\Do{%
                \IAdd{\ival}{1}\qval
                \Put{(0.5,\yval)}[c]{ア}
                \Put{(1.5,\yval)}[c]{$\hairetu{@AAnSwer}{\qval}$}
                \Drawline{(0,\dval)(4,\dval)}
                \Sub{\yval}{1}\yyval
                \Sub{\dval}{1}\ddval
                \let\yval\yyval
                \let\dval\ddval
        }%
        %%%%%% 配点を出力
        %%%%%% 複数段にまたがる場合は縦方向の中心に配置
        %%%%%% さらに、またがる横罫線を白で覆う
        \def\yval{-1.5}
        \def\dval{-2}
        \Ifor\ival{0}{\kkosuu}\Do{%
                \IAdd{\ival}{1}\qval
                \def\aNswer{\hairetu{@Kosuu}{\qval}}
                \Sub{\aNswer}{1}\dmval
                \Sub{\yval}{\dmval}\ykval
                \def\A{(2.5,\yval)}
                \def\B{(2.5,\ykval)}
                \Bunten\A\B11\P
                \Sub{\ykval}{1}\yval
                \Ifor\jval{0}{\dmval}\Do{%
                        \Drawline<iro=white>{(2,\dval)(4,\dval)}
                        \ISub{\dval}{1}\ddval
                        \let\dval\ddval
                }%
                \Put\P[c]{\hairetu{@TenSuu}{\qval}}
                \Sub{\dval}{1}\ddval
                \let\dval\ddval
        }%
        %%%%%% 縦罫線を描画
        \Drawlines{(0,0)(0,\KaTan);(1,0)(1,\KaTan);(2,0)(2,\KaTan);(3,0)(3,\KaTan);(4,0)(4,\KaTan)}
\end{zahyou*}}
\makeatother
%
\begin{document}
%%%
\fbox{
\markKaitou
{1,2;12,3;123,4;1234,5}
}\par
\fbox{
\markKaitou
{1,2;12,3;123,4}
}\par
\fbox{
\markKaitou
{1,2;12,3}
}
%%%
\end{document}
コメントを書く(引用) | スレッド一覧


12827● Re:zahyou環境を自作マクロに組み込むと余分な空白が現れる[ 飯島 徹 ] 2015 09/23 05:28
TeX ではコントロール・ワードやコントロール・シーケンスの直後の改行以外
空白が勝手に挿入されると考えた方がいいでしょう.
% 日本語の処理で特別な例として,全角文字の直後に改行され,
% 次の行が全角文字で始まる場合は空白は挿入されません.
例えば

\makeatletter
hoge

では「hoge」の前に空白は挿入されませんが,

\fbox{hoge}
fuga
では「fuga」の前に空白が挿入されます.

このような意図しない空白が数多く挿入されているのではないかと推測します.
emathP に関するマクロは tDB さんの御好意で
\Put\A{hoge}
などとしても空白が挿入されないように工夫されていますが,
通常のマクロの場合は空白が挿入される場合があります.
行末に「%」を付けまくれば解決するのではないかと思います.

% 当方 Perl との連携を用いていないのでソースをコンパイルすることはできません.
% 推測でしかありませんのでご容赦ください.
コメントを書く(引用) | スレッド一覧


12828● Re[2]:zahyou環境を自作マクロに組み込むと余分な空白が現れる[ KEN ] 2015 09/23 06:11
早速のアドバイスありがとうございます。
全ての行末に%つけてみたところ、空白が無くなりました!
今まで数行で済むマクロしか扱ってこなかったため、初めての経験でした。
なるほど、原因はemathではなかったのですね。
失礼しました。恥ずかしい限りです。

貴重なお時間をいただき、ありがとうございました。
コメントを書く(引用) | スレッド一覧


12829● Re[3]:zahyou環境を自作マクロに組み込むと余分な空白が現れる[ 田中徹 ] 2015 09/23 10:57
> 早速のアドバイスありがとうございます。
> 全ての行末に%つけてみたところ、空白が無くなりました!
> 今まで数行で済むマクロしか扱ってこなかったため、初めての経験でした。
> なるほど、原因はemathではなかったのですね。

解決したようですが、私の経験からひとことだけ

この掲示板 過去ログ No.2397から始まるスレッドで
「空白の混入対策」というものが語られ、
当時(今から12年以上前ですが)私のエディタの設定で
行末に %が記述されるようしてありました。
その結果、痛い目にあった経験を No.2401 で
記させていただいたので、ご一読ください。

また、ご存じでしょうが、emathWiki に
マークシート作成コマンドに関して記述があります。
http://emath.s40.xrea.com/ydir/Wiki/index.php?cmd=read&page=EMmarksheet&word=hakoMS

a でなく $a$, - でなく $-$ など 1 文字でなくても対応できています。
最近はあまり見かけませんが(研究不足)
$\pm$ については 1文字になりませんね。
hakoMS のロジックは素晴らしいです。

あと、サンプルソースでは pszahyou* となるべきところが
zahyou* になっていたので、せっかく横罫線を iro=white で消したはずなのに
引かれたままになっていました。
(最初、残念だなと思っていましたが、ps を加えて納得しました)

問題番号は ア 固定でなく \textbf{\katakana{\qval}} 程度でがよかったです。
(アから開始しない場合はオフセット変数を設けることになるでしょう)

Enjoy emath Life !! <皆様

% リンクを載せた行が長くなり、見づらいものになってしまいました。
コメントを書く(引用) | スレッド一覧


12830● Re[4]:zahyou環境を自作マクロに組み込むと余分な空白が現れる[ KEN ] 2015 09/23 22:46
田中徹様

過去ログを拝見させていただきました。
何でもかんでも行末に%をつけるのも怖いですね。
コード記述の際に念頭に置くようにします。

hakoMSは現在も使用していますが、箱の横幅にもう少し手を加えたく思い、
少し前からコードを読み解きながら、自作のものを作成しています。
まだまだ知識不足のため苦労していますが、それはそれで楽しんでいます。

私の提示したサンプルですが、
横罫線は消さずに、元々引かないように改良しました。
また問題番号は、実際は\katakanaを使用しています。
どのstyファイルに収録されているか分からなかったので、とりあえずア固定としました。


話がそれてしまいそうなのでこのあたりにしておきます。
ありがとうございました。
コメントを書く(引用) | スレッド一覧

CGIROOM