平均能量损失

平均能量损失

我想在宏中使用分段命令来增强它们,例如在标题之前放置一些行,在标题之后放置一些内容。

是否可以使用/寻址宏中原始命令的可选参数,例如\subsection

平均能量损失

\documentclass[
11pt,
a4paper,
]
{scrartcl}

\usepackage{
lmodern,
blindtext
}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage{
multicol,
xcolor,
}

\newcommand{\specialheadline}[1]{%
{\centering
\color{gray}\rule{0.9\columnwidth}{1pt}\color{black}\par}
\subsection{#1}}

\listfiles
\begin{document}
\begin{center}
Title stuff
\end{center}
\begin{multicols*}{2}
\section{Word}
\specialheadline{ASDF}
%\specialheadline[123]{ASDF} -- THIS LINE DOES NOT WORK

\blindtext[1]
\end{multicols*}
\end{document}

答案1

以下定义可能更好,因为它不需要切换回black,因为您可以在前面使用不同的颜色\specialheadline

\newcommand{\specialheadline}[2][]{%
  {\centering
  \textcolor{gray}{\rule{0.9\columnwidth}{1pt}}\par}
  % How to check if a macro value is empty or will not create text with plain TeX conditionals?
  % https://tex.stackexchange.com/a/53091/5764
  \if\relax\detokenize{#1}\relax
    \subsection{#2}%
  \else
    \subsection[#1]{#2}%
  \fi}

它检查提供的可选参数是否\specialheadline为空,并设置适当的分段单元的条件。您可以将显式条件缩短为如下内容:

\subsection[\if\relax\detokenize{#1}\relax #2\else #1\fi]{#2}

因为\if...\fi将根据 ToC 的需要进行扩展。

更可靠的选择是使用xparse带有条件的命令定义\IfValueTF

% \usepackage{xparse}% If you have LaTeX2e < 2020-10
\NewDocumentCommand{\specialheadline}{ o m }{%
  {\centering
  \textcolor{gray}{\rule{0.9\columnwidth}{1pt}}\par}
  % How to check if a macro value is empty or will not create text with plain TeX conditionals?
  % https://tex.stackexchange.com/a/53091/5764
  \subsection[\IfValueTF{#1}{#1}{#2}]{#2}}

相关内容