我希望的内容\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
,- 将基本样式设置为打字机字体,
- 传递
fullflexible
给columns
密钥(更多详细信息请参阅手册中的 2.10listings
), - 设置
keepspaces
为true
,告诉包不要删除空格来修复列对齐,并始终将制表符转换为空格(参见 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}