访问 KOMAoption 的当前值

访问 KOMAoption 的当前值

有什么方法可以访问 a 的当前值吗KOMAoption?在我的例子中,该选项是使用计算设置的。我稍后需要结果来确定在页面上放置某些内容的位置,并且执行两次计算似乎很愚蠢(尤其是因为相同的表达式在宏中不起作用,而我需要它)。

\documentclass[a4paper,oneside]{article}

\usepackage[margin=2cm,marginparwidth=4cm,includemp,reversemp]{geometry}

\usepackage{scrlayer-scrpage}
\KOMAoptions{headwidth=textwithmarginpar:-\dimexpr\marginparsep+\marginparwidth\relax,footwidth=textwithmarginpar:-\dimexpr\marginparsep+\marginparwidth\relax}

\begin{document}

DEBUG leftmargin=\the\leftmargin

DEBUG marginparwidth=\the\marginparwidth

DEBUG marginparsep=\the\marginparsep

DEBUG textwidth=\the\textwidth

DEBUG textwithmarginpar=??? % \the\textwithmarginpar gives Undefined control sequence.

DEBUG headwidth=??? % \the\headwidth gives Undefined control sequence.

\end{document}

同样的问题也出现在读取 \KOMAoption 的值以进行调试,但没有对实际问题的答案,只有有关调试问题的替代方法的建议。

同样的问题也出现在如何使用 KOMA 期权的当前值?,但给出的答案仅针对字体大小。

当然,我对我的问题的替代解决方案很感兴趣(找到headwidth),但如果有一种通用的方法来访问的值,那么未来的访问者也会受益KOMAoption

答案1

首先请注意,该选项headwidth不是单个值,而是具有三个值的选项,width:offset:offset如手册第 5.5 节中所述。因此,询问选项的值也会显示这三个值。

KOMA-Script 提供了一个实验性的接口来询问选项的当前值。该接口目前未在手册中描述,仅在 KOMA-Script 主页中描述 →法律选择权的条款。因为这个描述只有德文,所以我要求 KOMA-Script 作者至少用scrkernel-basics.pdf英文来描述它。

命令\KOMAoptionOf[<prefix command>]{<filename of package or class>}{<option>}可用于询问选项的当前值。由于多个 KOMA-Script 选项提供多个值,因此结果不仅可以是一个值,还可以是一个逗号分隔的值列表。该命令不可扩展,因此要将值用作另一个命令的参数,请<prefix command>使用。即使要打印值也可能需要这样做。但是,这仅显示选项本身的值,因此:

\documentclass{scrartcl}
\usepackage{scrlayer-scrpage}
\KOMAoptions{headwidth=textwithmarginpar:-\dimexpr\marginparsep+\marginparwidth\relax,footwidth=head}
\usepackage{url}
\begin{document}
DEBUG headwidth=\KOMAoptionOf[\url]{scrlayer-scrpage.sty}{headwidth}
\end{document}

只会导致:

选项 headwidth 的值 = {textwithmarginpar:-\dimexpr\marginparsep+\marginparwidth\relax:}

这绝对正确,并且确实是 option 的当前值headwidth。但是,它不是页头的长度。因此,您不能将其用作其他长度的值。

另外,您对 的使用\leftmargin也是错误的。\leftmargin是用于列表的 LaTeX 长度。 奇数页(或单面文档的所有页面)的当前左边距为\dimexpr \oddsidemargin+1in\relax。 偶数页的当前左边距为\dimexpr \evensidemargin+1in\relax

甚至textwithmarginpar不是一个选项,也远非真正的长度。对于选项来说,它是一个符号值,只不过是一个具有特殊语义的字符串。但是,您可以轻松地自己计算它。要显示该值,您可以使用\the,甚至无需使用 KOMA-Script:

\documentclass{article}
\begin{document}
DEBUG textwithmarginpar=\the\dimexpr\textwidth+\marginparwidth+\marginparsep\relax
\end{document}

所以你的整个问题都是基于错误的假设。

然而,页眉的当前宽度确实是内部的 的值scrlayer-scrpage。使用内部值始终是一种 hack,并且每当内部发生更改时都可能中断:

\documentclass{scrartcl}
\usepackage{scrlayer-scrpage}
\KOMAoptions{headwidth=textwithmarginpar:-\dimexpr\marginparsep+\marginparwidth\relax,footwidth=head}
\usepackage{url}
\begin{document}
DEBUG headwidth=\csname sls@headwidth\endcsname% WARNING: USING AN INTERNAL MACRO COULD BREAK!!!
\end{document}

目前会导致

页面头部宽度值 = 490.84645pt

一个不使用内部构件的建议是自己计算:

\documentclass{scrartcl}
\usepackage{scrlayer-scrpage}
\newlength{\myheadwidth}
\setlength{\myheadwidth}{\dimexpr\textwidth+\marginparsep+\marginparwidth\relax}
\KOMAoptions{headwidth=\myheadwidth:-\dimexpr\marginparsep+\marginparwidth\relax,footwidth=head}
\usepackage{url}
\begin{document}
DEBUG headwidth=\the\myheadwidth
\end{document}

结果和以前一样。

相关内容