Проблема с подчеркиваниями в \newcommand

Проблема с подчеркиваниями в \newcommand

В настоящее время я пишу свою диссертацию, и каждая глава у меня как отдельный проект. Мне сказали, что я должен объединить их, но я пока не хочу этого делать, так как это будет для меня слишком утомительно. Я хотел бы иметь возможность ссылаться на метки рисунков, таблиц, уравнений и т. д., которые находятся в других главах, т. е. других проектах, чтобы, когда я в конечном итоге свяжу главы как один проект, перекрестные ссылки работали нормально. Если я добавлю ссылки на этом этапе, я, очевидно, получу предупреждения, потому что ссылки не существует. Я хотел бы иметь команду, которую я мог бы включать и выключать, которая включала бы и выключала эти внешние ссылки. Я называю эту команду \refext«внешняя ссылка». Изначально у меня был код, который выглядел так:

Вариант 1: Ничего не делать, я не готов, вывести ссылку словами

\newcommand{\refext}[1]{Ref. #1}

Вариант 2: Да, продолжайте и ссылайтесь на вышеизложенное — я готов собрать все эти вещи вместе в один документ:

\newcommand{\refext}[1]{\ref{#1}}

Я бы закомментировал команду, которую не использовал, и таким образом ее можно было бы «переключать». Она либо выводила бы имя метки, либо рассматривала бы ее как обычную ссылку.

Это работает, если метка состоит из одного слова. Однако это не работает, если метка содержит подчеркивание в названии, что есть во всех моих метках.

После некоторого чтения я наткнулся на этот ответ, который похож на то, что я хочу сделать: Как правильно передать подчеркивание в \newcommand?

Однако я попробовал это, и это мне не помогло:

\newcommand{\refext}{\begingroup\catcode`\_=11 \dorefext}

\newcommand{\dorefext}[1]{\ref{#1}}

Я получаю ошибку 'missing begin document', хотя, конечно, я хочу определить свои правила до того, как начну свой документ. Документ отлично компилируется, и все мои другие \newcommands находятся в том же месте.

Catcode 12 тоже не работает. Я заменил его на 11, потому что подумал, что было бы лучше, если бы он обрабатывал подчеркивание как текст.

Я действительно не знаю, что я здесь делаю! Я не очень разбираюсь в латексе и вошел в эту новую область команд немного вслепую! Помощь была бы очень признательна - спасибо!

решение1

Подчеркивания могут быть частью метки, но их печать обычно запрещена, поскольку подчеркивание используется в тексте для обозначения нижних индексов в математических формулах.

Вариант 2 не должен вызывать проблем: вы просто заменяете \refна \refext. Для варианта 1, когда вы хотите увидеть ключи, а не ссылку, вы можете сделать

\newcommand{\refext}[1]{Ref.~\texttt{\detokenize{#1}}}

Команда \detokenize, помимо прочего, сделает _печатным. Я добавил также \textttдля того, чтобы сделать ключ более очевидным в тексте.

Небольшой пример (я воспользуюсь вариантом 2):

\documentclass{article}

\newcommand{\refext}[1]{Ref.~\texttt{\detokenize{#1}}}

\begin{document}

Here's some text where we cite \refext{some_thing} and go on

\end{document}

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

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