Cómo cambiar el orden en nuevos comandos

Cómo cambiar el orden en nuevos comandos

Siendo un gran aficionado a LaTeX, lo siento, no sé cómo hacer mi pregunta sin contar toda la historia:

En un documento grande, hice un comando bastante simple para citar autores (latín clásico) siguiendo otras convenciones que las que uso para citar autores modernos (donde uso BibTeX, etc.). Este es el comando que uso:

\newcommand{\citeCL}[3]{#1, \emph{#2}, \textbf{#3}}
%\citeCL{author}{text}{chapter}

Como los dos primeros argumentos utilizo otros comandos de una lista de nombres de autores y títulos de texto (ya que uso cada nombre varias veces y puede ser inconsistente si lo escribo completo cada vez), por ejemplo,

\newcommand{\Per}{N. Per.}
\newcommand{\PerRud}{Rud. gram.}

Dentro del documento, podría llamar al comando citar así:

\citeCL{\Per}{\PerRud}{1117}

Este comando de cita lo uso tanto en notas a pie de página como en este entorno de citas:

\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}
}

En el documento llamo al comando con los mismos tres argumentos que para \citeCL, y además el texto a citar, por ejemplo,

\QuoteCL{\Per}{\PerRud}{§ 1119}{Quis maxime proponendus est quem studeant adolescentes imitari? Marcus Cicero.}

Todo esto funciona bien y lo he usado a lo largo de mi tesis. Ahora deseo diferenciar entre las formas en que se escriben los nombres de los autores y los títulos en las notas al pie y en las citas, usando la forma abreviada en las notas al pie y una forma nueva y larga en las citas. Mi enfoque intuitivo e ingenuo fue este:

\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}

Ahora a mi pregunta: esperaba que agregar Longargumentos en \citeCLLong( #1Long, \emph{#2Long}) hiciera que LaTeX eligiera, por ejemplo, \PerLongen lugar de simplemente \Perde mi lista de autores, aunque llamo al \quoteCLcomando con el argumento \Per. Que la Longparte se agregaría antes de que se decida si leer \Pero \PerLong. Pero escribe, por ejemplo, "N. Per.Long" en lugar de elegir \PerLong= "Niccolò Perotti".

¿Se puede hacer esto de alguna manera, o existe alguna otra solución más inteligente que no requiera que revise toda mi tesis cambiando todos los argumentos en todas las citas, pero que permita controlar desde el preamplificado? ¿Y eso permite que mis citas en las notas a pie de página permanezcan en la misma forma original?

Respuesta1

Utilice un condicional; con un nuevo comando puedes definir de forma coherente comandos con formas "cortas" y "largas". Entonces \citeCLy \citeCLLongpuedo 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}

(He simplificado la definición de \QuoteCL, para salirme con spacingla mía y cosas no esenciales).

De esta manera también puedes introducir argumentos directamente sin ninguna preocupación; por ejemplo

\QuoteCL{Niccolò Perotti}{Rudimenta Grammatices}{§ 1119}{...}

funcionaría igual.

ingrese la descripción de la imagen aquí

Respuesta2

Cambie sus dos primeros argumentos a solo cadenas de texto y use la \csname \endcsnameconstrucción para lograr lo que desea. (nota: desactivé el entorno de espaciado porque no sabía qué paquete lo tenía)

\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}

ingrese la descripción de la imagen aquí

información relacionada