类文件中可重复使用的命令

类文件中可重复使用的命令

我正在创建自己的类,我想在其中创建一个命令,该命令可以随意使用多次,而不会替换之前的内容。这是我的 MWE

\documentclass{letter}

\makeatletter
\newenvironment{mypagestyle}{
    \cleardoublepage
    \thispagestyle{empty}
}{\newpage}

\newcommand\@mydedication{\@latex@warning@no@line{No \noexpand\mydedication given}}
\newcommand*{\mydedication}[2]{\gdef\@mydedication{
    \hfill
    \parbox{.5\textwidth}{\Large\textit{
        #1\\
        #2
    }}
}}

\newcommand\makededication{\begin{mypagestyle}%
    \@mydedication
\end{mypagestyle}}
\makeatother

\mydedication{To my love}{For your patience and love.}
\mydedication{To God}{For all the good things he has given me.}

\begin{document}

\makededication

\end{document}

提前致谢。

答案1

如果没有软件包,你可以使用\g@addto@macro

\documentclass{book}

\makeatletter
\newcommand*{\joan@mydedication}{}
\newcommand{\joan@domydedication}[2]{%
   \parbox{.5\textwidth}{%
     \Large\itshape
     #1\\
     #2
   }%
   \par\addvspace{\bigskipamount}%
}
\newcommand*{\mydedication}[2]{%
  \g@addto@macro\joan@mydedication{\joan@domydedication{#1}{#2}}%
}

\newcommand\makededication{%
  \clearpage
  \thispagestyle{empty}
  \begin{flushright}
  \vspace*{\stretch{0.3}}
  \ifx\joan@mydedication\@empty
    \@latex@warning@no@line{No \protect\mydedication\space given}%
  \else
    \joan@mydedication
  \fi
  \end{flushright}
  \vfill
  \clearpage
}
\makeatother

\mydedication{To my love}{For your patience and love.}
\mydedication{To God}{For all the good things he has given me.}

\begin{document}

\makededication

\end{document}

我在顶部和题词之间添加了一些垂直空间。您可以根据自己的喜好自定义它们。

在我看来,最好使用间接方法,只需添加几个标记\joan@mydedication,因为它可以使代码更简洁。

我添加了前缀,这是一种避免类和包之间冲突的很好的做法。

添加 的默认定义以\joan@mydedication发出警告对于诸如\title只应出现一次且没有像本例中那样的连接的情况很方便。\makededication在这里,检查 的使用是否为空更容易。注意\newcommand*{\joan@mydedication}{},因此检查\@empty会起作用(如果只有 则不会起作用\newcommand)。

答案2

\documentclass{letter}

\makeatletter

\newenvironment{mypagestyle}{%
  \cleardoublepage
  \thispagestyle{empty}%
}{\newpage}%

\newcommand\@mydedicationelement[2]{%
  \hbox{\parbox[t]{.45\textwidth}{%
    \noindent\Large\textit{#1\\#2}%
  }}\hfill%
}%

\newcommand*\@mydedication{}

\newcommand*{\mydedication}[2]{%
  \g@addto@macro{\@mydedication}{\@mydedicationelement{#1}{#2}}%
}

\newcommand\makededication{%
  \begin{mypagestyle}%
  \ifx\@mydedication\@empty
     \@latex@warning@no@line{No \noexpand\mydedication given}%
  \fi
  {%
    \lineskip=.1\textwidth
    \leavevmode
    \@mydedication
    \par
  }%
  \end{mypagestyle}%
}
\makeatother

\mydedication{To my love}{For your patience and love.}
\mydedication{To God}{For all the good things he has given me.}
\mydedication{To Monty Python}{For the song ``All Things Dull And Ugly''.}
\mydedication{To my love}{For your patience and love.}
\mydedication{To God}{For all the good things he has given me.}
\mydedication{To Monty Python}{For the song ``All Things Dull And Ugly''.}

\begin{document}

\makededication

\end{document}

在此处输入图片描述

\parboxes从您问题示例中的文本宽度只有一半的情况来看,我猜您希望有两列。

如果您需要不同的奉献方式,请毫不犹豫地尽可能精确地指定您的需求。这样做可以简化开发尽可能适合您需求的解决方案的过程。

相关内容