扩展草稿模式,包括用于手动打印输出到源同步的源信息

扩展草稿模式,包括用于手动打印输出到源同步的源信息

我正在寻找一种扩展草稿模式,将段落、章节命令和图形等的源代码位置作为 marginpars 或类似内容放置在 PDF 中,以便它们出现在打印输出上。

背景

我经常将我的论文草稿或(部分)论文以 PDF 格式分别交给我的合著者/贡献者和/或主管。他们通常会将其打印出来并在纸上进行更正和注释。我们通常会见面,我会带一台上网本(小型笔记本电脑),这样我就可以在我们讨论时直接对 LaTeX 代码进行更改。

问题是他们做出这样的陈述:“在第 Y 段第 X 行它应该是不是酒吧”或“图X应该更大”。现在我很难将其转换为 LaTeX 源代码中的位置。我想我可以使用 SyncTeX 并打开 PDF,然后单击他们提到的位置以转到源代码(到目前为止我从未使用过它),但这在这种情况下不起作用,因为通常,自从他们打印出 PDF 后,我已经对源文件做了一些更改!编辑应该快速而简单,所以我无法处理两个不同版本的源代码和 PDF 等。目前,我只是搜索他们提到的原始文本的部分,但这并不总是有效,因为由于换行符等原因,此文本可能不像源文件中的文本那样完全逐字逐句。

任务:

我喜欢得到以下信息:

  • 在每个章节标题和段落开头(即每个段落一个数字)旁边,我喜欢显示源行号(例如\marginpar
  • 在源文件的代码开始的地方(\included 章节以及包含使用的部分\input),我喜欢打印源文件的名称。
  • 在显示图像时,应使用图像文件的名称来标记图形!如果图形是tikzpicture来自外部文件的图表(等等),则还应显示文件名。(实际上,从上一点来看,可能已经是这种情况了)。
  • \labels 和\refs 应使用内部名称显示(\marginpar再次显示为 s)
  • 奖励:引用键(\cite)应该像标签一样显示。

我知道有些包确实会显示标签,所以这应该很容易做到,但我认为其余部分需要一些自定义代码。

答案1

在每个段落开头添加输入行号的基本功能可以通过如下方式实现:

\usepackage[excludeor]{everyhook}
\usepackage{marginnote}
\newif\ifnotmarginhook
\notmarginhooktrue
\PushPostHook{par}{%
  \ifnotmarginhook
  \notmarginhookfalse
  \marginnote{\small\ttfamily\the\inputlineno}
  \notmarginhooktrue
  \fi
}

我厚颜无耻地从TH 的回答回答相关问题。关于这个问题,人们说像这样插入段落不是一个好主意,因为段落会构建许多意想不到的东西。所以使用时请自担风险。

我想最好添加一个“只在每个n段落”选项:这不会需要太多的工作,只需要一点反击和\ifnum魔法......

我已经开始着手开发一个基于这个答案的软件包。github 在这里。它有一个safemode选项,不进行任何段落挂钩技巧,因此应该更安全。相反,它只是直接修补特定环境和分段命令。如果上述情况中断,这应该更强大。safemode目前无法使用,titlesec因为它看起来titlesec不使用\@startsection。(或者发生了一些更奇怪的事情......)

使用 Martin Scharrer 自己的filehookcurrfile包,您可以标示输入文件的开始和结束位置,如下所示:

\usepackage{filehook,marginnote}
\AtBeginOfInputs{%
  \@reversemargintrue
  \notmarginhookfalse
  \marginnote{\ttfamily\currfilename}
  \@reversemarginfalse
  \notmarginhooktrue
}

\AtEndOfInputs{%
  \@reversemargintrue%
  \notmarginhookfalse
  \marginnote{\ttfamily End \currfilename}%
  \@reversemarginfalse%
  \notmarginhooktrue
}

只是\@reversemargintrue为了让注释出现在另一侧(这样它们就不会与行号重叠)。同样的事情也适用于,\include但是您可能希望以略有不同的方式处理它,因为强制分页符。我正在开发的软件包允许您将当前文件名也放在页眉和/或页脚中。

正如另一个答案中提到的,showkeys包可以处理最后两点。

最后,添加所包含图形的文件名。在我不太彻底的测试中,以下方法似乎有效。我不知道这是否是合适的方法:我只是搜索graphics.stydraft从那里开始。

\usepackage{graphicx,marginnote,etoolbox}
\apptocmd\Gin@setfile{%
      \@reversemargintrue%
      \notmarginhookfalse%
      \marginnote{\ttfamily #3}%
      \@reversemarginfalse%
      \notmarginhooktrue%
}{}{}

我希望在进行更多测试、编写适当的文档并了解.dtx文件后,能够在 CTAN 上发布该软件包的一个版本。

答案2

你知道吗showkeys包,它为您的最后两点提供了解决方案?

\documentclass{article}
\usepackage{showkeys}

\begin{document}
\section{section name}\label{sec1}
Some text \dots
\section{section name}
As seen in section~\ref{sec1} or in \cite{bib}

\begin{thebibliography}{1}
\bibitem{bib} Some bib entry
\end{thebibliography}
\end{document}

showkeys 示例

答案3

对于你提到的第一点,我最近(比如今天晚上)写了一个非常小的包来实现这个功能(在marginnote和 的帮助下everyhook)。它叫做srcline和是可从 Bitbucket 获取。不幸的是,它还不能在浮点数或列表中排版数字,因为这似乎会弄乱文档布局,但它可能是一个很好的起点。

编辑:我刚刚意识到这与 Seamus 提出的解决方案/方案极为相似。

相关内容