我正在使用大学开发的文档类来完成我的论文。此类具有命令\keywords
,该命令接受命令列表\key
,并将其作为关键字列表打印在摘要之后。这些命令在葡萄牙语中分别被屏蔽为\chaves
和\chave
。
示例输入为:
\chaves{%
\chave{A}%
\chave{B}%
\chave{C}%
\chave{D}%
}
不幸的是,这个列表目前完全以句点分隔打印,这与大学的标准不同(尽管它是由大学开发的,但可以想象),所以我必须修改文档类才能使其正常工作。
我进入文档类并发现了这一点:
\newcommand{\key}[1]{}
\newcommand{\puc@keywords}{}
\newcommand{\keywords}[1]{\renewcommand{\puc@keywords}{#1}}
\newcommand{\chave}[1]{\key{#1}}
\newcommand{\chaves}[1]{\keywords{#1}}
% ...
\renewcommand{\key}[1]{##1.\hspace{3mm} }%
\indent \puc@keywords%
修改\renewcommand{\key}
为##1;\hspace{3mm}
,我得到了用分号分隔的列表,这是正确的。不幸的是,只有列表中的最后一项也打印了分号,而它应该是句点。
我曾尝试使用xstring
包删除最后一个分号并打印句点,但没有成功。修改上面的代码片段,并将最后一行替换为\indent \StrGobbleRight{\puc@keywords}{2}%
,我得到了错误Argument of \reserved@a has an extra }.
我查找过这个错误,但还没弄明白。我试过在调用\protect
周围放置,但\chave
没有成功。我试过在调用周围放置\makeatletter
和\makeatother
,但这也无济于事。我试过使用\StrExpand
来扩展调用,但也没有用。我能够让它\StrExpand
与一起工作\StrExpand[1]{\puc@keywords}{\test}
,之后打印就可以了\test
。但是,如果我尝试\StrGobbleRight{\test}{2}
,我会得到TeX capacity exceeded, sorry [input stack size=5000].
我认为我的错误主要是概念上的,但如果它有任何用处,下面遵循 MWE,但问题实际上是处理一个(1100+行)类文件,可以找到这里。相关代码在608行左右。
\documentclass[dissertacao,brazil]{ThesisPKKN3}
\usepackage[T1]{fontenc}
\autor{A}
\autorR{A}
\orientador{A}
\orientadorR{A}
\titulo{A}
\dia{20} \mes{Março} \ano{2015}
\cidade{Rio de Janeiro}
\CDD{A}
\departamento{A}
\programa{A}
\centro{A}
\universidade{Pontifícia Universidade Católica do Rio de Janeiro}
\uni{PUC-Rio}
\banca{
\membrodabanca{A}{PUC-Rio}
\membrodabanca{A}{USP}
\membrodabanca{A}{PUC-Rio}
\coordenador{A}
}
\curriculo{%
A}
\agradecimentos{%
A
}
\chaves{%
\chave{A}%
\chave{A}%
\chave{A}%
\chave{A}%
}
\resumo{
A
}
\chavesuk{
\chave{A}%
\chave{A}%
\chave{A}%
\chave{A}%
}
\titulouk{A}
\resumouk{%
A
}
\modotabelas{figtab} % nada, fig, tab ou figtab
\begin{document}
\chapter{Introdução}
\section{Objetivos}
\chapter{Protensão}
\section{Introdução}
\chapter{Implementação do programa}
\section{Introdução}
\chapter{Passo-a-passo do programa com exemplo}
\chapter{Demais exemplos}
\section{Viaduto da Guarita - Pista Norte}
\chapter{Conclusões}
\section{Sugestões para trabalhos futuros}
\chapter{Dados dos exemplos}
\section{Viaduto de acesso a Santa Isabel}
\end{document}
编辑:
在@cfr 的评论和回答之后,我注意到我没有提到关键字在其他地方重复的事实,在这种情况下关键字由句点分隔(我讨厌我大学的格式),那么有没有一种方法可以做到这一点,允许分隔符灵活性?
答案1
既然你无论如何都要重写这部分,为什么不让它更简单,并进行设置,这样你就可以以逗号分隔的列表形式输入关键字?如果关键字包含逗号,只需用花括号括起来即可。
\documentclass{article}
\usepackage{expl3,xparse}
\ExplSyntaxOn
\makeatletter
\clist_new:N \l_wasabi_chaves_clist
\NewDocumentCommand\chaves { m }
{
\clist_set:Nn \l_wasabi_chaves_clist { #1 }
}
\NewDocumentCommand \puc@keywords {}
{
\clist_use:Nnnn \l_wasabi_chaves_clist { ;~ }{ ;~ }{ ;~ }.
}
\let\test\puc@keywords
\makeatother
\ExplSyntaxOff
\begin{document}
\chaves{abc, def, 5 and three-quarters, {red, white and blue}, Tall interventions, little green men, large purple women, Sam's childrens' sea-shells}
\test
\end{document}
编辑
针对更新的问题和信息,最简单的方法可能是创建\puc@keywords[]
一个可选参数。我已将其设置为默认由分号和空格组成,但如下所示,您也可以\puc@keywords[.\hspace{3mm}]
在需要的其他位置使用它。
\documentclass{article}
\usepackage{expl3,xparse}
\ExplSyntaxOn
\makeatletter
\clist_new:N \l_wasabi_chaves_clist
\NewDocumentCommand\chaves { m }
{
\clist_set:Nn \l_wasabi_chaves_clist { #1 }
}
\NewDocumentCommand \puc@keywords { O {;} }
{
\clist_use:Nnnn \l_wasabi_chaves_clist { #1~ }{ #1~ }{ #1~ }.
}
\def\test{
\puc@keywords\par
\puc@keywords[.\hspace{3mm}]
}
\makeatother
\ExplSyntaxOff
\begin{document}
\chaves{abc, def, 5 and three-quarters, {red, white and blue}, Tall interventions, little green men, large purple women, Sam's childrens' sea-shells}
\test
\end{document}