![如何让 acmart 停止抱怨 \baselinestretch?](https://linux22.com/image/451334/%E5%A6%82%E4%BD%95%E8%AE%A9%20acmart%20%E5%81%9C%E6%AD%A2%E6%8A%B1%E6%80%A8%20%5Cbaselinestretch%EF%BC%9F.png)
我有一个 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
\baselinestretch
LaTeX 内核中的默认定义为空,并且该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
设置\baselinestretch
为1.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}