附加文本块的副本
Posted
技术标签:
【中文标题】附加文本块的副本【英文标题】:appending a copy of a text block 【发布时间】:2021-05-22 10:42:17 【问题描述】:我正在处理 LaTeX
beamer
演示文稿,我想在每个 \item
标题下方添加一个注释部分,它只是复制其文本。例如我有
\beginframeFrame Title
\beginitemize[<+->]
\item Einstein was a clever man.
\item My favorite equation is,
\beginequation
E = m c^2.
\endequation where
\beginenumerate
\item $m$ is the mass,
\item $c$ the velocity of light and,
\item $E$ is the energy.
\endenumerate
\enditemize
\endframe
我想拥有
\beginframeFrame Title
\beginitemize[<+->]
\item Einstein was a clever man.
\note<.>[item]
Einstein was a clever man.
\item My favorite equation is,
\beginequation
E = m c^2.
\endequation where
\beginenumerate
\item $m$ is the mass,
\item $c$ the velocity of light and,
\item $E$ is the energy.
\endenumerate
\note<.>[item]
My favorite equation is,
\beginequation
E = m c^2.
\endequation where
\beginenumerate
\item $m$ is the mass,
\item $c$ the velocity of light and,
\item $E$ is the energy.
\endenumerate
\enditemize
\endframe
如何在vim
中或使用awk
或sed
等命令行工具执行此操作?
通过vim
,我可以复制并附加以\item
模式开头的独立行
:g/^\\item/ copy . | s//\\note\item\<.>\/g
但我无法捕获属于每个***\item
的整个块。
【问题讨论】:
请在您的问题中添加您的努力,我们非常鼓励您这样做,谢谢。 期望结果和原始状态之间的差异与以下问题不一致:a)没有提到调整缩进或应该或不应该嵌套什么,b)要求发生一些事情“在每个\item
"下方。
感谢@romainl 指出这一点。我已经修复了缩进,并且我希望每个*** \item
列表在它们下方但在 \note<.>[item]...
块内重复。
【参考方案1】:
这可能对你有用(GNU sed):
sed -E '/^\\begin\itemize\/:a;n;/^\\end\itemize\/bb
/^( 4|\t)\\item/
:b;x;s/^(\s*)\\item(.*)/\1\\note<.*>[item]\n\1\1\2\n\1/p;x;h;ba
H;ba' file
关注\beginitemize
和\enditemize
之间的行
制作每个\item
的副本并将副本附加到每个\item
节,将\item
命令替换为所需的\note
命令。
注意解决方案取决于\item
命令的空格缩进,目前缩进设置为 4 个空格,但可以使用制表符(参见第二行开头的正则表达式)。
【讨论】:
您先生是个天才! @potong 快速跟进。如果\beginitemize[<+->] .. \enditemize
块向前缩进一个制表符/4 个空格会怎样——表达式会如何变化?
@marital_weeping 然后更改解决方案第一行中的正则表达式,即/^( 4|\t)\\begin\itemize\/:a;n;/^( 4|\t)\\end\itemize\/bb
以上是关于附加文本块的副本的主要内容,如果未能解决你的问题,请参考以下文章