从包选项中提取设置作为变量

从包选项中提取设置作为变量

抱歉,如果这是一个简单的问题,但我对高级 LaTeX 还很陌生(以前我只使用预设样式并做了一些简单的事情),搜索了约 30 分钟后仍找不到答案。

我想使用带有sidenotes软件包的哈佛博士论文样式。默认情况下,哈佛博士使用caption软件包来管理图形标题,但sidenotes引入了更多样式(例如全宽图形、侧面标题和边距图形)。我试图让所有标题看起来都一样。以下是我的设置caption

\RequirePackage[labelfont={sf,bf,small},textfont={sf,small},
justification=RaggedRight,margin=0pt]{caption}

然后,为了使sidenotes字幕看起来相同,我浏览所有样式并设置相同的设置:

\DeclareCaptionStyle{widefigure}{labelfont={sf,bf,small},textfont={sf,small}}
\DeclareCaptionStyle{marginfigure}{labelfont={sf,bf,small},textfont={sf,small}}
\DeclareCaptionStyle{sidecaption}{labelfont={sf,bf,small},textfont={sf,small}}

但是我在这里做了双重工作,如果我需要更改一件事,我就必须在很多地方进行更改。我意识到我可以定义一个包含样式设置的变量,然后将其传递给所有这些样式,但我想知道我是否可以从caption包中提取我已经定义的设置并将它们传递给sidenotes样式。

我想以更一般的形式来说我的问题是:如何拉取已定义的包选项以在另一个地方使用相同的选项。

答案1

每个包使用的选项都存储在 csname 中,格式为[email protected]

例如

\RequirePackage[labelfont={sf,bf,small},textfont={sf,small},
justification=RaggedRight,margin=0pt]{caption}

\expandafter \show\csname [email protected]\endcsname

表明[电子邮件保护]具有您想要的值。

> \[email protected]=macro:
->labelfont={sf,bf,small},textfont={sf,small},justification=RaggedRight,margin=
0pt.

\@for您可以使用标准乳胶或您需要的任何其他列表处理宏来遍历这样的以逗号分隔的选项列表。

答案2

caption 包提供了一种记录在案的 [1] 方法来存储和调用 和 选项\captionsetup[<name>]{<options>}\captionsetup{options=<name>}一个简单的例子:

\documentclass{article}
\usepackage{caption}
\captionsetup[waddehaddeduda]{labelfont=bf,textfont=it}

\begin{document}

\begin{figure}
\caption{A caption}
\end{figure}

\begin{figure}
\captionsetup{options=waddehaddeduda}
\caption{Another caption}
\end{figure}

\end{document}

这也适用于嵌套:

\documentclass{article}
\usepackage{caption}
\captionsetup[waddehaddeduda]{labelfont=bf,textfont=it}
\captionsetup[test]{options=waddehaddeduda,font=large}

\begin{document}

\begin{figure}
\caption{A caption}
\end{figure}

\begin{figure}
\captionsetup{options=test}
\caption{Another caption}
\end{figure}

\end{document}

因此你的代码可以转换成如下形式:

\RequirePackage[justification=RaggedRight,margin=0pt]{caption}
\captionsetup[sidenotes]{labelfont={sf,bf,small},textfont={sf,small}}
...
\DeclareCaptionStyle{widefigure}{options=sidenotes}
\DeclareCaptionStyle{marginfigure}{options=sidenotes}
\DeclareCaptionStyle{sidecaption}{options=sidenotes}

[1] 是的,我必须承认它的记录确实很差,它只在附录 A.1 的选项列表中列出。

相关内容