经文后的 Flagverse 命令

经文后的 Flagverse 命令

verse包中,可以使用 来在行前写入任何内容\flagverse{}。但是,此命令也必须位于行前。这给读取源代码中的行带来了一些麻烦,因为区分什么是行,什么是标志会造成混淆;所以我想修改它,以便将命令放在\flagverse{}行后,但仍然以这样的方式在 pdf 中将标志显示在行前。

该命令的来源是:

\newcommand{\flagverse}[1]{%
\hskip-\vleftskip\llap{#1}\hskip\vleftskip
\ignorespaces
}

我需要的是\newcommand这样的

\begin{verse}
this is a line \\
this is another line \flagverse{this is a flag} \\
\end{verse}

生产

                  this is a line
this is a flag    this is another line 

答案1

您可以测量标志的位置(在零宽度框中)并添加合适的字距以将文本移到左侧。

\documentclass{article}
\usepackage{verse}
\usepackage{zref,zref-user,zref-savepos}
\usepackage{showframe}

\usepackage{lipsum}

\newcounter{postflagverse}
\makeatletter
\newcommand{\postflagverse}[1]{%
  \@bsphack
  \stepcounter{postflagverse}%
  \zlabel{pfv@\thepostflagverse @page}%
  \zsaveposx{pfv@\thepostflagverse @pos}%
  \makebox[0pt][r]{%
    #1%
    \kern\dimexpr
      \zposx{pfv@\thepostflagverse @pos}sp -
      \ifodd\zref@extractdefault{pfv@\thepostflagverse @page}{pagevalue}{\number\c@page} %
        \oddsidemargin
      \else
        \evensidemargin
      \fi - 1in -
      \leftmargin + 2\vleftskip
    \relax
  }%
  \@esphack
  \ignorespaces
}
\makeatother

\begin{document}

\lipsum[1][1-4]

\begin{verse}
\flagverse{flag}
this is a line \\
\flagverse{this is a flag}
this is another line \\
this is another line \postflagverse{this is a flag}
\end{verse}

\begin{verse}[10em]
\flagverse{flag}
this is a line \\
\flagverse{this is a flag}
this is another line \\
this is another line \postflagverse{this is a flag}
\end{verse}

\end{document}

在此处输入图片描述

相关内容