\newenvironment 中的两个块命令

\newenvironment 中的两个块命令

以下文件有什么问题?

\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}

代码输出

相关内容