
私の問題は次のコードです:
\documentclass{article}
\usepackage[english]{babel}
\begin{document}
\def\suplang{english}
\ifx\languagename\suplang
Supported language: \languagename
\else
Not supported language: \languagename
\fi
\end{document}
結果は「サポートされている言語: 英語」ではなく「サポートされていない言語: 英語」です。何が間違っているのでしょうか?
答え1
実装上の理由により、の置換テキストの\languagename
最初の文字はカテゴリコード12になります。\ifx
e
11n
11g
11l
11i
11s
11h
11
そして
e
12n
11g
11l
11i
11s
11h
11
は違う確かに、もしあなたが
\documentclass{article}
\usepackage[english]{babel}
\begin{document}
\edef\suplang{\string english}
\ifx\languagename\suplang
Supported language: \languagename
\else
Not supported language: \languagename
\fi
\end{document}
出力は次のようになります
そのビジネスを行う必要がありますか? いいえ、もちろん必要ありません。
\usepackage{pdftexcmds} % to work with all engines
\makeatletter
\newcommand{\supported}[3]{%
\ifnum\pdf@strcmp{\languagename}{#1}=\z@
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{#2}{#3}%
}
\makeatother
それから
\supported{suplang}
{Supported language: \languagename}
{Not supported language: \languagename}
働くでしょう。
\documentclass{article}
\usepackage[english]{babel}
\usepackage{pdftexcmds} % to work with all engines
\makeatletter
\newcommand{\supported}[3]{%
\ifnum\pdf@strcmp{\languagename}{#1}=\z@
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{#2}{#3}%
}
\makeatother
\def\suplang{english}
\begin{document}
\supported{\suplang}
{Supported language: \languagename}
{Not supported language: \languagename}
\end{document}
真と偽の分岐に対する\else
とを使用した代替定義:\fi
\documentclass{article}
\usepackage[english]{babel}
\usepackage{pdftexcmds} % to work with all engines
\makeatletter
\newcommand{\issupported}[1]{%
TT\fi\ifnum\pdf@strcmp{\languagename}{#1}=\z@
}
\makeatother
\def\suplang{english}
\begin{document}
\if\issupported\suplang
Supported language: \languagename
\else
Not supported language: \languagename
\fi
\end{document}
答え2
の答えegreg では、質問の例の予期しない結果の理由がすでに説明されており、問題を解決するためのいくつかの方法も示されています。
パッケージは、iflang
比較の内部内容を\languagename
単純なマクロでラップします\IfLanguageName
。質問の例は次のようになります。
\documentclass{article}
\usepackage[english]{babel}
\usepackage{iflang}
\begin{document}
\IfLanguageName{english}{%
Supported language: \languagename
}{%
Not supported language: \languagename
}
\end{document}