【问题标题】:appending a copy of a text block附加文本块的副本
【发布时间】:2021-05-22 10:42:17
【问题描述】:

我正在处理 LaTeX beamer 演示文稿,我想在每个 \item 标题下方添加一个注释部分,它只是复制其文本。例如我有

\begin{frame}{Frame Title}
\begin{itemize}[<+->]
    \item Einstein was a clever man.
    \item My favorite equation is,
    \begin{equation}
        E = m c^2.
    \end{equation} where
    \begin{enumerate}
        \item $m$ is the mass,
        \item $c$ the velocity of light and,
        \item $E$ is the energy.
    \end{enumerate}
\end{itemize}
\end{frame}

我想拥有

\begin{frame}{Frame Title}
\begin{itemize}[<+->]
    \item Einstein was a clever man.
    \note<.>[item]{
          Einstein was a clever man.
    }
    \item My favorite equation is,
    \begin{equation}
        E = m c^2.
    \end{equation} where
    \begin{enumerate}
        \item $m$ is the mass,
        \item $c$ the velocity of light and,
        \item $E$ is the energy.
    \end{enumerate}

    \note<.>[item] { 
          My favorite equation is,
    \begin{equation}
        E = m c^2.
    \end{equation where
    \begin{enumerate}
        \item $m$ is the mass,
        \item $c$ the velocity of light and,
        \item $E$ is the energy.
    \end{enumerate}
    }
\end{itemize}
\end{frame}

如何在vim 中或使用awksed 等命令行工具执行此操作?

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

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

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

【问题讨论】:

  • 请在您的问题中添加您的努力,我们非常鼓励您这样做,谢谢。
  • 期望结果和原始状态之间的差异与以下问题不一致:a)没有提到调整缩进或应该或不应该嵌套什么,b)要求发生一些事情“在每个\item"下方。
  • 感谢@romainl 指出这一点。我已经修复了缩进,并且我希望每个顶级 \item 列表在它们下方但在 \note&lt;.&gt;[item]{...} 块内重复。

标签: awk vim sed


【解决方案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 

关注\begin{itemize}\end{itemize} 之间的行

制作每个\item 的副本并将副本附加到每个\item 节,将\item 命令替换为所需的\note 命令。

注意解决方案取决于\item 命令的空格缩进,目前缩进设置为 4 个空格,但可以使用制表符(参见第二行开头的正则表达式)。

【讨论】:

  • 您先生是个天才! @potong
  • 快速跟进。如果\begin{itemize}[&lt;+-&gt;] .. \end{itemize} 块向前缩进一个制表符/4 个空格会怎样——表达式会如何变化?
  • @marital_weeping 然后更改解决方案第一行中的正则表达式,即/^( {4}|\t)\\begin\{itemize\}/{:a;n;/^( {4}|\t)\\end\{itemize\}/bb
猜你喜欢
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-09
  • 2015-07-10
  • 2014-07-22
相关资源
最近更新 更多