从上一行结束的位置开始一行

从上一行结束的位置开始一行

我一直使用 LaTeX 来处理信件和科学报告等标准内容。最近我去看望了祖母,她会写一些诗,我告诉她我可以用她手写的诗句制作一个漂亮的 PDF——我开始后悔了 :P... 我使用了包诗句,一切正常,但在一些特定的诗歌中,她想要一种非常“奇特”的定位。她想要一些行与行结束的位置完全相同就像在这个例子中:

诗

你知道我怎样才能编写一个神奇的命令,\magicom{}当像这样使用时,它会生成上面的文本:

This is some\\
\magicom{}text I would\\
like to\\
\magicom{}format\\
How can I do this with\\
\magicom{}LaTeX?

答案1

标准 TeX 有一种方法可以测量部分段落的最后一行,虽然有点狡猾,但你还是可以做到的。至少它使文档内部的编码变得简单易行:使用 来表示普通换行符,\\使用 来表示特殊换行符\magicom。这甚至可以自动断开某些行。

\documentclass{article}

\makeatletter
\def\magicomadjust{0em}  % a way to adjust if the spacing should be different
\newdimen\indent@amount
\def\magicom{\relax
  \ifhmode $$%
    \predisplaypenalty\@M \postdisplaypenalty\@M
    \abovedisplayskip-\baselineskip \belowdisplayskip\z@
    \abovedisplayshortskip\abovedisplayskip
    \belowdisplayshortskip\belowdisplayskip
    \global\indent@amount\predisplaysize
     $$\count@\prevgraf \advance\count@-\thr@@
         \prevgraf\count@
    \global\advance\indent@amount-2em  % correction for \predisplaysize indent
    \global\advance\indent@amount\magicomadjust  % correction for verse env, for example
    \hspace*\indent@amount
  \else\typeout{*Not in hmode*}\fi}
\makeatother


\begin{document}

%\begin{verse}
This is some\magicom
text I would\\
like to\magicom
format and it nicely allows for several lines  written with automatic lines breaks as well, as we can see here.
How can I do this with\magicom
\LaTeX?
%\end{verse}

\end{document}

这给我们提供了:

在此处输入图片描述

如果我们取消注释verse上面的环境并使用

\renewcommand\magicomadjust{-4em}

我们得到以下结果:

在此处输入图片描述

代码起什么作用?

  • 测试我们是否处于水平模式(如果没有警告)
  • 开始显示数学公式(确实:-)
  • 为数学显示设置各种变量,以便该显示不会真正显示并弄乱间距(垂直跳过是上面的负基线和下面的零,设置了惩罚,所以这不会引入中断,...)
  • 然后我们存储\predisplaysize距离(即显示前最后一行的宽度 + 2em)...其他一切都只是为了设置这个变量,即为我们进行测量
  • 然后我们结束显示(它占用一行(空),并且由于上述设置,这是不可见的
  • 在显示之后,我们必须将 的值减少\prevgraf3,因为显示占用 3 行(在 TeX 的计数中名义上如此)。在某些情况下,当\parshape有效时,可能需要这样做
  • 然后我们将保存的值减少 2em,然后添加\magicomadjust(我用作verse示例
  • 最后我们使用结果值来产生显示后所需的缩进

答案2

环境tabbing提供了此功能,您可以通过以下方式指定选项卡\=并使用以下方式跳转到它们\>

在此处输入图片描述

\documentclass{article}
\begin{document}
\begin{tabbing}
This is some \= text I would \\
\> text I would \\
like to \= format \\
\> format \\
How can I do this with \= \LaTeX? \\
\> \LaTeX?
\end{tabbing}
\end{document}

为了完整起见,我将内容翻倍,以便您可以看到制表符位于适当的水平位置。更多有关使用的帮助tabbing可从 TeX Blog 获取

答案3

我认为如果您将其视为降低当前行的其余部分而不是让下一行从上一行结束的地方开始,则会更简单(并且需要更少的标记)。

在此处输入图片描述

\documentclass{article}
{\obeylines%
\gdef\drop#1
{\smash{\lower\baselineskip\hbox{#1}}\par\vskip\baselineskip}}%
\begin{document}

\obeylines
This is some \drop text I would 
like to \drop format
How can I do this with \drop \LaTeX?

\end{document}

答案4

例如(您可以注释以 开头的行\leavevmode)。我们观察一下,与其他一些解决方案不同,不需要重复文本。

\documentclass{article}


\begin{document}


\def\magiccom#1{{#1}\\ \leavevmode\phantom{#1}}

\begin{verse}
Do you know how I could, for instance, write a magic command\\
\leavevmode\phantom{Do you know how I could,} for instance, write a magic command\\
\magiccom{Do you know how I could,} for instance, write a magic command

\end{verse}
\end{document}

在此处输入图片描述

相关内容