首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Pandoc中包含列的幻灯片

Pandoc中包含列的幻灯片
EN

Stack Overflow用户
提问于 2013-03-01 01:43:07
回答 6查看 11.8K关注 0票数 32

我想有代码和图像并排在一个Beamer幻灯片。

在LaTeX中,我会对列执行此操作。我想在列结构中使用markdown。

代码语言:javascript
复制
\begin{columns}
\column{.5\textwidth}

~~~~~~~~Python
>>> some python code
~~~~~~~

\column{.5\textwidth}

![](A_generated_image.pdf)

\end{columns}

不幸的是,Pandoc不会处理\begin{columns}和\end{columns}语句中的标记。有什么办法可以解决这个问题吗?

  • 是否有在内联LaTeX中使用标记的方法?
  • 是否有纯粹的标记解决方案?
EN

回答 6

Stack Overflow用户

发布于 2018-09-03 02:48:22

当前版本的pandoc (即Pandoc2.0及更高版本)支持fenced divs。当以幻灯片格式为目标时,特殊命名的div会转换为列:

代码语言:javascript
复制
# This slide has columns

::: columns

:::: column
left
::::

:::: column
right
::::

:::

Pandoc将其转换为以下LaTeX波束代码:

代码语言:javascript
复制
\begin{frame}{This slide has columns}
\protect\hypertarget{this-slide-has-columns}{}

\begin{columns}[T]
\begin{column}{0.48\textwidth}
left
\end{column}

\begin{column}{0.48\textwidth}
right
\end{column}
\end{columns}

\end{frame}

这很简单,而且在针对其他表示格式(如reveal.js )时,它还有一个额外的优势,即给出类似的结果。

对于Beamer输出,开箱即用的列超过两列。然而,Powerpoint只支持两列。对于reveal.js,必须显式给出三列或更多列的宽度:

代码语言:javascript
复制
::: columns

:::: {.column width=30%}
left
::::

:::: {.column width=30%}
middle
::::

:::: {.column width=30%}
right
::::

:::
票数 29
EN

Stack Overflow用户

发布于 2014-06-04 22:23:56

我希望它仍然有价值。我用Python语言做了一个Pandoc filter,方便地放入专栏,所以你可以这样写你的演示文稿:

代码语言:javascript
复制
# Hello World

[columns]

[column=0.5]

~~~python
    if __name__ == "__main__":
        print "Hello World"
~~~

[column=0.5]

This is how a "Hello World" looks like in Python

[/columns]

过滤器会将每个标记转换为\begin{columns}和\column{.5\textwidth},因此,上面的文档将转换为

代码语言:javascript
复制
\begin{frame}[fragile]{Hello}

\begin{columns}

\column{0.5\textwidth}

\begin{Shaded}
\begin{Highlighting}[]
    \NormalTok{some python code}
\end{Highlighting}
\end{Shaded}

\column{0.5\textwidth}

Hello World

\end{columns}

\end{frame}

代码筛选器在这里

代码语言:javascript
复制
import pandocfilters as pf

def latex(s):
    return pf.RawBlock('latex', s)

def mk_columns(k, v, f, m):
    if k == "Para":
        value = pf.stringify(v)
        if value.startswith('[') and value.endswith(']'):
            content = value[1:-1]
            if content == "columns":
                return latex(r'\begin{columns}')
            elif content == "/columns":
                return latex(r'\end{columns}')
            elif content.startswith("column="):
                return latex(r'\column{%s\textwidth}' % content[7:])

if __name__ == "__main__":
    pf.toJSONFilter(mk_columns)

如果您从不使用pandoc筛选器,只需将筛选器保存到与columnfilter.py (或所需的其他名称)相同的文档位置,然后运行

代码语言:javascript
复制
pandoc -t beamer --filter columnfilter.py yourDocument.mkd

尽情享受吧!

票数 21
EN

Stack Overflow用户

发布于 2014-09-27 07:35:37

问题是,如果pandoc找到一个\begin{},它会忽略markdown。另一种方法是编辑beamer模板并添加以下内容:

代码语言:javascript
复制
\newcommand{\columnsbegin}{\begin{columns}}
\newcommand{\columnsend}{\end{columns}}

然后写成这样:

代码语言:javascript
复制
\columnsbegin
\column{.5\textwidth}

~~~~~~~~Python
>>> some python code
~~~~~~~

\column{.5\textwidth}

![](A_generated_image.pdf)

\columnsend
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15142134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档