Como alterar a ordem em novos comandos

Como alterar a ordem em novos comandos

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 Longdos argumentos em \citeCLLong( #1Long, \emph{#2Long}) fizesse o LaTeX escolher, por exemplo, \PerLongem vez de apenas \Perna minha lista de autores, mesmo que eu chame o \quoteCLcomando com o argumento \Per. Que a Longparte seria adicionada antes de ser decidido ler \Perou \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 \citeCLe \citeCLLongpode 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 spacinge 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.

insira a descrição da imagem aqui

Responder2

Altere seus dois primeiros argumentos apenas para strings de texto e use a \csname \endcsnameconstruçã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}

insira a descrição da imagem aqui

informação relacionada