\newcommand のアンダースコアに関する問題

\newcommand のアンダースコアに関する問題

私は現在論文を執筆中で、各章を別々のプロジェクトとして扱っています。それらを結合すべきだと言われたのですが、今はやりたくないです。なぜなら、それは大変なことだからです。他の章、つまり他のプロジェクトにある図、表、方程式などのラベルを参照できるようにしたいのです。そうすれば、最終的に章を 1 つのプロジェクトとしてリンクしたときに、相互参照がすべて正常に機能します。この段階で参照を追加すると、参照が存在しないため、当然警告が表示されます。私がやりたいのは、これらの外部参照のオン/オフを切り替えることができるコマンドです。このコマンドを\refext「外部参照」と呼びます。最初は、次のようなコードでした。

オプション1: 何もしない、準備ができていない、参照を単語として出力する

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

オプション 2: はい、どうぞ参照してください。これらすべてを 1 つのドキュメントにまとめる準備ができています。

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

使用していないコマンドをコメントアウトすると、ラベルの名前を出力するか、通常の参照として扱うかを切り替えることができます。

これは、ラベルが 1 つの単語である場合に機能します。ただし、ラベルのタイトルにアンダースコアが含まれている場合は機能しません。これは、すべてのラベルに含まれています。

いくつか読んだ後、私がやりたいことと似たこの答えを見つけました: アンダースコアを \newcommand に適切に渡すにはどうすればよいですか?

しかし、私はこれを試してみましたが、うまくいきませんでした:

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

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

「ドキュメントの開始部分が見つかりません」というエラーが表示されますが、もちろん、ドキュメントを開始する前にルールを定義したいです。他のすべての要素が\newcommand同じ場所にあるため、ドキュメントは正常にコンパイルされます。

Catcode 12 も機能しません。アンダースコアをテキストとして処理した方がよいと考えたため、11 に切り替えました。

ここで何をしているのかよくわかりません。LaTeX にあまり詳しくなく、この新しいコマンド領域に少し無知な状態で入りました。助けていただければ幸いです。ありがとうございます。

答え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}

ここに画像の説明を入力してください

関連情報