Как изменить порядок в новых командах

Как изменить порядок в новых командах

Поскольку я полный новичок в 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}

Эту команду cite я использую как в сносках, так и в этой среде цитирования:

\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аргументов в \citeCLLong( #1Long, \emph{#2Long}) заставит LaTeX выбирать, например, \PerLongвместо того, чтобы просто \Perиз моего списка авторов, даже если я вызываю \quoteCLкоманду с аргументом \Per. Что Longчасть будет добавлена ​​до того, как будет решено, читать \Perили \PerLong. Но он пишет, например, "N. Per.Long" вместо выбора \PerLong= "Niccolò Perotti".

Можно ли это как-то сделать, или есть ли другое, более умное решение, которое не требует от меня проходить через весь мой тезис, меняя все аргументы во всех цитатах, но позволяет контролировать из преамбулы? И это позволяет моим цитатам в сносках оставаться в той же, изначальной форме?

решение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}

введите описание изображения здесь

Связанный контент