我想为我的 IPE 模板定义一些变量,例如标题、所属机构和作者等。代码如下所示。但是当我使用 编译它时pdflatex
,它不会显示\def
变量应有的结果。当我删除\makeatletter
和 时\makeatother
,它发出错误消息“! \@ 的使用与其定义不匹配。”
有什么解决办法吗?
\documentclass{article}
\usepackage{color}
\makeatletter
\def\title#1{\def\@title{#1}} % Title
\def\displaytitle#1{\def\@displaytitle{#1}} % Display Title
\def\displayauthor#1{\def\@displayauthor{#1}} % Display author
\def\displayaffiliation#1{\def\@displayaffiliation{#1}} % Display affiliation
\makeatother
\title{This is a presentation}%
\displayauthor{Liu Benyuan}%
\displayaffiliation{The Automatic Target Recognition (ATR) Laboratory}%
\displaytitle{Compressive Sensing via Block Sparse Bayesian Learning : Theory and Applications}%
\begin{document}
\begin{minipage}{736pt}
\vspace*{.5em}
\begin{minipage}{650pt}\Large
\textcolor{red}{
{\bf \@displayauthor{}}~~$\cdot$~~{\bf \@displayaffiliation{}}~\hfill$\cdot$\hfill~{\bf NUDT}} \\
\textcolor{blue}{
\bf \@displaytitle{}\hfill \today{}}
\end{minipage}
\hspace*{8em}
\vspace*{.5em}
\end{minipage}
\end{document}
答案1
虽然您在创建定义时完美地使用了\makeatletter
...\makeatother
对,但如果您在其他地方引用这些定义,则需要执行相同的操作。因此,使用minipage
另一个\makeatletter
...\makeatother
对“限定范围”可以解决您的问题。
作为参考,请参阅做什么\makeatletter
和\makeatother
做什么?
其他一些注意事项:
- 使用预定义长度,而不是绝对长度。也许使用
\linewidth
而不是736pt
更合适。 对于后端宏,
@
在定义中使用 是可以的。但是,如果您要在文档内容中使用定义,请避免使用包含 的宏@
,或者为此构建用户界面。例如,\def\printtitle{\@title}% Display title \def\printdisplaytitle{\@displaytitle}% Display title \def\printdisplayauthor{\@displayauthor}% Display author \def\printdisplayaffiliation{\@displayaffiliation}% Display affiliation
现在您可以使用
\textbf{\printdisplayauthor}~~$\cdot$~~% \textbf{\printdisplayaffiliation}~\hfill$\cdot$\hfill~% \textbf{NUDT} \
- 不要使用旧的字体开关,如
\bf
和\it
。请参阅\textit
我使用或\it
或\bfseries
等有关系吗\bf
?和两个字母的字体样式命令(\bf
,,\it
...)会在 LaTeX 中复活吗?