Quero recuar a próxima linha em uma posição exatamente especificada

Quero recuar a próxima linha em uma posição exatamente especificada

Estou escrevendo um roteiro inteiro de aula de matemática, onde a legibilidade muitas vezes exige que eu recue apenas uma ou duas linhas por um determinado valor, o que é SEMPRE diferente. Eu gostaria de ter alguma maneira de controlar o recuo da próxima linha por um & like nas tabelas ou qualquer outro caractere de controle. Porém, não quero usar tabelas, quero que pareçam texto normal. Obviamente, tem que funcionar dentro e fora dos ambientes matemáticos, já que eles aparecem no texto com bastante frequência para este projeto.

Deve ser algo assim:

This is the first line.
     One more line.
              And another.

Com os caracteres de controle na frente de "is" e "line".

Existe uma solução fácil de usar? Não me importa se é complicado configurar uma vez, desde que o uso seja sempre simples.

Responder1

A maioria dos compiladores TeX fornece o recurso \pdfsaveposque permite registrar a posição na página de envio. Foi introduzido no pdfTeX e hoje está disponível em pdfTeX, nos modos DVI e PDF, XeTeX e LuaTeX.

Como a posição não é conhecida, antes da saída da página, é necessário algum tipo de sistema de referência. O pacote zref-saveposdo projeto zreffornece uma interface para o \pdfsaveposrecurso.

\documentclass{article}
\usepackage{zref-savepos}
\makeatletter
% \zsaveposx is defined since 2011/12/05 v2.23 of zref-savepos
\@ifundefined{zsaveposx}{\let\zsaveposx\zsavepos}{}
\makeatother
\newcounter{hposcnt}
\renewcommand*{\thehposcnt}{hpos\number\value{hposcnt}}
\newcommand*{\SP}{% set position
  \stepcounter{hposcnt}%
  \zsaveposx{\thehposcnt s}%
}
\makeatletter
\newcommand*{\UP}{% use previous position
  \zsaveposx{\thehposcnt u}%
  \zref@refused{\thehposcnt s}%
  \zref@refused{\thehposcnt u}%
  \kern\zposx{\thehposcnt s}sp\relax
  \kern-\zposx{\thehposcnt u}sp\relax
}
\makeatother

\begin{document}

This \SP is the first line\\
     \UP One more \SP line\\
                  \UP And another.

\end{document}

Resultado

Algumas observações:

  • Os nomes dos rótulos são escolhidos automaticamente com a ajuda de um contador. Isso facilita o uso, pois o usuário não precisa inventar nomes de rótulos exclusivos.

  • Os dados de posição interna são números inteiros com unidade implícita sp.

  • \zref@refusedmarca a referência como usada para permitir ao LaTeX a notificação para referências indefinidas.

Responder2

Para completar, \phantom{<stuff>}também é uma possibilidade:

insira a descrição da imagem aqui

\documentclass{article}
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\setlength{\parindent}{0pt}% For this example.
\begin{document}
\lipsum[2]% Some dummy text.

This is the first line. \par
\leavevmode\phantom{This }One more line. \par
\leavevmode\phantom{This One more }And another.

\lipsum[2]% Some dummy text.
\end{document}

\leavevmodeé obrigatório se o parágrafocomeçacom \phantom.

Responder3

Modo texto

Você poderia usar o tabbingambiente:

\documentclass{article}

\newenvironment{Tabbing}{% see http://tex.stackexchange.com/a/16389/16595
    \vspace{-\baselineskip}%
    \setlength{\topsep}{0pt}\setlength{\partopsep}{0pt}\tabbing%
}{\endtabbing}

\begin{document}
\noindent This is a line before the \verb|Tabbing| environment.
\begin{Tabbing}
    This \= One more \=\kill\\
    This \> is the first line. \\
         \> One more line. \\
         \>        \>And another.
\end{Tabbing}
This is a line after the \verb|Tabbing| environment.
\end{document}

Saída:

Saída para modo texto

Modo matemático

Para matemática, sugiro o alignatambiente:

\begin{alignat*}{2}
\textrm{This } & \rlap{is the first line.} & & \\
               & \textrm{One more }        & &\textrm{line.} \\
               &                           & &\textrm{And another.}
\end{alignat*}

Saída:

Saída para modo matemático

Use \(\displaystyle <math> \)dentro \rlappara voltar ao modo matemático.

Responder4

Ainda outra opção é otabtopacote. Requer que você defina explicitamente as posições das tabulações, mas tem a vantagem de trabalhar além dos limites dos parágrafos, portanto pode ser usado, por exemplo, com listas de itens:

\documentclass{article}
\usepackage{tabto}


\begin{document}
  This \tabto{4em}is the first line. \\
  \tabto{4em}One \tabto{7em}more line. \\
  \tabto{7em}And another.

  \begin{itemize}
    \TabPositions{1cm,2cm}
    \item This \tab is the first line. 
    \item \tab One \tab more line. 
    \item \tab\tab And another.
  \end{itemize}

\end{document}

insira a descrição da imagem aqui

informação relacionada