我已经尝试了this question的答案,但我无法使用Pandoc中的内部部分链接来处理Latex Beamer输出。
在Pandoc Documentation之后,我创建了这个最小的工作示例:
# Part One {#part-one}
## Section One {#section-one}
### Frame one {#frame-one}
- Items...
### Frame two {#frame-two}
- Items...
- Link to [Section One](#section-one)
使用以下方式构建它:
pandoc \
--table-of-contents \
-s -t beamer test.md \
-o test.pdf
内置的LaTex Beamer pdf看起来不错,但内部链接[Section One](#section-one)
无效。它应该把我带到“第一节”框架,但事实并非如此。我该如何工作?
编辑:这是-o test.latex
的LaTex输出:
\documentclass[]{beamer}
\setbeamertemplate{caption}[numbered]
\setbeamertemplate{caption label separator}{:}
\setbeamercolor{caption name}{fg=normal text.fg}
\usepackage{amssymb,amsmath}
\usepackage{ifxetex,ifluatex}
\usepackage{fixltx2e} % provides \textsubscript
\usepackage{lmodern}
\ifxetex
\usepackage{fontspec,xltxtra,xunicode}
\defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}
\newcommand{\euro}{€}
\else
\ifluatex
\usepackage{fontspec}
\defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}
\newcommand{\euro}{€}
\else
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\fi
\fi
% use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
% use microtype if available
\IfFileExists{microtype.sty}{\usepackage{microtype}}{}
% Comment these out if you don't want a slide with just the
% part/section/subsection/subsubsection title:
\AtBeginPart{
\let\insertpartnumber\relax
\let\partname\relax
\frame{\partpage}
}
\AtBeginSection{
\let\insertsectionnumber\relax
\let\sectionname\relax
\frame{\sectionpage}
}
\AtBeginSubsection{
\let\insertsubsectionnumber\relax
\let\subsectionname\relax
\frame{\subsectionpage}
}
\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt plus 2pt minus 1pt}
\setlength{\emergencystretch}{3em} % prevent overfull lines
\setcounter{secnumdepth}{0}
\date{}
\begin{document}
\begin{frame}
\tableofcontents[hideallsubsections]
\end{frame}
\part{Part One}\label{part-one}
\hyperdef{}{section-one}{\section{Section One}\label{section-one}}
\begin{frame}{Frame one}
\begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt
\item
Items\ldots{}
\end{itemize}
\end{frame}
\begin{frame}{Frame two}
\begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt
\item
Items\ldots{}
\item
Link to \hyperref[section-one]{Section One}
\end{itemize}
\end{frame}
\end{document}
答案 0 :(得分:1)
我认为我已将其指向ignorenonframetext
中的\documentclass[ignorenonframetext,]{beamer}
,这是默认Pandoc投影机模板的一部分。
由于\hyperdef{}{part-one}{\section{Part One}\label{part-one}}
不在frame
内,因此显然会被hyperref忽略。
您是否可以尝试在没有pandoc -D beamer > mytemplate.tex
的情况下创建自己的template(ignorenonframetext
)并查看其是否有效且没有任何不良副作用? (当手动测试.tex时,我总是必须运行两次LaTeX才能使更改生效。)
答案 1 :(得分:0)
内部链接有效,只要它们指向幻灯片(而不是部分)即可。因此,以下方法应该起作用:
# Part One {#part-one}
## Section One {#section-one}
### Frame one {#frame-one}
- Items...
### Frame two {#frame-two}
- Items...
- Link to [Section One](#frame-one)
当然,此解决方法链接到该节的第一页,因此(1)在将幻灯片添加到该节的开头时必须要小心,(2)如果该节有自动节,则该方法不起作用您要链接到的页面。在这种情况下,我看到两个选择:
\hyperlinksectionstart{text}
和\hyperlinksectionstartnext{text}
(beameruserguide
中似乎没有记录,请参见{{3 }}。