我有一个 TeX 文件,正在与几个合作者一起编辑,我们使用环境来突出显示和讨论建议的更改,如下所示:
Some text.
\begin{old}
Text that I propose to remove.
Which may be more text than fits on a single line
and even include paragraph breaks.
\end{old}
\begin{new}
Text that I propose to insert.
\end{new}
目前,旧/新环境仅设置文本颜色,这在屏幕上很好,但在 ab/w 打印机上则不太好。我也想使用删除线/下划线(就像一个著名的文字处理器一样),这可以用 TeX 来实现吗?
我已经尝试过 ulem 和 soul 包,但它们似乎不能很好地与环境配合:
\newenvironment{old}{\ul \bgroup}{\egroup}
并且相关尝试似乎不起作用或产生“缺失数字”之类的错误。我知道的另一种使命令在环境中起作用的方法
\newsavebox{\oldbox}
\newenvironment{old}{\begin{lrbox}{\oldbox}}{\end{lrbox}\ul{\usebox{\oldbox}}}
似乎也不起作用。
有没有办法得到我想要的效果?我的系统是 Ubuntu“这是 pdfTeX,版本 3.1415926-1.40.10 (TeX Live 2009/Debian)”,如果有帮助的话。
答案1
1. 套餐
在加拿大运输安全局,你会发现有多个软件包提供某种“标记更改”功能。在我看来,标记更改是传统文本处理器(如 LibreOffice Writer、AbiWord 或 MSWord)优于 Latex 和文本编辑器的少数几个地方之一。标记 Latex 源中的更改会使文本变得混乱,使其可读性降低(你必须编译才能阅读文本)。此外,当你完成后,你必须清理最终源,或多或少手动删除所有标记。
如果你想采用 Latex 方式,你可以尝试的一个包是变化,这看起来相当先进。您可以定义不同的作者,这样每条评论都可以引用到用户。您还可以使用选项加载包nocolor
,这样删除的文本将被删除,添加的文本将被加下划线:
\usepackage[markup=nocolor]{changes}
一个严重的限制是您不能在同一环境中标记多个段落。
由于您使用的是 Linux,因此您可以运行包含的 bash 脚本来删除所有更改以进行清理。不过,在 Latex 中标记更改的工作量很大。
另一个包是更改栏。它用边距中的条形标记更改,因此不能完全满足您的要求。另一方面,您可以在一个环境中标记多个段落,并且可以嵌套更改。
由于你运行的是 Linux,你也可以尝试latexdiff由于我运行的是Windows,没有安装Perl,所以我从来没有使用过它,但是根据CTAN上的介绍:
Latexdiff
是一个 Perl 脚本,用于可视化标记和修订两个 latex 文件之间的显著差异。使用标准 latex 软件包(例如)可以进行各种可视化标记。color
不直接影响可见文本的更改(例如格式化命令中的更改)仍会标记在 latex 源中。另一个 Perl 脚本提供了基本的修订功能,latexrevise
可以接受或拒绝所有更改。手动编辑差异文件可用于覆盖此默认行为并仅接受或拒绝选定的更改。
程序类似合并和用于比较文本文档的类似实用程序一样,在比较两个源文件时也有很多功能。您甚至可以使用实用程序来比较两个以上的文件。如果您比较干净的源文件,并且以硬换行符结束每行,那么您将获得最佳效果。在 WinMerge 中,您可以将行从左侧窗口复制到右侧窗口,更改将显示在打印输出中。
我最喜欢的是差异PDF,我编译了(干净的)原始源文件和修订后的源文件(没有明显的更改),并比较了 PDF 文件。当然,限制在于很难比较两个以上的文件。
我认为,现有的 Latex 解决方案都无法完全满足工作组的要求。如果您主要处理文本(而不是图形和表格),更好的工作流程可能是使用免费文本处理器之一来处理第一个草稿,然后在文档接近完成时将其转换为 Latex 进行最后的润色。
更新:在这个问题中Werner 正在链接到包跟踪变化根据作者的说法,它是:
... 是一个用于协作编辑 LaTeX 文档的软件包。它允许多个编辑者对文档进行更改和添加注释。这些更改和注释将由编辑者进行颜色编码并添加到编译后的文档中。TrackChanges GUI 允许作者快速查找并接受、拒绝或修改建议的编辑。
它是 GPL 2.0 下的许可证。我从未使用过它,但也许值得一试。
2. 直接使用soul
根据布里斯托尔的最后一条评论,我使用soul
直接(或者更准确地说,Heiko Oberdiek 的扩展)制作了一个最小的例子soulutf8
。
\documentclass{article}
\usepackage{fontspec}
\setmainfont[Ligatures = TeX]{TeX Gyre Pagella}
\usepackage{soulutf8}
\begin{document}
\section{Test}
\ul{This is new text to demonstrate the possibilities inside the soul package. \emph{Someone} told me that you cannot use the package to mark several paragraphs.
But multiple paragraph seems to work OK. You can even emphasize words to be underlined.}.\st{Here is som old old text that I have deleted. Is should not be read.
Also underlining seems to work even if we mark up several \emph{paragraphs}.You can even emphasize words to be striked out.}
\end{document}
MWE 在我的系统上编译得很好(但不是 documentclass standalone
),也许我误解了 Bristol 的 -package 问题是什么soul
。
soul
标记不能嵌套(您不能使用命令标记其他标记以供删除\st
。这限制了它作为mark changes
包的实用性。