質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
TeX

フリーの組版システムで、字や図版などの要素を紙面に配置するという作業をコンピュータで行います

解決済

自前マクロで展開できないコマンドのエラー

FoolHotari
FoolHotari

総合スコア77

TeX

フリーの組版システムで、字や図版などの要素を紙面に配置するという作業をコンピュータで行います

1回答

0評価

0クリップ

106閲覧

投稿2022/08/18 07:01

前提

TeXで3つの引数を取るマクロを定義しようとしています。
第2引数は必須で、第1引数と第3引数は任意です。

形式は以下の通りです。

tex

\blank[#1]{#2}[#3]

これをdocumentブロックで使うとエラーは出ませんが、\sectionの引数の中などで使うとエラーが出ます。
エラーを出さないようにするためにはどうすればいいのでしょうか。

実現したいこと

例えば以下のように書いてもエラーが出ないようにする。

tex

\section{\blank[#1]{#2}[#3]}

発生している問題・エラーメッセージ

33: Argument of \@sect has an extra }. <inserted text> \par l.33 \section{\blank{100pt}} Runaway argument? {\normalfont \Large \headfont \raggedright }{\@blank }\def \reserved@b \ETC. 33: Paragraph ended before \@sect was complete. <to be read again> \par l.33 \section{\blank{100pt}}

該当のソースコード

tex

\documentclass[uplatex]{jsarticle} \makeatletter \def\blank{% \@ifnextchar[{% \@blank% }{% \@blank[]% }% } \def\@blank[#1]#2{% \@ifnextchar[{% \@@blank[#1]{#2}% }{% \@@blank[#1]{#2}[]% }% } \def\@@blank[#1]#2[#3]{% \underline{#1\hspace{#2}#3}% } \makeatother \begin{document} \blank{100pt} \\ \blank{100pt}[suffix] \\ \blank[prefix]{100pt} \\ \blank[prefix]{100pt}[suffix] \\ \end{document}

試したこと

tex

\section{{\blank{100pt}}}

このように波カッコで囲ってみても変わりませんでした。

tex

\newcommand{\bbb}{\blank{100pt}} \section{\bbb}

このように一度マクロにまとめても変わりませんでした。

tex

\def\temp[#1]#2[#3]{% \underline{#1\hspace{#2}#3}% }

このように最終的な形のマクロだけ取り出して使うと、エラーは出ませんでした。

補足情報(FW/ツールのバージョンなど)

Windows10

This is ptex2pdf[.lua] version 20200520.0.
This is e-upTeX, Version 3.141592653-p3.9.0-u1.27-210218-2.6 (utf8.uptex) (TeX Live 2021/W32TeX) (preloaded format=uplatex)
\write18 enabled.
pLaTeX2e <2021-06-01u04>+2 (based on LaTeX2e <2021-11-15>)
L3 programming layer <2021-11-22> (c:/texlive/2021/texmf-dist/tex/platex/jsclasses/jsarticle.cls
Document Class: jsarticle 2021/06/28 jsclasses (okumura, texjporg)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

TeX

フリーの組版システムで、字や図版などの要素を紙面に配置するという作業をコンピュータで行います