有人能指出我正確的方向嗎?我需要將一篇文章的全部內容基本上包裝在巨集定義中(這就是用戶將其傳遞到我的模板中的方式),其中包含引用 \sec 和 \secc。由於某種原因,當我在另一個 \def 中使用這些巨集時,它會失敗並出現一個神秘的訊息:“段落在 \eoldefA 完成之前結束。”
\input opmac
\def\fails{
\sec Test 2
Some Text
}
\fails
\sec Test 1
This is Okay
\end
輸出:
This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2018/W32TeX) (preloaded format=pdftex)
restricted \write18 enabled.
entering extended mode
(./test.tex (./opmac.tex
This is OPmac (Olsak's Plain macros), version <Mar. 2018a>
(c:/texlive/2018/texmf-dist/tex/csplain/fonts/ams-math.tex
FONT: AMS math fonts - \mathchardef's prepared, 12 math families preloaded.)
OPmac: etex.src macros detected)
Runaway argument?
Test 2
! **Paragraph ended before \eoldefA was complete.**
<to be read again>
\par
\fails -> \sec Test 2 \par
Some Text
l.9 \fails
答案1
答案2
發生的情況是 opmac 正在使用字元代碼做一些時髦的事情,以允許\sec
命令以空白行終止其參數。如果您想了解更多信息,則需要學習以下章節課本討論 TeX 的「消化」過程如何運作(不確定您對 TeX 程式設計有多深入或願意了解多少)。您對輸入進入範本的方式有多少控制權?
答案3
該問題在文件第 16 頁有描述opmac-d.pdf
,其中建議了解決方案:
\def\mymacro#1{... \csname\string\sec:M\endcsname{#1} ...}
或者,在您的程式碼中:
\def\fails
\csname\string\sec:M\endcsname{Test 2}
Some Text
}
\bracedparam
您可以使用巨集看到另一個非常相似的解決方案OPmac技巧0036。