作为一名 LaTeX 的业余爱好者,很抱歉,如果不讲清楚整个故事,我不知道该如何提问:
在大型文档中,我创建了一个相当简单的命令来引用(古典拉丁文)作者,遵循的惯例与我引用现代作者(我使用 BibTeX 等)的惯例不同。这是我使用的命令:
\newcommand{\citeCL}[3]{#1, \emph{#2}, \textbf{#3}}
%\citeCL{author}{text}{chapter}
作为前两个参数,我使用了作者姓名和文本标题列表中的其他命令(因为我多次使用每个名字,如果每次都完整地写出来可能会不一致),例如,
\newcommand{\Per}{N. Per.}
\newcommand{\PerRud}{Rud. gram.}
在文档中,我可以这样调用 cite 命令:
\citeCL{\Per}{\PerRud}{1117}
我在脚注和引用环境中都使用了此引用命令:
\newcommand{\QuoteCL}[4]{
\vspace{5pt}
\begin{quote}\itemsep1pt\parskip0pt\parsep0pt\begin{spacing}{1}
#4 \par\hspace*{\fill}\footnotesize{\citeCL{#1}{#2}{#3}}
\end{spacing}
\end{quote}
\vspace{-20pt}
}
在文档中,我使用与相同的三个参数调用该命令\citeCL
,另外还添加要引用的文本,例如,
\QuoteCL{\Per}{\PerRud}{§ 1119}{Quis maxime proponendus est quem studeant adolescentes imitari? Marcus Cicero.}
所有这些都很好用,我在整个论文中都用过它。现在,我希望区分作者姓名和标题在脚注和引文中的书写方式,在脚注中使用缩写形式,在引文中使用新的长格式。我的直觉、天真的方法是这样的:
\newcommand{\citeCL}[3]{#1, \emph{#2}, \textbf{#3}}
% Original command now used for footnotes
\newcommand{\citeCLLong}[3]{#1Long, \emph{#2Long}, \textbf{#3}}
% New command to be called by the \quoteCL command.
\newcommand{\Per}{N. Per.}
\newcommand{\PerLong}{Niccolò Perotti}
\newcommand{\PerRud}{Rud. gram.}
\newcommand{\PerRudLong}{Rudimenta grammatices}
% Duplicating the list of names and titles, adding a long version to be called by the \citeCLLong:
\newcommand{\QuoteCL}[4]{
\vspace{5pt}
\begin{quote}\itemsep1pt\parskip0pt\parsep0pt\begin{spacing}{1}
#4 \par\hspace*{\fill}\footnotesize{\citeCLLong{#1}{#2}{#3}}
\end{spacing}
\end{quote}
\vspace{-20pt}
}
% The command is changed to call the new \citeCLLong
\begin{document}
\QuoteCL{\Per}{\PerRud}{§ 1119}{Quis maxime proponendus est quem studeant adolescentes imitari? Marcus Cicero.}
\end{document}
现在回答我的问题:我希望在( ) 中添加Long
参数可以让 LaTeX 选择,例如,而不是仅仅从我的作者列表中选择,即使我使用参数调用该命令。在决定是否读取或之前添加该部分。但它写的是,例如,“N. Per.Long”,而不是选择=“Niccolò Perotti”。\citeCLLong
#1Long, \emph{#2Long}
\PerLong
\Per
\quoteCL
\Per
Long
\Per
\PerLong
\PerLong
能不能以某种方式做到这一点,或者有没有其他更聪明的解决方案,不需要我通读整篇论文,更改所有引文中的所有论点,但可以从序言中进行控制?这样可以让我在脚注中的引用保持相同的原始形式?
答案1
使用条件;使用新命令,您可以以连贯的方式定义具有“短”和“长”形式的命令。然后\citeCL
可以\citeCLLong
使用
\documentclass{article}
\usepackage[utf8]{inputenc}
\newif\ifCLLong
\newcommand{\citeCL}[3]{\CLLongfalse #1, \emph{#2}, \textbf{#3}}
\newcommand{\citeCLLong}[3]{\CLLongtrue #1, \emph{#2}, \textbf{#3}}
\newcommand{\QuoteCL}[4]{%
\begin{quote}
#4 \par\hspace*{\fill}\footnotesize\citeCLLong{#1}{#2}{#3}
\end{quote}
}
% Abstraction for easing the definition
\newcommand{\newshortlongcommand}[3]{\newcommand{#1}{\ifCLLong #3\else #2\fi}}
\newshortlongcommand{\Per}{N. Per.}{Niccolò Perotti}
\newshortlongcommand{\PerRud}{Rud. gram.}{Rudimenta grammatices}
\begin{document}
Testo introduttivo\footnote{\citeCL{\Per}{\PerRud}{§ 1119}}
\QuoteCL{\Per}{\PerRud}{§ 1119}{Quis maxime proponendus est quem studeant adolescentes imitari? Marcus Cicero.}
\end{document}
\end{document}
(我简化了的定义\QuoteCL
,以摆脱spacing
不必要的事情。)
通过这种方式,您也可以直接输入参数而不必担心;例如
\QuoteCL{Niccolò Perotti}{Rudimenta Grammatices}{§ 1119}{...}
效果是一样的。
答案2
将前两个参数更改为文本字符串,然后使用构造\csname
\endcsname
来实现您的愿望。(注意:我关闭了间距环境,因为我不知道哪个包中有它)
\documentclass{article}
\usepackage[utf8]{inputenc}
\newcommand{\citeCL}[3]{\csname#1\endcsname, \emph{\csname#2\endcsname}, \textbf{#3}}
% Original command now used for footnotes
\newcommand{\citeCLLong}[3]{\csname#1Long\endcsname,
\emph{\csname#2Long\endcsname}, \textbf{#3}}
% New command to be called by the \quoteCL command.
\newcommand{\Per}{N. Per.}
\newcommand{\PerLong}{Niccolò Perotti}
\newcommand{\PerRud}{Rud. gram.}
\newcommand{\PerRudLong}{Rudimenta grammatices}
% Duplicating the list of names and titles, adding a long version to be called by the \citeCLLong:
\newcommand{\QuoteCL}[4]{
\vspace{5pt}
\begin{quote}\itemsep1pt\parskip0pt\parsep0pt%
%\begin{spacing}{1}%
#4 \par\hspace*{\fill}\footnotesize{\citeCLLong{#1}{#2}{#3}}
%\end{spacing}
\end{quote}
\vspace{-20pt}
}
% The command is changed to call the new \citeCLLong
\begin{document}
\QuoteCL{Per}{PerRud}{§ 1119}{Quis maxime proponendus est quem studeant adolescentes imitari? Marcus Cicero.}
\vspace{6em}
\citeCL{Per}{PerRud}{§ 1119}
\end{document}