在回答我的问题关于经典论文章节名称中的首字母缩略词,我建议使用以下方式排版首字母缩略词\spacedlowsmallcaps
:
缩写
classicthesis
词采用空格小写字母排版,如布林赫斯特在他的书中推荐。classicthesis
有一个命令\spacedlowsmallcaps
,,可以做到这一点。我试图重新定义相关命令acronym
(参见手册中的第 2.2 节acronym
),但没有成功。我建议你问一个关于这个问题的新问题,因为这样一位大师肯定会想出一个解决方案。 – Sveinung
我也尝试用以下方法重新定义命令
\renewcommand*{\acsfont}[1]{\spacedlowsmallcaps{#1}}
但是我收到了这个错误:
...
! Undefined control sequence.
\hyper@@link ->\let \Hy@reserved@a
\relax \@ifnextchar [{\hyper@link@ }{\hyp...
l.29 ...solutions are constructed using \ac{GRASP}
请注意,如果我重新定义它
\renewcommand*{\acsfont}[1]{\textsc{#1}}
它没有显示任何错误,但是文本没有改变。
\spacedlowsmallcaps
我还尝试在声明首字母缩略词时手动使用
\spacedlowsmallcaps{\acs{GRASP}}
但是 Latex 找不到它的定义(同样,这也不起作用\ac{}
,我认为正确的方法是使用\acsfont
)。
我找到了这个回答(与经典论文无关)建议使用另一个命令:
\renewcommand*{\acsfont}[1]{\textsc{\MakeLowercase{#1}}}
但它显示的错误与\spacedlowsmallcaps
上面相同。不过,我想直接用小写字母写缩写词,这样可行:
% \ac{GRASP}
\ac{grasp}
...
\begin{acronym}
% \acro{GRASP}{Greedy Randomized Adaptive Search Procedure}
\acro{grasp}{Greedy Randomized Adaptive Search Procedure}
\end{acronym}
但是在书写过程中不是很方便(我可能会坚持使用默认的大写字母并在最终文档上运行正则表达式替换),有没有办法使用大写字母缩写来解决这个问题?
这是一个简单的例子:
\documentclass{scrreprt}
\usepackage[overload]{textcase}
\usepackage{acronym}
\usepackage[pdfspacing]{classicthesis}
% This does not work
%\renewcommand*{\acsfont}[1]{\spacedlowsmallcaps{#1}}
% This works with lowercase acronyms (as 'grasp') but not with uppercase
% ones (as 'GRASPU').
\renewcommand*{\acsfont}[1]{\textsc{#1}}
\begin{document}
Initial solutions are constructed using \ac{grasp}. \ac{grasp} generation is very fast.
Initial solutions are constructed using \ac{GRASPU}. \ac{GRASPU} generation is very fast.
\section*{Acronyms}
\begin{acronym}
\acro{grasp}{Greedy Randomized Adaptive Search Procedure}
\acro{GRASPU}{Greedy Randomized Adaptive Search Procedure Uppercase}
\end{acronym}
\end{document}
答案1
这只是部分解决方案,但它可能满足您的需求。问题是\acsfont
传递了一个包含大量内容的参数,包括超文本链接命令等。将大小写更改命令应用于这些额外位会导致问题。我的部分解决方案是更改文本的大小写前将文本传递给\ac
。您可以按如下方式执行此操作:
\documentclass{scrreprt}
\usepackage{acronym}
\usepackage[pdfspacing]{classicthesis}
% This gives letterspaced smallcaps but does not convert case
\renewcommand*{\acsfont}[1]{\textls[80]{\textsc{#1}}}
\newcommand*{\myac}[1]{{% % Note: two sets of braces to keep \tmp local
\lowercase{\def\tmp{#1}} % Defines \tmp to be a lowercase version of #1
\ac{\tmp}}} % Call original \ac
\begin{document}
Initial solutions are constructed using \myac{grasp}. \myac{GRASP}
generation is very fast.
\section*{Acronyms}
\begin{acronym}
% You could also wrap \acro similarly so you could use \myacro{GRASP}
\acro{grasp}{Greedy Randomized Adaptive Search Procedure}
\end{acronym}
\end{document}
一些评论:
- 您必须将所有要使用的命令换行。这可能有点繁琐。(
\acro
例如,我上面没有换行。 在定义新命令时要小心,避免出现多余的空格。如果你将定义分开
\myac
,则需要行尾注释来防止这种情况:\newcommand*{\myac}[1]{% {% \lowercase{\def\tmp{#1}} \ac{\tmp}% }% }
您可能想尝试
glossaries
提供内置小型大写字母支持和一些不错的功能(例如\Gls
将首字母大写)的软件包。它更全面,但也更难学习。这是一个最小示例。注意:我无法同时使用和朋友实现字母间距和首字母大写\Gls
,但您可能会发现它很有用:\documentclass{scrreprt} \usepackage[smallcaps, acronym]{glossaries} \makeglossaries \usepackage[pdfspacing]{classicthesis} \newacronym{GRASP}{grasp}{Greedy Randomized Adaptive Search Procedure} % This gives letterspaced smallcaps but breaks capitalization \Gls{} \renewcommand*{\acronymfont}[1]{\textls[80]{\textsc{#1}}} \begin{document} Initial solutions are constructed using \gls{GRASP}. \Gls{GRASP} generation is very fast. \setglossarysection{section} % So you get a section. \printglossaries \end{document}
这使用 nice
\Gls{}
功能将第二句开头的第一个字母大写,但不会对文本中的首字母缩略词进行字母间距调整。首字母缩略词列表中的首字母缩略词是有字母间距的,因为首字母缩略词插入到classicthesis
应用字母间距的描述环境中。以下是相同示例,但未注释掉字母间距版本
\acronymfont
:请注意,这会中断,
\Gls{}
因为第一个字母现在被包裹在字母间距机制中。我还不确定如何修复它。