2

これは奇妙なものです。少しでも機能させるために、いくつかの興味深い回避策を講じる必要がありましたが、別の障害があります。

大きな .ind ファイル (連結された小さな個々の .idx ファイルから makeindex を使用して作成されたインデックス) を使用する別のドキュメントを作成するのに苦労してきました。索引付けされたデータが発生するページ番号。

この目的のために、すべてのインデックス エントリを収集するコマンドを次のように定義する必要がありました。

\newcommand{\myindexer}[3]
    {\index{myindex}{#1 : #2.#3!\href{\doctitle.pdf}}}

結果は、myindex.idx ファイルのインデックス エントリとして次のようになります。

\indexentry{IndexedItemA : 55.iii!\href{Volume 1.pdf}{Volume 1.pdf}}{30}}
\indexentry{IndexedItemB : 23.vi!\href{Volume 3.pdf}{Volume 3.pdf}}{114}}

しかし、ターゲット PDF へのハイパーリファレンスを作成しようとすると問題が発生します。特定のページで PDF を開くには、次の形式を使用する必要があります (hyperref パッケージの #page.xx 構文を指摘してくれたこのボードの他の人に感謝します)。

\href{FILENAME#page.XX}{Link Text}

これは、myindex が宣言されたときに、\newcommand の出力ストリームにハッシュ マークを含める必要があることを意味します。

\newcommand{\myindexer}[3]
    {\index{myindex}{#1 : #2.#3!\href{\doctitle.pdf\#page.\thepage}}}

または、二重ハッシュマークを次のように使用してどこかで見つけたフラグメントによると:

\newcommand{\myindexer}[3]
    {\index{myindex}{#1 : #2.#3!\href{\doctitle.pdf##page.\thepage}}}

前者の場合、索引付けされている複数のドキュメントのラテックス ソースのコンパイル中に次のエラーが発生します。

! Illegal parameter number in definition of \@gtempa.
<to be read again>
                   \thepage
l.31 \myindex{IndexedItemA}{55}{iii}

後者は、結果の myindex.idx ファイルに次のように不要なバックスラッシュをもたらします。

\indexentry{IndexedItemA : 55.iii!\href  {Volume 1.pdf\#page.33}{Volume 1}}{33}

その結果、ターゲット PDF が正しく開かれません。

この方法でPDFのハイパーリンクをサポートするために、newcommandにハッシュマークを強制的に出力させる方法はありますか?

4

2 に答える 2

0

# と %のcatcodeを入れ替えることができます。

\catcode`\%=6 \catcode`\#=12

次に % を使用してパラメーターをマークします。

\newcommand{\myindexer}[3]
    {\index{myindex}{%1 : %2.%3!\href{\doctitle.pdf#page.\thepage}}}

その後、通常の catcode を復元します。

\catcode`\%=12 \catcode`\#=6

これはちょっと不器用ですが、何かが通常のエスケープメカニズムを妨害しても機能する\hrefはずであり、使用された時点で拡張することができます\myindexer

于 2010-03-05T07:25:24.213 に答える
0

でラップするの\href\protectどうですか?

于 2010-03-05T03:09:23.660 に答える