![\newenvironment 中的两个块命令](https://linux22.com/image/279674/%5Cnewenvironment%20%E4%B8%AD%E7%9A%84%E4%B8%A4%E4%B8%AA%E5%9D%97%E5%91%BD%E4%BB%A4.png)
以下文件有什么问题?
\documentclass{article}
\usepackage{xepersian}
\usepackage{verbatim}
\newenvironment{code}
{\begin{latin}\begin{verbatim}}
{\end{verbatim}\end{latin}}
\usepackage{enumitem}
\begin{document}
\begin{code}
hello world!
\end{code}
\end{document}
错误:
! File ended while scanning use of \next.
<inserted text>
\par
<*> untitled-4.tex
我也尝试过这个:
\documentclass{article}
\usepackage{listings}
\usepackage{xepersian}
\newenvironment{code}
{\begin{latin}\begin{lstlisting}}
{\end{lstlisting}\end{latin}}
\begin{document}
\begin{code}
hello world!
This is a code
\end{code}
\end{document}
但输出并不是我期望的。
答案1
逐字环境非常特殊,通常无法成为宏的参数,而当您尝试将一个verbatim
环境放入另一个环境定义中时,这实际上就是您在做的事情。有关此问题的更多详细信息,请参阅TeX 常见问题解答关于该主题。
verbatim
相反,您可以做的是挂接到或环境的开头lstlisting
以切换到 LTR 模式。以下是示例:
\documentclass{article}
\usepackage{verbatim}
\usepackage{listings}
\usepackage{etoolbox}
\usepackage{xepersian}
\AtBeginEnvironment{verbatim}{\setLTR\latinfont}
\AtBeginEnvironment{lstlisting}{\setLTR\latinfont}
\begin{document}
\begin{verbatim}
hello world!
\end{verbatim}
\begin{lstlisting}
hello world!
\end{lstlisting}
این فقط یک آزمایش است
\end{document}