次の行を正確に指定した位置でインデントしたい

次の行を正確に指定した位置でインデントしたい

私は数学の講義原稿全体をタイプセットしていますが、読みやすさのために、1 行か 2 行を一定量インデントする必要があることがよくあります。このインデントは、常に異なります。表のように & やその他の制御文字を使用して、次の行のインデントを制御する方法が必要です。ただし、表は使用せず、通常のテキストのように見えるようにしたいです。このプロジェクトでは、テキストに数学環境が頻繁に出現するため、数学環境の内外で機能する必要があるのは明らかです。

次のようになります:

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> \)inside を使用します。\rlap

答え4

さらにもう一つの選択肢はtabtoパッケージ。タブ位置を明示的に定義する必要がありますが、段落の境界を越えて機能するという利点があるため、たとえば、項目別リストで使用できます。

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

ここに画像の説明を入力してください

関連情報