![扩展草稿模式,包括用于手动打印输出到源同步的源信息](https://linux22.com/image/238759/%E6%89%A9%E5%B1%95%E8%8D%89%E7%A8%BF%E6%A8%A1%E5%BC%8F%EF%BC%8C%E5%8C%85%E6%8B%AC%E7%94%A8%E4%BA%8E%E6%89%8B%E5%8A%A8%E6%89%93%E5%8D%B0%E8%BE%93%E5%87%BA%E5%88%B0%E6%BA%90%E5%90%8C%E6%AD%A5%E7%9A%84%E6%BA%90%E4%BF%A1%E6%81%AF.png)
我正在寻找一种扩展草稿模式,将段落、章节命令和图形等的源代码位置作为 marginpars 或类似内容放置在 PDF 中,以便它们出现在打印输出上。
背景
我经常将我的论文草稿或(部分)论文以 PDF 格式分别交给我的合著者/贡献者和/或主管。他们通常会将其打印出来并在纸上进行更正和注释。我们通常会见面,我会带一台上网本(小型笔记本电脑),这样我就可以在我们讨论时直接对 LaTeX 代码进行更改。
问题是他们做出这样的陈述:“在第 Y 段第 X 行是它应该是富不是酒吧”或“图X应该更大”。现在我很难将其转换为 LaTeX 源代码中的位置。我想我可以使用 SyncTeX 并打开 PDF,然后单击他们提到的位置以转到源代码(到目前为止我从未使用过它),但这在这种情况下不起作用,因为通常,自从他们打印出 PDF 后,我已经对源文件做了一些更改!编辑应该快速而简单,所以我无法处理两个不同版本的源代码和 PDF 等。目前,我只是搜索他们提到的原始文本的部分,但这并不总是有效,因为由于换行符等原因,此文本可能不像源文件中的文本那样完全逐字逐句。
任务:
我喜欢得到以下信息:
- 在每个章节标题和段落开头(即每个段落一个数字)旁边,我喜欢显示源行号(例如
\marginpar
) - 在源文件的代码开始的地方(
\include
d 章节以及包含使用的部分\input
),我喜欢打印源文件的名称。 - 在显示图像时,应使用图像文件的名称来标记图形!如果图形是
tikzpicture
来自外部文件的图表(等等),则还应显示文件名。(实际上,从上一点来看,可能已经是这种情况了)。 \label
s 和\ref
s 应使用内部名称显示(\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 自己的filehook
和currfile
包,您可以标示输入文件的开始和结束位置,如下所示:
\usepackage{filehook,marginnote}
\AtBeginOfInputs{%
\@reversemargintrue
\notmarginhookfalse
\marginnote{\ttfamily\currfilename}
\@reversemarginfalse
\notmarginhooktrue
}
\AtEndOfInputs{%
\@reversemargintrue%
\notmarginhookfalse
\marginnote{\ttfamily End \currfilename}%
\@reversemarginfalse%
\notmarginhooktrue
}
只是\@reversemargintrue
为了让注释出现在另一侧(这样它们就不会与行号重叠)。同样的事情也适用于,\include
但是您可能希望以略有不同的方式处理它,因为强制分页符。我正在开发的软件包允许您将当前文件名也放在页眉和/或页脚中。
正如另一个答案中提到的,showkeys
包可以处理最后两点。
最后,添加所包含图形的文件名。在我不太彻底的测试中,以下方法似乎有效。我不知道这是否是合适的方法:我只是搜索graphics.sty
并draft
从那里开始。
\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}
答案3
对于你提到的第一点,我最近(比如今天晚上)写了一个非常小的包来实现这个功能(在marginnote
和 的帮助下everyhook
)。它叫做srcline
和是可从 Bitbucket 获取。不幸的是,它还不能在浮点数或列表中排版数字,因为这似乎会弄乱文档布局,但它可能是一个很好的起点。
编辑:我刚刚意识到这与 Seamus 提出的解决方案/方案极为相似。