%20%E5%91%BC%E5%8F%AB%E7%92%B0%E5%A2%83%E6%9C%83%E4%BD%BF%E4%B8%80%E4%BA%9B%E5%85%A7%E9%83%A8%E5%85%A7%E5%AE%B9%E9%A1%AF%E7%A4%BA%E5%9C%A8%E6%96%87%E4%BB%B6%E6%9C%AB%E5%B0%BE.png)
我需要使用 expl3 (latex3) 命令在某些文字上動態應用環境(或可能是一系列嵌套環境)。然而,當使用 expl3 連接一系列與環境相關的標記時,環境的行為與我通常透過嵌入文字來使用它時相比有所不同。使用 expl3,在環境中傳遞的正文內容之後的任何內容(即+b
)將出現在文件的末尾,而不是出現在傳遞的正文內容旁邊。
問題是什麼?
\documentclass{minimal}
\RequirePackage{expl3}
\ExplSyntaxOn
\NewDocumentEnvironment{myenv}{ +b}{
\tl_set:Nn \l_myenv_body_tl {#1}
<myenv~begins>~\use:n \l_myenv_body_tl
<This~should~appear~before~myenv~ending.>
}{ <myenv~ends~here.>}
\ExplSyntaxOff
\begin{document}
First line.
\vspace \medskipamount
% An environment by normal approach
\begin{myenv}
Some text for the regular body.
\end{myenv}
\vspace \medskipamount
Second line.
\vspace \medskipamount
% An environment created using Expl3
\ExplSyntaxOn
\tl_set:Nn \l_body_tl {Some~text~for~the~body.}
\tl_set:Nn \l_beginings_tl {\begin{myenv} }
\tl_set:Nn \l_endings_tl {\end{myenv}}
\tl_set:Nn \l_total_tl {}
\tl_put_right:Nn \l_total_tl {\l_beginings_tl}
\tl_put_right:Nn \l_total_tl {\l_body_tl}
\tl_put_right:Nn \l_total_tl {\l_endings_tl}
\use:n {\l_total_tl}
\ExplSyntaxOff
\vspace \medskipamount
Third line.
\end{document}
答案1
您正在使用一個b
參數,以便需要查看一個文字,\end{myenv}
它不能隱藏在巨集後面(如果您使用與該問題無關的\def\foo{\end{myenv}}
事實,您會看到相同的結果。expl3
更簡單的非expl3
範例
\documentclass{article}
\usepackage[T1]{fontenc}
\NewDocumentEnvironment{myenv}{ +b}{
<myenv~begins>
#1
<This~should~appear~before~myenv~ending.>
}{ <myenv~ends~here.>}
\def\fooA{\begin{myenv}}
\def\fooB{\end{myenv}}
\begin{document}
First line.
\begin{myenv}
abc
\end{myenv}
Second line.
\fooA
xyz
\fooB
Third line.
\end{document}