创建缩写列表

创建缩写列表

我想创建类似于的东西\listoffigures\listoftables到目前为止我所做的是:

\def\startloa#1
{
    \begingroup
        \begin{listofabbrv}{SPMD}
        \@input{\jobname.#1}
        \end{listofabbrv}
        \global\@nobreakfalse
    \endgroup
    \newpage
}

\newcommand{\listofabbreviations}
{
    \@startloa{loa}
}

% abvr{abvr}{text}
\def\abvr#1#2
{
    \makeatletter
    \immediate\write\tempfile{\backslash item[#1] #2}
    \makeatother
}

\newwrite\tempfile

\begin{document}

    \immediate\openout\tempfile=\jobname.loa

    \listofabbreviations

    \abvr{NULL}{/dev/null}

    \immediate\closeout\tempfile

\end{document}

/\begin\end{listofabbvr}我使用的样式中预定义的,因此我无法更改它。是否这样做:

\begin{listofabbrv}{SPMD}
    \item[NULL] /dev/null
\end{listofabbrv}

主要问题:

  • \abvr命令不起作用。文件输出为:

    \delimiter "026E30F item[NULL] /dev/null
    

    代替

    \item[NULL] /dev/null
    
  • 该命令\listofabbreviations不起作用。 有什么问题吗\def\startloa? 输出日志的一小段:

    ERROR:
    74  ! You can't use `\spacefactor' in vertical mode.
    75  \@->\spacefactor 
    76                   \@m 
    77  l.133   \listofabbreviations
    78                             
    79  ! Missing $ inserted.
    --- x --- x ---
    ERROR:
    79  ! Missing $ inserted.
    80  <inserted text> 
    81                  $
    82  l.133   \listofabbreviations
    83                             
    84  ! Missing $ inserted.
    --- x --- x ---
    ERROR:
    84  ! Missing $ inserted.
    85  <inserted text> 
    86                  $
    87  l.134 
    88        
    89  [3]
    --- x --- x ---
    

答案1

你的代码有很多问题。TeX 不是 C,而且

\def\x#1
{
  ...
}

非常不同于

\def\x#1{...}

以下是制作清单的方法

\documentclass[a4paper]{article}
\makeatletter
\newcommand\@startloa{%
  \begin{listofabbrv}{SPMD}
  \InputIfFileExists{\jobname.loa}{}{\item[\null]}
  \end{listofabbrv}
  \newwrite\@loa
  \immediate\openout\@loa=\jobname.loa
}
\newcommand{\listofabbreviations}{\@startloa}

% abvr{abvr}{text}
\def\abvr#1#2{\immediate\write\@loa{\unexpanded{\item[#1]#2}}}
\makeatother

\newenvironment{listofabbrv}[1]{\begin{itemize}}{\end{itemize}}

\begin{document}
\listofabbreviations

\abvr{NULL}{/dev/null}

\end{document}

线路\newenvironment只是为了有一个listofabbrv环境。

相关内容