2013-02-28 41 views
19

Tôi muốn có mã và hình ảnh song song trong trang chiếu Beamer.Trang trình bày có Cột trong Pandoc

Trong LaTeX, tôi sẽ làm điều này với các cột. Tôi muốn sử dụng markdown trong cấu trúc cột.

\begin{columns} 
\column{.5\textwidth} 

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

\column{.5\textwidth} 

![](A_generated_image.pdf) 

\end{columns} 

Thật không may Pandoc không xử lý sự đánh dấu trong các câu lệnh \ begin {columns} và \ end {columns}. Có cách nào để giái quyết vấn đề này không?

  • Có cách nào để sử dụng đánh dấu trong LaTeX được gạch chân không?
  • Có giải pháp đánh dấu thuần túy không?
+0

Bạn có thể quan tâm câu hỏi gần đây này trên tex.sx: http: // tex .stackexchange.com/questions/101717/conversion-markdown-to-latex-in-latex/101731. –

+0

Bạn đã thử đặt hình trong bảng? – Jakob

Trả lời

2

Bạn có thể sử dụng FletcherPenney MultiMarkdown để có thể xử lý markdown thành LaTeX/Beamer. So với Pandoc, MultiMarkdown không có nhiều tính năng như vậy. Tuy nhiên, đặc biệt là khi làm việc với LaTeX, nó có lợi thế là bạn có thể nhúng mã LaTeX trực tiếp vào trong đánh dấu nhận xét trong HTML.

Mã của bạn sẽ trông như thế này:

<!-- \begin{columns} --> 
<!-- \column{.5\textwidth} --> 

     >>> some python code 


<!-- \column{.5\textwidth} --> 

![](A_generated_image.pdf) 

<!-- \end{columns} --> 

Đối với tôi giải pháp này hoạt động tốt. Với trình chỉnh sửa tốt (ví dụ: Scrivener, Sublime Text), bạn có thể viết mã latex mà không cần tất cả nhận xét và tìm/thay thế chúng sau khi chỉnh sửa. Ngoài ra, hỗ trợ Siêu dữ liệu trong Multimarkdown linh hoạt hơn nhiều, để dễ dàng tùy chỉnh các bản trình bày hơn.

Trong thời gian chờ đợi, tôi hy vọng rằng nhóm Pandoc cung cấp giải pháp cho vấn đề này. Tôi nghĩ rằng có một số người dùng muốn nhúng các hạt mã LaTex nhỏ trong suốt tài liệu đánh dấu của họ mà không cần phải chuyển đổi/thoát.

2

Bạn có thể sử dụng nhận xét MultiMarkDown ("<! - Mã LaTeX của bạn bên trong ->") với Pandoc khi bạn đính kèm lệnh Pandoc trong đó bạn chuyển đổi dấu xuống LaTeX bằng hai lệnh sed.

Trong lần chạy sed đầu tiên, bạn thay đổi nhận xét MultiMarkDown thành "\ verb + AAAAAAALaTeX-StuffZZZZZZ +". Sau đó, bạn chuyển sang LaTeX với Pandoc như thường lệ, mọi thứ bên trong "\ verb + AAAAAAALaTeX-StuffZZZZZZZ +" bị bỏ lại một mình. Sau đó, bạn chạy sed trên TeX-File và xóa "\ verb + AAAAAAA" và "ZZZZZZ +" để mở mã LaTeX của bạn.

Đầu tiên dòng lệnh sed trước khi chuyển đổi Pandoc có thể trông như thế này:

sed -E -e "s/<\\!--(.+)--\\>/\\\\verb\+AAAAAAA\1ZZZZZZZ\+/g " \ 
    source.md > source.i.md 

Sau đó sử dụng Pandoc trên source.i.md như bình thường để tạo ra source.tex. Thứ hai sed chạy như thế này:

sed -E -e "s/\\\\verb\+AAAAAAA(.+)ZZZZZZZ\+/\1/g" -i "" source.tex 

Tôi tự động hóa mọi thứ trong Makefile để tôi có thể thực hiện nhiều thay đổi, ví dụ: để định nghĩa bảng trong một bước. Thoạt nhìn, cách tiếp cận này hoạt động tốt (kiểm tra nó trên các định nghĩa cột với lớp beamer).

Với ít tập lệnh sed này, bạn có thể sử dụng tất cả những điều tốt đẹp từ Pandoc. Bạn chỉ cần để mmd-nhận xét những lệnh TeX và LaTeX mà trở thành một trong hai trốn thoát hoặc kèm theo các phần lớn hơn của Markdown của bạn.

15

Tôi hy vọng vẫn còn giá trị.Tôi đã thực hiện một Pandoc filter bằng Python để đặt cột một cách dễ dàng, vì vậy bạn có thể viết các bài thuyết trình của bạn theo cách này:

# 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] 

rằng bộ lọc sẽ chuyển đổi từng đánh dấu để \ begin {cột} và \ cột {0,5 \ textwidth} , vì vậy, các tài liệu trên sẽ lần lượt trong

\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} 

Bộ lọc đang ở đây

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) 

Nếu bạn không bao giờ sử dụng một bộ lọc pandoc, chỉ cần lưu các bộ lọc để vị trí cùng một tài liệu như columnfilter.py (hoặc tên khác bạn muốn) và chạy

pandoc -t beamer --filter columnfilter.py yourDocument.mkd 

Và tận hưởng!

+0

Điều này thực sự gọn gàng, cảm ơn! – naught101

+1

Sẽ tốt hơn nếu đặt nó vào một gist (hoặc địa điểm tương tự), nơi người dùng có thể báo cáo vấn đề. – Dilawar

17

Vấn đề là pandoc bỏ qua đánh dấu nếu thấy số \begin{}. Một cách khác là để chỉnh sửa các mẫu máy chiếu và thêm dòng sau:

\newcommand{\columnsbegin}{\begin{columns}} 
\newcommand{\columnsend}{\end{columns}} 

Và viết nó như thế này:

\columnsbegin 
\column{.5\textwidth} 

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

\column{.5\textwidth} 

![](A_generated_image.pdf) 

\columnsend 
Các vấn đề liên quan