![定义新命令时 alltt 包出现问题](https://linux22.com/image/252346/%E5%AE%9A%E4%B9%89%E6%96%B0%E5%91%BD%E4%BB%A4%E6%97%B6%20alltt%20%E5%8C%85%E5%87%BA%E7%8E%B0%E9%97%AE%E9%A2%98.png)
我遇到了以下问题。在下面的代码中,新命令“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}