Я хочу сделать отступ следующей строки на точно указанную позицию

Я хочу сделать отступ следующей строки на точно указанную позицию

Я набираю целый сценарий лекции по математике, где для удобства чтения мне часто требуется сделать отступ только одной или двух строк на определенное количество, что ВСЕГДА отличается. Я хотел бы иметь какой-то способ контролировать отступ следующей строки с помощью &, как в таблицах, или любого другого управляющего символа. Я не хочу использовать таблицы, я хочу, чтобы это выглядело как обычный текст. Очевидно, что это должно работать внутри и вне математических сред, поскольку они довольно часто встречаются в тексте для этого проекта.

Это должно выглядеть примерно так:

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

При этом управляющие символы находятся перед «is» и «line».

Есть ли простое в использовании решение? Мне все равно, если его сложно настроить один раз, главное, чтобы пользоваться им было просто каждый раз.

решение1

Большинство компиляторов TeX предоставляют функцию \pdfsavepos, которая позволяет записывать позицию на странице отправки. Она была введена в pdfTeX и в настоящее время доступна в pdfTeX, в обоих режимах DVI и PDF, XeTeX и LuaTeX.

Поскольку позиция неизвестна, перед выводом страницы требуется некая система отсчета. Пакет zref-saveposпроекта zrefпредоставляет интерфейс к \pdfsaveposфункции.

\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}

Результат

Некоторые замечания:

  • Названия меток выбираются автоматически с помощью счетчика. Это упрощает использование, так как пользователю не нужно придумывать уникальные названия меток.

  • Внутренние данные о положении представляют собой целые числа с неявной единицей измерения sp.

  • \zref@refusedпомечает ссылку как используемую, чтобы разрешить LaTeX уведомлять о неопределенных ссылках.

решение2

Для полноты картины \phantom{<stuff>}также возможен вариант:

введите описание изображения здесь

\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требуется, если абзацначинаетсяс \phantom.

решение3

Текстовый режим

Вы можете использовать tabbingсреду:

\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}

Выход:

Вывод для текстового режима

Математический режим

Для математики я бы предложил alignatсреду:

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

Выход:

Выход для математического режима

Нажмите \(\displaystyle <math> \)внутри \rlap, чтобы вернуться в математический режим.

решение4

Еще один вариант —tabtopackage. Он требует от вас явного определения позиций табуляции, но имеет преимущество в работе с границами абзацев, поэтому его можно использовать, например, со списками элементов:

\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}

введите описание изображения здесь

Связанный контент