我想在 verbatim 环境中缩进文本。我想使用制表符来实现这一点。问题是 verbatim 并不像宣传的那样工作(“打印未修改的文本”)。它实际上用空格替换制表符并设法将它们全部压缩在一起,请参阅下面的 MWE。要解决这个问题,可以用空格替换制表符。
\documentclass{article}
\begin{document}
I'm regular text
\begin{verbatim}
I have no tab
I have 1 tab
I have 2 tabs
I have no space
I have 4 spaces
I have 8 spaces
\end{verbatim}
\end{document}
我更喜欢在编辑文本时使用制表符。毕竟,这是它的预期用途。为了继续使用制表符,但要获得所需的结果(这需要空格),我必须以某种方式将这些制表符转换为空格。
我该怎么做?是否有可以传递的命令行参数来进行此类替换?我真的很喜欢 verbatim 环境的简单性,但也许我对此要求太多,而应该使用其他包?如果是,哪一个?或者是否可以将 verbatim 配置为以某种方式与制表符一起使用?
我用来pdflatex --file-line-error-style "%f"
将 tex 转换为 pdf,顺便问一下,%f
文件在哪里
该expand
命令正是我要找的。我不想创建中间文件,因此我将输出导入 pdflatex
**之前:** 编译上面的 MWE(第一行是使用的命令)而不扩展:
pdflatex --file-line-error-style "tab test.tex"
This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian)
restricted \write18 enabled.
entering extended mode
(./tab test.tex
LaTeX2e <2011/06/27>
Babel <3.9h> and hyphenation patterns for 9 languages loaded.
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo)) (./tab test.aux)
[1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./tab test.aux) )</usr/
share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/share/t
exlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmtt10.pfb>
Output written on "tab test.pdf" (1 page, 23531 bytes).
Transcript written on "tab test.log".
后:使用 编译 MWE expand
,然后将其导入 pdflatex。由于某种原因,输出有点长,看起来像是空行,但 pdf 是使用正确名称创建的,并且选项卡已被替换。太棒了!
expand -t 2 tab\ test.tex | pdflatex --file-line-error-style -jobname="tab test"
This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian)
restricted \write18 enabled.
**entering extended mode
LaTeX2e <2011/06/27>
Babel <3.9h> and hyphenation patterns for 9 languages loaded.
*(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo))
(Please type a command or say `\end')
*(./tab test.aux)
*
*
*
*
*
*(Please type a command or say `\end')
*
*
*
*(Please type a command or say `\end')
*
*[1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./tab test.aux)</usr/sh
are/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/share/tex
live/texmf-dist/fonts/type1/public/amsfonts/cm/cmtt10.pfb>
Output written on "tab test.pdf" (1 page, 23537 bytes).
Transcript written on "tab test.log".
答案1
正如 Mike Renfro 在评论中指出的那样,许多文本编辑器都支持在制表符和空格之间进行转换;有些甚至会在您按下制表符键时打印一些空格,从而使转换变得无缝且透明。这可能是对您的确切问题的最简单的答案。
如果您恰好是 Linux(可能是 OSX)用户,则另一个解决方案是使用命令expand
。在命令行中,如果您运行expand -t 4 file.tex > new_file.tex
中的所有制表符都file.tex
将转换为 4 个空格,因为文件是在 中复制的new_file.tex
。有关更多信息,请参阅expand
命令。
也可以看看unexpand
。
答案2
使用fancyvrb
包:
\documentclass{article}
\usepackage{fancyvrb}
\fvset{tabsize=4}
\begin{document}
I'm regular text
\begin{Verbatim}
I have no tab
I have 1 tab
I have 2 tabs
I have no space
I have 4 spaces
I have 8 spaces
\end{Verbatim}
\end{document}
该网站正在将制表符更改为四个空格,因此这可能看起来像是作弊,但在我的文件中我有制表符。