
Sendo um amador em LaTeX, sinto muito, não sei como fazer minha pergunta sem contar a história toda:
Em um documento grande, criei um comando bastante simples para citar autores (latim clássico) seguindo outras convenções que não as que uso para citar autores modernos (onde uso BibTeX, etc.). Este é o comando que eu uso:
\newcommand{\citeCL}[3]{#1, \emph{#2}, \textbf{#3}}
%\citeCL{author}{text}{chapter}
Como os dois primeiros argumentos, uso ainda outros comandos de uma lista de nomes de autores e títulos de texto (já que uso cada nome várias vezes e pode ser inconsistente se for escrito por extenso todas as vezes), por exemplo,
\newcommand{\Per}{N. Per.}
\newcommand{\PerRud}{Rud. gram.}
Dentro do documento, eu poderia chamar o comando cite assim:
\citeCL{\Per}{\PerRud}{1117}
Este comando de citação eu uso tanto em notas de rodapé quanto neste ambiente de cotação:
\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}
}
No documento eu chamo o comando com os mesmos três argumentos do e \citeCL
, adicionalmente, o texto a ser citado, por exemplo,
\QuoteCL{\Per}{\PerRud}{§ 1119}{Quis maxime proponendus est quem studeant adolescentes imitari? Marcus Cicero.}
Tudo isso funciona bem e usei-o ao longo de minha tese. Agora desejo diferenciar a forma como os nomes e títulos dos autores são escritos nas notas de rodapé e nas citações, usando a forma abreviada nas notas de rodapé e uma nova forma longa nas citações. Minha abordagem intuitiva e ingênua foi esta:
\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}
Agora, para a minha pergunta: eu esperava que a adição Long
dos argumentos em \citeCLLong
( #1Long, \emph{#2Long}
) fizesse o LaTeX escolher, por exemplo, \PerLong
em vez de apenas \Per
na minha lista de autores, mesmo que eu chame o \quoteCL
comando com o argumento \Per
. Que a Long
parte seria adicionada antes de ser decidido ler \Per
ou \PerLong
. Mas escreve, por exemplo, "N. Per.Long" em vez de escolher \PerLong
= "Niccolò Perotti".
Isso pode ser feito de alguma forma, ou existe alguma outra solução mais inteligente, que não exija que eu passe por toda a minha tese alterando todos os argumentos em todas as citações, mas que possibilite o controle a partir do preâmbulo? E isso permite que minhas citações em notas de rodapé permaneçam na mesma forma original?
Responder1
Use uma condicional; com um novo comando você pode definir de forma coerente comandos com formas "curtas" e "longas". Então \citeCL
e \citeCLLong
pode usar
\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}
(Simplifiquei a definição de \QuoteCL
, para fugir spacing
e coisas não essenciais.)
Desta forma você também pode inserir argumentos diretamente sem qualquer preocupação; por exemplo
\QuoteCL{Niccolò Perotti}{Rudimenta Grammatices}{§ 1119}{...}
funcionaria da mesma forma.
Responder2
Altere seus dois primeiros argumentos apenas para strings de texto e use a \csname
\endcsname
construção para realizar o que deseja. (nota: desliguei o ambiente de espaçamento, porque não sabia qual pacote o continha)
\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}