我正在寻找文档中的以下效果:
或者像这样:
是否有一个包可以让我做到这一点?
答案1
以下代码使制表符处于活动状态,并且每次遇到制表符时都会增加计数器。在段落的开头,添加了一个段落钩子,该钩子会移除由缩进插入的框,检查缩进的深度,将其设置\leftskip
为深度倍数\parindent
,然后在左侧添加适当宽度的箭头。
\documentclass{article}
\usepackage{everyhook}
\usepackage{lipsum}
\newcount\indentdepth
\newdimen\savedleftskip
\catcode`\^^I\active
\newenvironment{tabs}{%
\savedleftskip=\leftskip
\catcode`\^^I\active
\def^^I{%
\ifhmode
\par
\fi
\advance\indentdepth by1
}%
\PushPreHook{par}{%
{\setbox0\lastbox}% kill the indent
\ifnum\indentdepth>0
\leftskip\dimexpr\savedleftskip+\parindent*\indentdepth\relax
\llap{\hbox to\leftskip{\rightarrowfill}}%
\fi
}%
\def\par{%
\endgraf
\indentdepth=0
\leftskip=\savedleftskip
}%
\indentdepth=0
}{%
\par
\PopPreHook{par}%
}
\catcode`^^I10
\begin{document}
\begin{tabs}
No indent on the text here.
One indent.
Two indent.
More.
Even More.
Blah.
Back to one indent.
Back to no indent.
\lipsum[1]
\lipsum[2]
\end{tabs}
\end{document}
请注意, 之前有一个空行Back to no indent
。这样做的原因是,除非 TeX 注意行尾(例如,通过使用\obeylines
),否则无法区分行尾和空格。任何缩进的内容都可以区分,因为制表符会导致段落结束。
如果您复制并粘贴此代码,请务必将使用环境中的 8 个空格缩进更改tabs
为实际的“硬”制表符。
这是第二种方法,与第二个示例类似。这里,换行符在输出中开始新行。任何高于 a 的行都\strut
不会在其前面绘制相应的规则。
\documentclass{article}
\usepackage{everyhook}
\newdimen\tabwidth
\newcount\indentdepth
\tabwidth=\parindent
\catcode`\^^I\active
\newenvironment{tabs}{%
\catcode`\^^I\active
\def^^I{\advance\indentdepth by1}%
\def\par{\endgraf\indentdepth=0}%
\PushPreHook{par}{%
\ifnum\indentdepth>0
\hbox to\dimexpr\tabwidth*\indentdepth{%
\hfill\vrule height\ht\strutbox depth\dp\strutbox\ %
}%
\fi
}%
\parindent=0pt
\obeylines
\indentdepth=0
}{%
\PopPreHook{par}%
}
\catcode`\^^I10
\begin{document}
\begin{tabs}
No indent on the text here.
One indent.
Two indent.
More
Even More.
Blah.
Back to one indent.
Back to no indent.
\end{tabs}
\end{document}
再次确认是否重新添加标签。