有没有办法跳到一行上的固定位置?(特定的制表符位置)
例子:
The quick \skiptoposition{1.5cm} brown \skiptoposition{2.5cm}fox
哪个会将“棕色”放在距左边距 1.5 厘米处,将“狐狸”放在距左边距 2.5 厘米处?
答案1
已经提到的tabbing
包有一个缺点,它不能跨段落使用,例如在 itemize 环境中,如在这个相关问题。
但是,该tabto
软件包通过以下命令提供了您正在寻找的内容\tabto*
:
\documentclass{article}
\usepackage{tabto}
\begin{document}
The quick \tabto{3.5cm}brown \tabto{5.5cm}fox
\par
\tabto{3.5cm}jumps too\tabto{5.5cm}far
\par\medskip
The quick \tabto*{1.5cm}brown \tabto*{3.5cm}fox
\par
\tabto{1.5cm}jumps too\tabto{3.5cm}far
\end{document}
答案2
这是tabbing
为了:
\documentclass{article}
\pagestyle{empty}
\begin{document}
\begin{tabbing}
\hspace*{2cm}\=\hspace*{2cm}\=\kill
The quick \> brown \>fox\\
\end{tabbing}
\end{document}
答案3
比 Werner 的方法简单,但使用的想法大致相同:
\noindent\makebox[2.5cm][l]{\makebox[1.5cm][l]{The quick}brown}fox
只是为了练习,这里有一个不同的版本,实现了 Dan 的评论的退格想法:
\documentclass[a4paper]{article}
\usepackage{environ}
\newcommand{\startatpos}[2]{\hspace{#1}#2\hfill\cr\ignorespaces}
\NewEnviron{fixedpos}
{\par\noindent\ooalign{\BODY\crcr}\ignorespacesafterend}
\pagestyle{empty}
\begin{document}
\noindent\rule{1.5cm}{1pt}\par
\noindent\rule{2.5cm}{1pt}\par
\noindent\rule{3.5cm}{1pt}\par
\begin{fixedpos}
\startatpos{0cm}{The}
\startatpos{1.5cm}{quick}
\startatpos{2.5cm}{brown}
\startatpos{3.5cm}{fox}
\end{fixedpos}
\end{document}
答案4
不确定这个解决方案是否优雅,但你可以使用重叠\rlap{<stuff>}
,将其内容设置<stuff>
在零宽度框中左边-对齐 - 类似于\makebox[0pt][l]{<stuff>}
,因此重叠在正确的. 水平对齐/间距由以下项提供\hspace
:
\documentclass{article}
\begin{document}
\noindent\rule{1.5cm}{1pt}\hspace*{2cm}\verb!1.5cm! from left margin \par% Just for reference
\noindent\rule{2.5cm}{1pt}\hspace*{1cm}\verb!2.5cm! from left margin \par% Just for reference
\noindent\rlap{The quick}\rlap{\hspace*{1.5cm}brown}\hspace*{2.5cm}fox
\end{document}
1.5cm
上述水平线仅供参考,分别显示与左边距的距离2.5cm
。
编辑:这是更新版本,它提供了从左边距精确\skiplmargin[<len>]{<stuff>}
定位的位置。是可选的,默认与左边距齐平。<stuff>
<len>
<len>
0pt
\documentclass{article}
\usepackage[savepos]{zref}% http://ctan.org/pkg/zref
\newcounter{posmarker}% Position marker counter
\newcommand{\skiplmargin}[2][0pt]{%
\stepcounter{posmarker}% To avoid multiple references
\zsavepos{currentloc\theposmarker}% Save current location
\hskip\dimexpr-\zposx{currentloc\theposmarker}sp+\zposx{leftmargin}sp+#1\relax% Move left
#2% Print argument
\hskip\dimexpr\zposx{currentloc\theposmarker}sp-\zposx{leftmargin}sp-#1\relax% Move right
}
\AtBeginDocument{\zsavepos{leftmargin}}
\begin{document}
\noindent\rule{1.5cm}{1pt} \hspace*{2.5cm}\verb!1.5cm! from left margin \par
\noindent\rule{2.5cm}{1pt} \hspace*{1.5cm}\verb!2.5cm! from left margin \par
\noindent The quick~\skiplmargin[1.5cm]{brown}~\skiplmargin[2.5cm]{fox}. \par
\noindent The quick brown fox.
\bigskip
\noindent\rule{3cm}{1pt} \hspace*{5cm}\verb!3cm! from left margin \par
\noindent\rule{7cm}{1pt} \hspace*{1cm}\verb!7cm! from left margin \par
\noindent The quick~\skiplmargin[3cm]{brown fox}~jumps~\skiplmargin[7cm]{over the lazy dog}. \par
\noindent The quick brown fox jumps over the lazy dog.
\end{document}
主要驱动因素是zref
的savepos
模块。PDF 位置标记放置在 的开头,\skiplmargin
以记住当前行中的位置。随后,执行相对于左边距的跳过,<stuff>
排版,然后反转跳过。排版所利用的空间<stuff>
被保留,使得 看起来好像<stuff>
移位了。
警告:您需要使用连线~
来\skiplmargin
保留间距,否则间距会因移动而丢失。此外,在twoside
左右边距可能不同的文档模式下,此方法可能需要进行一些调整。这是因为\zsavepos{leftmargin}
在文档开头执行了 ( \AtBeginDocument
) 来识别左边距。