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