我想有代码和图像并排在一个Beamer幻灯片。
在LaTeX中,我会对列执行此操作。我想在列结构中使用markdown。
\begin{columns}
\column{.5\textwidth}
~~~~~~~~Python
>>> some python code
~~~~~~~
\column{.5\textwidth}
![](A_generated_image.pdf)
\end{columns}
不幸的是,Pandoc不会处理\begin{columns}和\end{columns}语句中的标记。有什么办法可以解决这个问题吗?
发布于 2018-09-03 02:48:22
当前版本的pandoc (即Pandoc2.0及更高版本)支持fenced divs。当以幻灯片格式为目标时,特殊命名的div会转换为列:
# This slide has columns
::: columns
:::: column
left
::::
:::: column
right
::::
:::
Pandoc将其转换为以下LaTeX波束代码:
\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,必须显式给出三列或更多列的宽度:
::: columns
:::: {.column width=30%}
left
::::
:::: {.column width=30%}
middle
::::
:::: {.column width=30%}
right
::::
:::
发布于 2014-06-04 22:23:56
我希望它仍然有价值。我用Python语言做了一个Pandoc filter,方便地放入专栏,所以你可以这样写你的演示文稿:
# 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},因此,上面的文档将转换为
\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}
代码筛选器在这里
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
(或所需的其他名称)相同的文档位置,然后运行
pandoc -t beamer --filter columnfilter.py yourDocument.mkd
尽情享受吧!
发布于 2014-09-27 07:35:37
问题是,如果pandoc
找到一个\begin{}
,它会忽略markdown。另一种方法是编辑beamer模板并添加以下内容:
\newcommand{\columnsbegin}{\begin{columns}}
\newcommand{\columnsend}{\end{columns}}
然后写成这样:
\columnsbegin
\column{.5\textwidth}
~~~~~~~~Python
>>> some python code
~~~~~~~
\column{.5\textwidth}
![](A_generated_image.pdf)
\columnsend
https://stackoverflow.com/questions/15142134
复制相似问题