根据优先级删除可选句子以适合页面

根据优先级删除可选句子以适合页面

我浪费了好几天的时间重写其他会议拒绝的论文,这些会议的页数限制不同。此外,如果能为没有页数限制的网站提取部分内容就好了。

有没有办法根据优先级系统自动隐藏句子或者只是文本部分以适应页面限制?

伪代码

This is a core sentence that should always be included.
\optional{1}{This is a high priority explanation that should only be removed when absolutely necessary.} 
\optional{100}{This only reinforces a previous statement and can safely be removed.}

这只是一个非常基本的例子。理想情况下,应该有依赖关系(如果 y 也显示,则仅显示 x)和本地优先级以适合页面。

有这样的事存在吗?

答案1

据我所知,这样的事情并不存在,但实现起来并不太难。

一种可能的实现方式是在文档末尾检查是否超出了页数限制。如果超出,则将宏中找到的最大数字存储\optional在文件中.aux。在下一次运行时,将跳过所有具有此数字或更高数字的可选内容。如果剩余输出仍然超出页数限制,则将运行期间仍在显示的内容的最大数字存储在文件中.aux。然后在下一次运行中,删除的阈值将是第二大数字,依此类推。

在下面的 MWE 中,这分为三个部分实现。在读取文件\AtBeginDocument后执行的中.aux,代码检查是否\chkpriority定义了宏。如果没有,则这是第一次运行,并将宏设置为-1

第二部分是宏\optional。如果\chkpriority-1,则显示内容,因为目前还不知道是否应该删除它,但如果优先级值是迄今为止最高的,则存储优先级值。如果在之前的运行中定义了一个数字\chkpriority,并且当前内容的值等于或高于存储的值,则不显示内容。如果该值低于存储的值,则显示内容,并可能记录为当前运行中显示内容的最高值。

第三部分是 within \AtEndDocument。此处将显示内容的最高值写入文件.aux。如果没有显示可选内容(因为所有可选内容都被删除或因为根本没有语句),则写入\optional的默认值。0

代码:

\documentclass{article}
\usepackage{lipsum}
\usepackage{kantlipsum}
\def\maxpages{3}
\def\highestpriority{0}

\AtBeginDocument{%
\ifdefined\chkpriority\else%
\gdef\chkpriority{-1}\fi%
}

\def\optional#1#2{%
\message{Checking content with priority #1.^^J}%
\ifnum\chkpriority=-1%
\message{No stored priority found, show content.^^J}%
#2\ifnum#1>\highestpriority%
\xdef\highestpriority{#1}\fi%
\else%
\ifnum#1=\chkpriority\relax\message{Equal to stored, remove content.^^J}\else%
\ifnum#1>\chkpriority\relax\message{Higher than stored, remove content.^^J}\else%
\message{Lower than stored, show content.^^J}
#2\ifnum#1>\highestpriority%
\xdef\highestpriority{#1}\fi%
\fi\fi\fi%
}
\makeatletter%
\AtEndDocument{\message{Currently \thepage\space pages.^^J}%
\ifnum\value{page}>\maxpages%
\message{This is more than the page limit of \maxpages.^^J}%
\message{Highest priority found within displayed content: \highestpriority.^^J}%
\message{Run again to remove content with priority \highestpriority\space or more.^^J}%
\else%
\message{This is below the page limit of \maxpages.}%
\fi%
\immediate\write\@auxout{\gdef\string\chkpriority{\highestpriority}}%
}
\makeatother%
\begin{document}
This is a core sentence that should always be included.
\optional{5}{\lipsum[1-20]}
\optional{10}{\kant[1-10]}
\end{document}

这会导致在连续运行期间在终端和日志文件中出现以下输出(清理以仅显示来自命令的输出\message):

第一次运行:

Checking content with priority 5.
No stored priority found, show content.
Checking content with priority 10.
No stored priority found, show content.
Currently 7 pages.
This is more than the page limit of 3.
Highest priority found within displayed content: 10.
Run again to remove content with priority 10 or more.

在第一次运行期间,所有内容都包含在输出 pdf 中。

第二次运行:

Checking content with priority 5.
Lower than stored, show content.
Checking content with priority 10.
Equal to stored, remove content.
Currently 4 pages.
This is more than the page limit of 3.
Highest priority found within displayed content: 5.
Run again to remove content with priority 5 or more.

在第二次运行期间,命令\lipsum[1-20]包含在pdf中,但命令\kant[1-10]未包含在内。

第三次运行:

Checking content with priority 5.
Equal to stored, remove content.
Checking content with priority 10.
Higher than stored, remove content.
Currently 1 pages.
This is below the page limit of 3.

在第三次运行(以及任何后续运行)期间,仅显示核心句子。

请注意,如果您稍后添加可选内容,则可能需要删除该.aux文件并再次运行几次,因为否则它可能会在仍然适合时被删除。

可以通过为依赖内容赋予比其所依赖的内容更高或相等的数字来实现依赖关系。我不确定你说的本地优先级适合页面是什么意思。

最后请注意,这是一个概念验证实现,尚未经过非常彻底的测试,并且可能存在一些限制(例如关于可以进入第二个参数的内容类型\optional)。

相关内容