-
Notifications
You must be signed in to change notification settings - Fork 684
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Настройки cleveref #496
base: master
Are you sure you want to change the base?
Настройки cleveref #496
Conversation
При низкоуровневом переопределении cref, автоматические определения для Cref будут неявно сгенерированы при помощи MakeUppercase только тогда, когда заданное тело cref начинается с буквы (см. texdoc cleveref). Т.к. в нашем случае оно начинается с кода ссылки, этот код уродуется MakeUppercase’ом, в результате чего использование \Cref приводит к падению с ошибкой. Соответственно, \Cref необходимо переопределять вручную.
По непонятной причине четвёртый тип низкоуровневых настроек — применяемый при отрисовке диапазонов внутри списков, — отсутствовал в common/styles. В результате при передаче \cref ссылок A, B, C и E (в предположении что в тексте эти элементы идут в порядке «A, B, C, D, E») активировался код отрисовки по умолчанию (и соответственно добавлялась приставка).
@@ -165,7 +165,7 @@ | |||
|
|||
%%% Изображения %%% | |||
\usepackage{graphicx}[2014/04/25] % Подключаем пакет работы с графикой | |||
\usepackage{caption} % Подписи рисунков и таблиц | |||
%\usepackage{caption} % Подписи рисунков и таблиц; starting with version 1.4 the subcaption package [...] loads [the caption package] automatically © texdoc subcaption. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Руководствуясь максимой «explicit is better than implicit», я бы оставил эту строку
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Спасибо, что подсветили.
Я бы тут тоже, дочитав до этого места, оставил бы как было.
У меня тут машинка есть с пакетом не таким новым
(c:/texlive/2018/texmf-dist/tex/latex/caption/subcaption.sty
Package: subcaption 2018/05/01 v1.1-162 Sub-captions (AR)
Не то что бы я был за поддержку старья, но если это возможно, то почему бы и нет.
EDIT:
Запустил на той машинке. Не падает. И Cref
вызов как будто тоже работает.
\newcommand*{\SCSetCrefFormatBase}[2]{\csname #1format\endcsname{#2}} % имя настройки, тип ссылки | ||
\newcommand*{\SCSetCrefLabelcrefFormats}[3]{% подимя настройки, тип ссылки, формат | ||
\SCSetCrefFormatBase{cref#1}{#2}{#3}% ссылка с приставкой | ||
\SCSetCrefFormatBase{Cref#1}{#2}{#3}% ссылка с приставкой, стоящая в начале предложения | ||
\SCSetCrefFormatBase{labelcref#1}{#2}{#3}% ссылка без приставки | ||
} | ||
\newcommand*{\SCSetCrefLabelcrefMultiFormats}[6]{% подимя настройки, тип ссылки, формат x4 | ||
\SCSetCrefFormatBase{cref#1}{#2}{#3}{#4}{#5}{#6}% ссылка с приставкой | ||
\SCSetCrefFormatBase{Cref#1}{#2}{#3}{#4}{#5}{#6}% ссылка с приставкой, стоящая в начале предложения | ||
\SCSetCrefFormatBase{labelcref#1}{#2}{#3}{#4}{#5}{#6}% ссылка без приставки | ||
} | ||
\newcommand*{\SCSetCrefLabelcrefFormatsForType}[3]{% тип ссылки, символ слева от ссылки, символ справа от ссылки | ||
\SCSetCrefLabelcrefFormats{}{#1}{#2##2##1##3#3}% одиночная ссылка | ||
\SCSetCrefLabelcrefFormats{range}{#1}{#2##3##1##4#3 \cyrdash~#2##5##2##6#3}% диапазон ссылок | ||
\SCSetCrefLabelcrefMultiFormats{multi}{#1}{#2##2##1##3#3}{ и~#2##2##1##3#3}{, #2##2##1##3#3}{ и~#2##2##1##3#3}% перечисление ссылок | ||
\SCSetCrefLabelcrefMultiFormats{rangemulti}{#1}{#2##3##1##4#3 \cyrdash~#2##5##2##6#3}{#2##3##1##4#3 \cyrdash~#2##5##2##6#3}{#2##3##1##4#3 \cyrdash~#2##5##2##6#3}{#2##3##1##4#3 \cyrdash~#2##5##2##6#3}% диапазон ссылок внутри перечисления ссылок | ||
} | ||
\newcommand*{\SCSetCrefLabelcrefFormatsForTypeSimple}[1]{\SCSetCrefLabelcrefFormatsForType{#1}{}{}} | ||
\newcommand*{\SCSetCrefLabelcrefFormatsForTypeParen}[1]{\SCSetCrefLabelcrefFormatsForType{#1}{(}{)}} | ||
|
||
% Листинг | ||
\crefformat{ListingEnv}{#2#1#3} % одиночная ссылка с приставкой | ||
\labelcrefformat{ListingEnv}{#2#1#3} % одиночная ссылка без приставки | ||
\crefrangeformat{ListingEnv}{#3#1#4 \cyrdash~#5#2#6} % диапазон ссылок с приставкой | ||
\labelcrefrangeformat{ListingEnv}{#3#1#4 \cyrdash~#5#2#6} % диапазон ссылок без приставки | ||
\crefmultiformat{ListingEnv}{#2#1#3}{ и~#2#1#3}{, #2#1#3}{ и~#2#1#3} % перечисление ссылок с приставкой | ||
\labelcrefmultiformat{ListingEnv}{#2#1#3}{ и~#2#1#3}{, #2#1#3}{ и~#2#1#3} % перечисление без приставки | ||
\SCSetCrefLabelcrefFormatsForTypeParen{equation} | ||
\SCSetCrefLabelcrefFormatsForTypeParen{subequation} | ||
\SCSetCrefLabelcrefFormatsForTypeSimple{chapter} | ||
\SCSetCrefLabelcrefFormatsForTypeSimple{section} | ||
\SCSetCrefLabelcrefFormatsForTypeSimple{appendix} | ||
\SCSetCrefLabelcrefFormatsForTypeSimple{figure} | ||
\SCSetCrefLabelcrefFormatsForTypeSimple{table} | ||
\SCSetCrefLabelcrefFormatsForTypeSimple{lstlisting} | ||
\SCSetCrefLabelcrefFormatsForTypeSimple{ListingEnv} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
На мой взгляд, это изменение следует убрать.
Оригинальный код хоть и повторяющийся, позволяет легко найти и изменить настройку для определённого элемента. Для внесения изменений в принцыпе даже можно не открывать мануал -- синтаксис команд довольно прозрачный.
Новый код же прячет определения подписей внутрь команды. Что надо сделать,чтобы изменить, скажем, подпись только для таблицы, из нового кода решительно не ясно.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Согласен, читаемость прям сильно пострадала (не могу сказать, что раньше была хорошей, но как будто лучше чем в новом варианте). Всякие ООП приколы с наследованиями... уух 🤯
labelcrefrangeformat
и подобные хотя бы из самого пакета cleveref
, при желании разобраться, люди могут нагуглить откуда это и что, а вот SCSetCrefLabelcrefMultiFormats
это же местное создание, с которым лет через пять и не разберешься...
Может быть, сможете собрать лучшее из всех миров? Сделать одну-две заготовки, которые не будут плодить копипасту, но прям хорошо управляемые и документированы. Я бы хотел сказзать, что "давайте вместе подумаем/поделаем" но тут прям очень тяжелое для восприятия получилось. Раньше хоть блоки по три отсылки типа #2#1#3
, а теперь блоки по несколько, сиди гадай когда там один #
, а когда два ставить: {#1}{#2##3##1##4#3
.
@@ -52,6 +52,7 @@ \section{Длинное название параграфа, в котором | |||
\end{figure} | |||
|
|||
На рисунке~\cref{fig:knuth_2-1} показан Дональд Кнут без головного убора. | |||
%\Cref{fig:knuth_2-1} показывает Дональда Кнута без головного убора. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тут как будто это просто работает по принципу "не падает". Может быть, сделаете какой-то пример, где будет использоваться как раз возможность из cleveref
, что \Cref
предназначен для вставки в начало предложения? Как раз может получиться какая-то заготовка для тех случаев, когда хотят, чтобы к рисункам и таблицам были ссылки вида Рисунок 5.5б
или в Таблице 25
(как описано в конце https://github.com/AndreyAkinshin/Russian-Phd-LaTeX-Dissertation-Template/wiki/Customization#%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BD%D1%83%D0%BC%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8-%D1%80%D0%B8%D1%81%D1%83%D0%BD%D0%BA%D0%BE%D0%B2-%D0%B8-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86).
\crefmultiformat{lstlisting}{#2#1#3}{ и~#2#1#3}{, #2#1#3}{ и~#2#1#3} % перечисление ссылок с приставкой | ||
\labelcrefmultiformat{lstlisting}{#2#1#3}{ и~#2#1#3}{, #2#1#3}{ и~#2#1#3} % перечисление без приставки | ||
\newcommand*{\SCSetCrefFormatBase}[2]{\csname #1format\endcsname{#2}} % имя настройки, тип ссылки | ||
\newcommand*{\SCSetCrefLabelcrefFormats}[3]{% подимя настройки, тип ссылки, формат |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
подимя
если это калька с subname, то правильней писать "подымя"
@@ -39,7 +39,10 @@ | |||
} | |||
|
|||
%%% Подписи подрисунков %%% | |||
\DeclareCaptionSubType{figure} | |||
|
|||
% "For the environments figure & table [...] this [вызов \DeclareCaptionSubType] will be done automatically" © texdoc subcaption |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Это с какой версии?
@@ -282,6 +282,8 @@ \subsection{Нумерованные формулы}\label{subsec:ch1/sec3/sub3} | |||
\end{align} | |||
\end{subequations} | |||
|
|||
Список ссылок сортируется, после чего (по возможности) схлопывается до диапазонов: \cref{eq:equation2,eq:2p3,eq:subeq_2,eq:equation1,eq:subeq_1}. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Хороший пример, интересный. Пригодится в любом случае. Но вот почему, если его вставить в старый код, то соберется тире без отбития пробелов (может так более правильно, хорошо бы ГОСТ по этому поводу найти), а с новым - с отбитием пробелами (ф-л. это видать заготовка под ф
ормул, как будто лишняя, действительно)?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
rangemulti что ли там по-другому пробелы отрабатывает, или отсутствие ф-л.
всё растянуло 🤔
PR checklist
Пожалуйста, убедитесь, что Ваш PR удовлетворяет требованиям:
make examples
)make indent
)Тип PR
Отметьте графы, которые относятся к данному PR:
Описание PR
Настройки cleveref в common/styles.tex:
\Cref
падала с ошибкойСмежные обсуждения
Данный PR закрывает issue:
Тестирование шаблона
Тестирование производилось в среде
Другая информация