相对于包含环境缩进 verbatim / lstlisting 环境的内容

相对于包含环境缩进 verbatim / lstlisting 环境的内容

我希望的内容\verbatim相对于的实际缩进进行缩进\verbatim,而不是确切的空格数。

例如,我喜欢在某些部分缩进,以使 LaTeX 源更具可读性:

\section{a}
  Regular paragraph.
  \begin{verbatim}
  Gets indented by 2 spaces. Bad!
  \end{verbatim}

问题是,在这种情况下,逐字文本也会出现不必要的 2 个空格缩进。

我可以通过以下方式解决:

\section{a}
  Regular paragraph.
  \begin{verbatim}
Not indented in output, GOOD. But LaTeX source is ugly. BAD!
  \end{verbatim}

或者:

\section{a}
  Regular paragraph.
\begin{verbatim}
Not indented in output, GOOD. but LaTeX source is ugly.
\end{verbatim}

但这样我就会丢失所有的 LaTeX 源缩进。

有没有办法只计算相对于verbatim环境缩进的空格?

如果这是可能的话,我期望:

\section{a}
  Regular paragraph.
  \begin{verbatim}
Gets indented. Bad!
  \end{verbatim}

要么渲染不带缩进,要么渲染带负缩进,但这并不重要,因为我不打算使用它。

答案1

环境verbatim不够复杂,无法满足您的要求。您可以做的是

  • lstlisting将环境(来自listings包)与autogobble选项(来自包)结合使用lstautogobble
  • 将基本样式设置为打字机字体,
  • 传递fullflexiblecolumns密钥(更多详细信息请参阅手册中的 2.10 listings),
  • 设置keepspacestrue,告诉包不要删除空格来修复列对齐,并始终将制表符转换为空格(参见 4.13 小节)。

以模仿逐字输出但自动删除前导空格。为方便起见,您甚至可以使用listings'\lstnewenvironment宏定义自定义环境。见下文。

边注:如果你真的坚持使用逐字环境,那么你可能不应该在 之前留下换行符\end{verbatim};否则,该换行符将被打印逐字你会得到一个(不想要的?)换行符。例如,你应该写

\begin{verbatim}
    Regular paragraph.\end{verbatim}

代替

\begin{verbatim}
    Regular paragraph.
\end{verbatim}

在此处输入图片描述

\documentclass{article}

\usepackage{listings}
\usepackage{lstautogobble}

\lstnewenvironment{lstverbatim}[1][]{
  \lstset
  {
    autogobble,
    basicstyle=\ttfamily,
    columns=fullflexible,
    breaklines=true,
    keepspaces=true,
  }
}{}

\begin{document}
\section{a}
    \begin{verbatim}
        Regular paragraph\end{verbatim}
\section{b}
    \begin{lstverbatim}
        Regular paragraph
    \end{lstverbatim}
\end{document}

答案2

我使用将可选参数传递给包的宏的功能verbatimbox,以便以各种方式(通常是字体大小和样式)来调节逐字。但在本例中,我用\hspace等于\texttt所需源缩进的字母数的负数来调节它,该负数作为强制参数传递给新创建的indentedverb环境。

\documentclass{article}
\usepackage{verbatimbox}
\newenvironment{indentedverb}[1]{%
  \setbox0=\hbox{\texttt{x}}%
  \verbnobox[\hspace{-#1\wd0}]
}{\endverbnobox\vspace{-\baselineskip}}
\begin{document}
\section{My Section}
  text
  \begin{indentedverb}{2}
  \verbatim text
  This is a test
  \end{indentedverb}
  More text
    \begin{indentedverb}{4}
    \verbatim text
    with a four character source indent
    \end{indentedverb}
\end{document}

在此处输入图片描述

相关内容