定义新命令时 alltt 包出现问题

定义新命令时 alltt 包出现问题

我遇到了以下问题。在下面的代码中,新命令“chunk”的第二个参数应该使用 alltt 包“按原样”输出文本(我需要 alltt,因为我将输出一些其他新命令)。但实际发生的情况是,所有文本都显示在一行中(我猜是 => 参数导致这种情况)。

\documentclass[a4paper,12pt,openany]{book}
\usepackage[croatian]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{blindtext}
\usepackage[a4paper, inner=1.5cm, outer=3cm, top=2cm, bottom=3cm, bindingoffset=1cm]{geometry}
\usepackage{amsmath}
\usepackage{microtype}
\usepackage{alltt}

\newcommand{\chunk}[2]{ 
    \label{#1}
    $\langle\textit{#1}\ \rangle\equiv$
    \begin{alltt}
        #2
    \end{alltt}
}

\begin{document}

\chunk{Example}{
    some ex ample
    \{
        som e t e xt
            te xt
    \}
}

\end{document}

现在,我想到的一个快速解决方法是从 chunk 命令中删除 alltt 的使用,而是直接在文档中使用 alltt,如下所示

\chunk{Example}
\begin{alltt}
    some ex ample
    \{
        som e t e xt
            te xt
    \}
\end{alltt}

但这种方法很丑陋,并会导致代码重复,所以我想避免它。任何帮助都值得感激。

答案1

对于处理大段文本的命令,特别是当(如这里)你需要改变扫描约定时,LaTeX 的风格是使用环境而不是命令。如果你这样做了

\newenvironment{chunk}[1]
{%
    \label{#1}%
    $\langle\textit{#1}\ \rangle\equiv$%
    \begin{alltt}}
{\end{alltt}}

那么环境中的行尾将被保留。还请注意,您需要%在宏定义中的行尾处,否则您将在输出中得到虚假的空格。

\begin{chunk}{Example}
    some ex ample
    \{
        som e t e xt
            te xt
    \}
\end{chunk}

相关内容