Q&A
前提
TeXで3つの引数を取るマクロを定義しようとしています。
第2引数は必須で、第1引数と第3引数は任意です。
形式は以下の通りです。
tex
1\blank[#1]{#2}[#3]
これをdocumentブロックで使うとエラーは出ませんが、\sectionの引数の中などで使うとエラーが出ます。
エラーを出さないようにするためにはどうすればいいのでしょうか。
実現したいこと
例えば以下のように書いてもエラーが出ないようにする。
tex
1\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
1\documentclass[uplatex]{jsarticle} 2 3\makeatletter 4 5\def\blank{% 6 \@ifnextchar[{% 7 \@blank% 8 }{% 9 \@blank[]% 10 }% 11} 12 13\def\@blank[#1]#2{% 14 \@ifnextchar[{% 15 \@@blank[#1]{#2}% 16 }{% 17 \@@blank[#1]{#2}[]% 18 }% 19} 20 21\def\@@blank[#1]#2[#3]{% 22 \underline{#1\hspace{#2}#3}% 23} 24 25\makeatother 26 27\begin{document} 28 \blank{100pt} \\ 29 \blank{100pt}[suffix] \\ 30 \blank[prefix]{100pt} \\ 31 \blank[prefix]{100pt}[suffix] \\ 32\end{document}
試したこと
tex
1\section{{\blank{100pt}}}
このように波カッコで囲ってみても変わりませんでした。
tex
1\newcommand{\bbb}{\blank{100pt}} 2\section{\bbb}
このように一度マクロにまとめても変わりませんでした。
tex
1\def\temp[#1]#2[#3]{% 2 \underline{#1\hspace{#2}#3}% 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)
回答1件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2022/08/19 06:01