附加文本块的副本

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 中或使用awksed 等命令行工具执行此操作?

通过vim,我可以复制并附加以\item 模式开头的独立行

:g/^\\item/ copy . | s//\\note\item\<.>\/g

但我无法捕获属于每个***\item 的整个块。

【问题讨论】:

请在您的问题中添加您的努力,我们非常鼓励您这样做,谢谢。 期望结果和原始状态之间的差异与以下问题不一致:a)没有提到调整缩进或应该或不应该嵌套什么,b)要求发生一些事情“在每个\item"下方。 感谢@romainl 指出这一点。我已经修复了缩进,并且我希望每个*** \item 列表在它们下方但在 \note&lt;.&gt;[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[&lt;+-&gt;] .. \enditemize 块向前缩进一个制表符/4 个空格会怎样——表达式会如何变化? @marital_weeping 然后更改解决方案第一行中的正则表达式,即/^( 4|\t)\\begin\itemize\/:a;n;/^( 4|\t)\\end\itemize\/bb

以上是关于附加文本块的副本的主要内容,如果未能解决你的问题,请参考以下文章

HDFS上文件块的副本数设置

Python:附加原始对象与附加对象副本[重复]

将行附加到 pandas DataFrame 而不制作新副本

在 numpy 数组的末尾附加 n 个数组副本

Perl — 创建文件的编号备份副本

未设置 lambda 返回类型时 std::transform 中的附加副本