我正在创建自己的类,我想在其中创建一个命令,该命令可以随意使用多次,而不会替换之前的内容。这是我的 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
从您问题示例中的文本宽度只有一半的情况来看,我猜您希望有两列。
如果您需要不同的奉献方式,请毫不犹豫地尽可能精确地指定您的需求。这样做可以简化开发尽可能适合您需求的解决方案的过程。