跳至行上的绝对位置

跳至行上的绝对位置

有没有办法跳到一行上的固定位置?(特定的制表符位置)

例子:

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}

主要驱动因素是zrefsavepos模块。PDF 位置标记放置在 的开头,\skiplmargin以记住当前行中的位置。随后,执行相对于左边距的跳过,<stuff>排版,然后反转跳过。排版所利用的空间<stuff>被保留,使得 看起来好像<stuff>移位了。

警告:您需要使用连线~\skiplmargin保留间距,否则间距会因移动而丢失。此外,在twoside左右边距可能不同的文档模式下,此方法可能需要进行一些调整。这是因为\zsavepos{leftmargin}在文档开头执行了 ( \AtBeginDocument) 来识别左边距。

相关内容