texのマクロ作成でスペースが空いてしまう

このQ&Aのポイント
  • texを使って二通りの文章を選べるようなマクロを作成しています。
  • しかし、選択した文章の前後に間が空いてしまいます。
  • 解決方法を教えてください。
回答を見る
  • ベストアンサー

texのマクロ作成でスペースが空いてしまう.

お世話になっております. 現在texを使って,二通りの文章を選べるような選べるようなマクロを作成しております. \newcommand{\my_command}[3]{\ifnum#1=0 #2 \else #3 \fi} という命令で,文中に 「かくかくしかじかで, \my_command{0} {#1=0ではこっちをえらび} {でないとこっちを選びます.} というマクロを作りたいです.」 と記述しました.これをコンパイルすると 「かくかくしかじかで,  #1=0ではこっちをえらび   というマクロを作りたいです.」 のように,選択した文章の前後に間が空いてしまいます. 普通に間のない文章を作りたいのですが,どのようにすれば解決できるでしょうか.よろしくお願いします.

  • kukky
  • お礼率65% (46/70)

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

思い付きですが, 後ろの空白は \else (や \fi) の前に空白が入っているのが原因じゃないかなぁ. だから, \newcommand{\my_command}[3]{\ifnum#1=0\relax #2\else #3\fi} だと後ろの空白は消えるはず. 前にある空白はどこから来たんだろ? \my_command の前の改行かなぁ?

kukky
質問者

お礼

Tacosan様 返答ありがとうございます.解決しました! おっしゃるとおり,マクロ内の後の空白が原因でした. また,前の空白については,実際は 「かくかくしかじかで, \my_command{0} { #1=0ではこっちをえらび } { でないとこっちを選びます. } というマクロを作りたいです.」 という風に中カッコをつけていましてそのためでした. 申し訳ありません,説明不足でした.... 解決できました,ありがとうございます!

関連するQ&A

  • Texでどうしても解決できないエラーが出ます。

    現在、Texで文章を作成しているのですが、どうしても解決できないエラーがあります。 そのエラーは以下のエラーです。 chapter4.tex(61): エラー: ! File ended while scanning use of \@xdblarg. このエラーに関しては前後に全角の{}があるときに出るエラーだと思われるのですが、 前後に全角の{}はなく、なぜエラーがでたのか分かりません。 また、どうしても消えないので、前後の文章を削除したとしても、エラーがでてしまいます。 そこで、以下のような処理を行ってみたのですがそれでもだめでした。 \if0 \fi 上の空行が61行目になるようにしています。 しかし、これでも必ず61行目に上記のエラーがでました。 一体なぜ解決できないのでしょうか? どなたかご存知の方いらっしゃいましたら教えていただけると幸いです。

  • TeXで図を挿入できません.助けてください.

    OSはMac OS XでTeXShopを利用しています. Ghostscriptのパッケージとして GPL/ESP Ghostscript 8.15.4 for MacOSX 10.5 (ppc/intel) を入れています. 文章のみだと,コンパイルは通るのですが, 図を挿入しようとするとうまくいきません. パッケージは \usepackage{graphics} を使い, 例えば, \begin{figure}[h] \includegraphics[width=5cm]{sample.eps} \caption{sample} \label{fig:sample} \end{figure} としてコンパイルすると, 次のようなエラーメッセージが表示されます. Runaway argument? width=5cm]{sample.eps} \caption{sample} \label{fig:sample} \end{fi\ETC. ! Paragraph ended before \Gin@iii was complete. <to be read again> \par l.16 ? パッケージを \usepackage{graphics}から\usepackage{graphicx}に 代えてWindows OSで行うとうまくコンパイルが通ります. これまで,Windows OSでTeXを扱っていたのですが, MacでもTeXを扱わなければならない環境に身を置くことになりましたので, どうしてもこの問題を解決したいのです. お心当たりのある方がいらっしゃいましたら, どうぞよろしくお願い致します.

  • texでアクセント記号

    TeXでアクセント記号を使用したいのですが、文章中にコマンド \"{o} と入力すると、コンパイル時に勝手に missing $ inserted と$を挿入され、数式モードになってしまいます。 文章モードのままで、上のコマンドを使ってアクセント記号を入れることはできないのでしょうか?または、コンパイル時に自動挿入をさせない方法はあるのでしょうか? よろしくお願いします。 環境は pLaTeX2e <2006/11/10>+0 (based on LaTeX2e <2005/12/01> で、コマンドプロンプトを使ってコンパイルしています。 プリアンプルはこんな感じです↓ \documentclass{jarticle} \usepackage[dvipdfm]{graphicx} \usepackage{bm} \begin{document} エラーメッセージ ! Missing $ inserted. <inserted text> $ l.20 ^^I\to Schr\"odinger ? LaTeX Warning: Command \" invalid in math mode on input line 20. ! Please use \mathaccent for accents in math mode. \add@accent ...@spacefactor \spacefactor }\accent #1 #2\egroup \spacefactor ...

  • texをPDFに変換できません

    tex初心者です。 この前インストールしたtexで文章を作成し、PDF形式にしようとしたのですが、ものすごい数のエラーが出ました。何かやり方か設定を間違えているのでしょうか? ちなみに文章のコンパイルは通りました。 表示されたエラーは以下のとおりです。 \..\..\..\..\w32tex\share\texmf\tex\jlatex\base\j-size10.clo(101): エラー: Illegal unit of measure (pt inserted). \..\..\..\..\w32tex\share\texmf\tex\jlatex\base\j-size10.clo(101): エラー: LaTeX Error: Missing \begin{document}. \..\..\..\..\w32tex\share\texmf\tex\jlatex\base\j-article.cls(101): Overfull \hbox (12.66667pt too wide) in paragraph at lines 101--289 \..\..\..\..\w32tex\share\texmf\tex\jlatex\base\j-article.cls(624): エラー: Text line contains an invalid character. \..\..\..\..\w32tex\share\texmf\tex\jlatex\base\j-article.cls(624): エラー: Text line contains an invalid character. \..\..\..\..\w32tex\share\texmf\tex\jlatex\base\j-article.cls(625): エラー: Text line contains an invalid character. \..\..\..\..\w32tex\share\texmf\tex\jlatex\base\j-article.cls(625): エラー: Text line contains an invalid character. \..\..\..\..\w32tex\share\texmf\tex\jlatex\base\j-article.cls(626): エラー: Text line contains an invalid character. \..\..\..\..\w32tex\share\texmf\tex\jlatex\base\j-article.cls(626): エラー: Text line contains an invalid character. \..\..\..\..\w32tex\share\texmf\tex\jlatex\base\j-article.cls(627): エラー: Text line contains an invalid character. \..\..\..\..\w32tex\share\texmf\tex\jlatex\base\j-article.cls(628): エラー: Text line contains an invalid character. \..\..\..\..\w32tex\share\texmf\tex\jlatex\base\j-article.cls(628): エラー: Text line contains an invalid character. \..\..\..\..\w32tex\share\texmf\tex\jlatex\base\j-article.cls(629): エラー: Text line contains an invalid character. \..\..\..\..\w32tex\share\texmf\tex\jlatex\base\j-article.cls(629): エラー: Text line contains an invalid character. \..\..\..\..\w32tex\share\texmf\tex\jlatex\base\j-article.cls(630): エラー: Text line contains an invalid character. \..\..\..\..\w32tex\share\texmf\tex\jlatex\base\j-article.cls(630): エラー: Text line contains an invalid character. \..\..\..\..\w32tex\share\texmf\tex\jlatex\base\j-article.cls(631): エラー: Text line contains an invalid character. B}(631): エラー: Text line contains an invalid character. B}(631): エラー: Text line contains an invalid character. B}(631): エラー: Text line contains an invalid character. B}(632): エラー: Text line contains an invalid character. B #1}(632): エラー: Text line contains an invalid character. B #1}(633): エラー: Text line contains an invalid character. B}(633): エラー: Text line contains an invalid character. B}(634): エラー: Text line contains an invalid character. B\def\^...(634): エラー: Text line contains an invalid character. B\def\^...(634): エラー: Text line contains an invalid character. B\def\^...(634): エラー: Text line contains an invalid character. B...(634): エラー: Text line contains an invalid character. B\l...(634): エラー: Text line contains an invalid character. ...(634): エラー: Text line contains an invalid character. B(634): エラー: Text line contains an invalid character. B(635): エラー: Text line contains an invalid character. B(636): エラー: Text line contains an invalid character. B\number\year(636): エラー: Text line contains an invalid character. B\number\year(637): エラー: Text line contains an invalid character. B%(637): エラー: Text line contains an invalid character. B%(638): エラー: Text line contains an invalid character. B\else\number\count255\fi}\fi(638): エラー: Text line contains an invalid character. B\else\number\count255\fi}\fi(639): エラー: Text line contains an invalid character. B}(639): エラー: Text line contains an invalid character. B}(639): エラー: Text line contains an invalid character. B}(639): エラー: Text line contains an invalid character. B}(639): エラー: Text line contains an invalid character. B}(639): エラー: Text line contains an invalid character. B \number\day ^^(5): エラー: File ended while scanning use of \@argdef. B \number\day ^^(1): Unused global option(s): B \number\day ^^(1): fontmap entry for `cmcsc8' already exists, duplicates ignored B \number\day ^^(1): fontmap entry for `cmcsc9' already exists, dupli

  • C言語の#defineについて

    初歩的なことですみませんが、 #define命令はソースのどこに記述しても問題ありませんか? 一応、コンパイル時には問題ないようですが。 また、#ifdef,#ifndef,#elseifとうのマクロ全般においてはどうなのですか? どなたか教えていただけませんか?

  • ExcelでのVBAマクロについて

    質問させていただきます。 今現在、知人に設定していただいた一つのマクロを使って作業しています。 (そのマクロ自体は【選択したセル】と【直下のセル】のデータを「テキスト」として『前後のスペース』を削除し「セル内改行」で結合する。高さ調整後、1セル分上がる。というものです) 今までは1セルずつこれを使って結合し、セル内文章をまとめて一番上に持ち上げていました。しかし、今回私がやりたいのは1セルずつマクロを実行(ショートカットキーを使っていますが)するのが手間なので、5セル(上下方向にです)に対して一気に先ほどの既存マクロを適応する、という風にしたいのです。(選択セルと直下セルが結合されて選択セル内文章が増えるというやり方ですので、一番初めのポインタ位置は結合したいデータの下から二つ目でないといけません。その場合、この既存マクロを4回繰り返すマクロがほしいのです) 私自身、「記録」機能を使ったマクロしか組んだことがなかったのでVBAのほうをいじってみても知識不足でエラーばかり出てしまい、困ってしまいました。 とても説明がややこしく、分かりづらいとは思いますが、ご回答いただけると有り難いです。

  • Word 段落間の空白スペース

    Word2010を使っています Wordで作った文章をなるべく間を詰めて印刷したいのですが 範囲選択したとき上の段落と下の段落の間に 1行くらいの選択されていない空白のスペースが残ることがあります これはどういう設定によるのでしょうか 詰めるにはどのようにすればよいのでしょうか ちなみに段落の設定は 段落の前後・0 行間・1行にしています よろしくお願いします

  • マクロに関して

    C言語・C++初心者です。 マクロにて、printfをレベル分けして出力したいと思っております。 下記のようにレベルを1,2に区分して、マクロを呼出して、printf上にそのレベルを出力させたいという意向です。頭ではこうしたいというものはまとまっておりますが、いざソースに起こすと、コンパイルエラーとなります。 そもそもの記述方法が検討違いなのかと思いますが、なかなかうまくいきません。 大変申し訳ございませんが、ご教授よろしくお願いいたします。 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #include <stdio.h> // デバッグレベル1 #define DEBUGLV1(str) printf("LV[%d]:%s",1,str) // デバッグレベル2 #define DEBUGLV2(str) printf("LV[%d]:%s",2,str) int main() {  //-- 変数の宣言 --------------------  int iCnt; // ループカウンタt  //-- 変数の初期化 ------------------  iCnt = 0;  // ループ  for(iCnt=0; iCnt<2; iCnt++)  {   if(iCnt == 0)   {    DEBUGLV1("LV1LOG:iCnt[%d]\n", iCnt);   }   else   {    DEBUGLV2("LV2LOG:iCnt[%d]\n", iCnt);   }  }  return 0; } +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  • Excel で日付入力したらマクロが動く方法

    Excel 2003 です。(OSはXP) データ用のエクセルファイルからマクロでコピー貼り付けをする日報ファイルを作っています。構成シートが7枚、マクロは12モジュール、ファイルサイズが140MBという巨大なものです。 セルB2に日付を入力したとき、Macro1が動くようにしたいのですが、 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$B$2" Then Exit Sub Else... 以外に何かうまい方法はないでしょうか? セルに値を入力、じゃなくて、何かのコントロールでもかまいません。 マクロで日付を読み込めることが必須条件です。 上述のマクロの活用方法はいろいろ読みましたが、処理に時間がかかって困っております。「全てのセルに変更が加えられたのを検知」するしか方法はありませんか? 一応、この Macro1 を呼び出す部分以外には Application.EnableEvents = False を入れて、Worksheet_Changeが反応しないように止めていますが、遅いような気がします。(計ったわけではないのですが。) この日報ファイル自体が、計算の塊で、1つのセルに数値を入力しただけで、再計算に1秒前後かかることがあります。 そこで、貼り付けのマクロ(Macro2)を動かすときには Application.Calculation = xlManual を入れたりもしているのですが(それでも貼り付けに1分30秒)、常に再計算をOFFにするわけにもいかず・・・。 だから「全てのセルに変更が加えられたのを検知」という命令は、時間短縮のため避けたいのです。 また、マクロの全てにEnableEventsを入れておくのも、見苦しくて。(新たにマクロを追加したらまた忘れずにEnableEventsを書かないといけない構造にしたくありません。) 「全てのセルに変更が加えられたのを検知」ではなく、特定のオブジェクトに日付が入力された・選択されたのをマクロの開始合図とすることはできませんでしょうか? 質問がわかりにくかったらすみません。よろしくお願いします。

  • Perl/JavaScript/サブルーチン

    はじめまして。 今ちょっといじってるプログラムについてお聞きしたいことがあります。 index.htmlのtextareaからmy.cgiを呼び出したい のですが。my.cgiというのは 1.textareaに入力された文章をデータベースに保存。 2.日付順にソートし新しいものを一つだけ取り出す。 3.index.htmlに表示する というものなのですが。 デフォルトでtextareaに一番新しい情報が入るようにしたいのです。valueで指示したのですがJavaScriptが邪魔してブラウザに反映されません。ソースを見るとvalue="********"とはいっています。 my.cgiを呼び出す命令を記述したmy.jsというファイルを作ってサブルーチンのように扱うという方法も考えているのですが、呼び出しやindex.htmlに表示させる記述の仕方が分かりません。 どなたか分かる方は、どうぞ宜しくお願いいたします。

専門家に質問してみよう