![同一文档的不同样式](https://linux22.com/image/261683/%E5%90%8C%E4%B8%80%E6%96%87%E6%A1%A3%E7%9A%84%E4%B8%8D%E5%90%8C%E6%A0%B7%E5%BC%8F.png)
假设我正在写一篇论文,计划提交给期刊/会议,但也会放在 arXiv 等预印本服务器上。每个出版商都有自己的排版论文所需的样式文件,而出于多种原因,将具有中性风格的“中性”版本放在此预印本服务器上可能会很方便。
我的问题如下:
是否可以制作一个单一的 TeX 文件,该文件(例如,在序言中指定一个选项后)可以编译为同一篇论文的任一版本?
即使解决方案是使用纯 TeX 变量进行一些不太美观的修复,也算是一种解决方案。两种不同的样式可能具有不同的文档类,需要不同的包等,所以我不知道从哪里开始,也不知道这是否可行。
答案1
虽然理想的目标是
编写文档,然后仅将类和选项更改为已加载的包,以使其适应您想要的任何打印样式
由于各种原因,实现这一目标相当困难。
打印样式通常要求文档的各部分按不同的顺序排列。例如,AMS 类
abstract
希望前\maketitle
,而标准类想要它后\maketitle
。在更改类别时,换行符和分页符通常会有很大差异,因此对一个类别(例如
\linebreak
或\pagebreak
命令)所做的任何调整都可能对另一个类别造成灾难性的后果。一些出版商(其中包括 arXiv)禁止使用某些软件包,或者提供仅允许使用的软件包列表;这些禁止列表在不同的出版商之间有所不同,无所畏惧。
因此,如果您的论文需要出版商 Foo 允许的软件包extrapack
,但公共网站 Bar 不允许,那么您就会遇到问题。您可能能够模拟extrapack
将论文提交给 Bar 的工作方式,但该代码对 Foo 来说就没那么好了。
但还有另一个问题。你不能将论文发送给 Foo 和 Bar,告诉他们使用命令行进行编译
pdflatex "\def\Foo{YES}\input{TMM-paper}"
因为您的文件以
\ifdefined\Foo
\documentclass[<options>]{foopapers}
<packages for Foo>
<special code for Foo>
\else
\documenclass[a4paper]{article}
<packages for Bar>
<special code for Bar>
\fi
因为两家出版商可能至少都会依赖自动排版流程来验证提交的内容。
另一种策略可能是将论文文本放在一个文件中TMM-paper.tex
,将提交的内容放在另外两个文件中
% File TMM-paper-foo.tex
\documentclass[<options>]{foopapers}
<packages for Foo>
<special code for Foo>
\begin{document}
\input{TMM-paper}
\end{document}
% File TMM-paper-foo.tex
\documenclass[a4paper]{article}
<packages for Bar>
<special code for Bar>
\begin{document}
\input{TMM-paper}
\end{document}
但如果其中一个发布者要求提交内容只包含一个文件,那么这种方法就行不通了。而且,如果两个类要求元素的顺序不同,……哦,太棒了!
那么这是不可能的吗?
你并非没有希望,而且最常见的策略是将文本放在一个文件中,您只需添加正确的序言并进行微小的更改(针对摘要的位置或添加关键字等)将要工作。
最重要的是,当你向出版商提交论文时,绝不添加换行或分页提示,也不添加图形或表格的绝对尺寸(\columnwidth
例如,仅添加相对尺寸)。
这些可以添加到 arXiv 版本中,因为您确切地知道其最终输出格式,因为他们的系统不会触及内容,而只是从形式角度验证文件(编译时没有错误)。当然,这样的调整会导致文本文件分叉;如果您使用或滥用文件中的注释,则无需担心。