我对 LaTeX 并不陌生,但我从未真正编写过真正的 LaTeX 脚本,因此我很难调试我手头的脚本。我会发布具体的问题,这样我就可以找到一些可以参考的内容,但我实际上想了解和解决具体问题,并了解通常如何做到这一点。因此问题本身:
我正在使用beamer
并尝试使用该包pdfpcnotes
来增加命令的功能note
(这是 git repo:https://github.com/cebe/pdfpc-latex-notes/blob/master/pdfpcnotes.sty)
这是我的妈妈:
\documentclass[]{beamer}
\usepackage{pdfpcnotes}
\begin{document}
\frame{
\frametitle{1. frame}
}
\pnote{first note}
\frame{
\frametitle{2. frame}
}
\pnote{second note}
\end{document}
运行pdflatex
该程序将产生以下输出mwe.pdfpc
:
[notes]
### 1
first note
second note
但实际上应该是
[notes]
### 1
first note
### 2
second note
问题本身将围绕脚本的 if-else 部分。有人可以发布一个关于如何解决此类问题的演练吗?我发现很难理解 LaTeX 的工作原理以及如何从中获取内部信息。
答案1
错误在于
\let\lastframenumber\theframenumber
因为\theframenumber
是\@arabic\c@framenumber
,而不是直接的值。
要查看此内容,请添加\show\theframenumber
以下内容begin{document}
并从终端进行编译。执行将在此处停止并显示
> \theframenumber=macro:
->\@arabic \c@framenumber .
l.5 \show\theframenumber
?
按回车键将恢复执行。
解决方案:\edef\lastframenumber{\theframenumber}
完整示例(文档中的包代码):
\documentclass[]{beamer}
%\usepackage{pdfpcnotes}
\makeatletter
% create a new file handle
\newwrite\pdfpcnotesfile
% open file on \begin{document}
\AtBeginDocument{%
\immediate\openout\pdfpcnotesfile\jobname.pdfpc\relax
\immediate\write\pdfpcnotesfile{[notes]}%
}
% define a # http://tex.stackexchange.com/a/37757/10327
\begingroup
\catcode`\#=12
\gdef\three@hashchars@space{###\space}%
\endgroup
\def\lastframenumber{0}
% define command \pnote{} that works like note but
% additionally writes notes to file in pdfpc readable format
\newcommand{\pnote}[1]{%
% keep normal notes working
\note{#1}%
% if frame changed - write a new header
\ifdim\theframenumber pt>\lastframenumber pt
\edef\lastframenumber{\theframenumber}%
\immediate\write\pdfpcnotesfile{\three@hashchars@space\theframenumber}%
\fi
% write note to file
\immediate\write\pdfpcnotesfile{\unexpanded{#1}}%
}
% close file on \begin{document}
\AtEndDocument{%
\immediate\closeout\pdfpcnotesfile
}
\makeatother
\begin{document}
\frame{
\frametitle{1. frame}
}
\pnote{first note}
\frame{
\frametitle{2. frame}
}
\pnote{second note}
\end{document}
输出文件:
[notes]
### 1
first note
### 2
second note
答案2
您的文档应该使用 beamer 进行更好的结构化,但我不知道它是否能解决您的问题
\begin{frame}
\frametitle{}
\pnote{my note}
\end{frame}
由于\pnote
其作用类似\note
,因此它应该在框架内。