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