如何让 acmart 停止抱怨 \baselinestretch?

如何让 acmart 停止抱怨 \baselinestretch?

我有一个 style 文档acmart,它使用了一些旧包。这个包baselinestretch以某种方式进行了修改。最后,我在日志中看到了以下内容:

Class acmart Error: An attempt to redefine \baselinestretch detected. 
Please do not do this for ACM submissions!.

什么是合理的解决方法?我无法更改包。我只想acmart停止打印此错误消息。我也不想修改acmart.cls。似乎我应该在之前添加一些内容\end{document}以将此长度重置为acmart预期值...

我的代码是这样的:

\documentclass[sigplan,nonacm]{acmart}
\usepackage{oz}
\begin{document}
Hello, world!
\end{document}

答案1

\baselinestretchLaTeX 内核中的默认定义为空,并且该oz包想要修改内核宏\@setfontsize,以便\zedbaselineskip每次字体大小改变时内部参数也会进行调整。它确实

\def\@setfontsize#1#2#3{\@nomath#1%
    \ifx\protect\@typeset@protect
      \let\@currsize#1%
    \fi
    \fontsize{#2}{#3}\selectfont
\setlength{\zedbaselineskip}{\baselineskip/\real{\baselinestretch}}%
    \zedbaselineskip\zedbaselinestretch\zedbaselineskip
    \setbox\zstrutbox\hbox{\vrule height.7\zedbaselineskip
    depth.3\zedbaselineskip width\z@}}

\setlength在哪里添加了部分。这纯粹是运气,\@setfontsize在过去的 23 年里没有改变过……无论如何,问题在于除以\baselinestretch,所以包会主动做

\def\baselinestretch{1}

嗯,在我看来,这是一个非常不幸的决定,只是为了避免一个简单的条件,请参阅建议的修复。

班级acmart设置\baselinestretch1.25如果值发生改变,该类将设置为并拒绝编译必须加载后将基线拉伸重置为之前的值oz,否则文档的外观将不符合 ACM 标准。

由于你可能使用包oz,因此您还应该对其进行修复,以便不是采取不适当的举措,例如\baselinestretch未经警告就进行改变。

\documentclass{acmart}
\usepackage{lipsum} % just for this example

\let\savedbaselinestretch\baselinestretch
\usepackage{oz}
\let\baselinestretch\savedbaselinestretch

% fix the bad part in oz.sty
\makeatletter
\def\@setfontsize#1#2#3{%
  \@nomath#1%
  \ifx\protect\@typeset@protect
    \let\@currsize#1%
  \fi
  % addition by oz.sty
  \fontsize{#2}{#3}\selectfont
  \ifx\baselinestretch\@empty
    \setlength{\zedbaselineskip}{\baselineskip}%
  \else
    \setlength{\zedbaselineskip}{\baselineskip/\real{\baselinestretch}}%
  \fi
  \zedbaselineskip\zedbaselinestretch\zedbaselineskip
  \sbox\zstrutbox{%
    \vrule height.7\zedbaselineskip depth.3\zedbaselineskip width\z@
  }%
}
\makeatother

\begin{document}

\lipsum[1]

\begin{schema}{BirthdayBook}
    known: \pset NAME \\
    birthday: NAME \pfun DATE
\ST
    known = \dom birthday
\end{schema}

\end{document}

在此处输入图片描述

David Carlisle 提出的“修复”的输出将是

在此处输入图片描述

这可能会导致您的提交被拒绝。

答案2

您可以更新 ACM 正在测试的宏,但不要对 ACM 提交执行此操作(acmart如果它不是 ACM 提交,为什么要使用?)


\documentclass[sigplan,nonacm]{acmart}
\usepackage{oz}

\makeatletter
\let\ACM@origbaselinestretch\baselinestretch
\makeatother
\begin{document}
Hello, world!

\end{document}

相关内容