我正在使用模板,我想使用doclicense
包并希望它根据当前语言显示许可证信息。不幸的是,出于某种原因,它没有按预期运行。
最小类文件示例testclass.cls
如下所示:
\ProvidesClass{testclass}
\LoadClass{article}
\RequirePackage[brazilian,english]{babel}
\RequirePackage[
type={CC},
modifier={by},
version={4.0},
]{doclicense}
\def\@keytest{
\iflanguage{english}{test}{
\iflanguage{portuguese}{TESTE}{not found}
}}
\newcommand{\showtest}{%
\@keytest\par
\doclicenseText\par
\doclicenseIcon
}
文件.tex
如下:
\documentclass[brazilian,english]{testclass}
\usepackage[utf8]{inputenc}
\title{Teste}
\author{Eu}
\begin{document}
\selectlanguage{brazilian}
\maketitle
\showtest
\end{document}
上述代码将语言设置为的结果english
为:
将语言设置为的结果brazilian
为:
请注意,文章的日期和测试变量(keytest
)的值已相应改变,但许可证文本却没有改变。
答案1
doclicense 没有更改文档语言的代码。它将使用\languagename
加载包时设置的任何语言。
如果您想要巴西语,您可以手动加载语言定义。请注意,它们包含空行和空格,因此请在段落之间执行此操作:
\documentclass{article}
\RequirePackage[brazilian,english]{babel}
\RequirePackage[
type={CC},
modifier={by},
version={4.0},
]{doclicense}
\begin{document}
\selectlanguage{brazilian}
\doclicenseText\par
\doclicenseIcon
\makeatletter\input{doclicense-brazilian.ldf}\makeatother
\doclicenseText\par
\doclicenseIcon
\end{document}
答案2
使用提供的提示@ulrike-fischer,我已将解决方案嵌入到中newcommand
。
\documentclass{article}
\RequirePackage[brazilian,english]{babel}
\RequirePackage[
type={CC},
modifier={by},
version={4.0},
]{doclicense}
\newcommand{\tlprintlicense}{
\iflanguage{english}{\makeatletter\input{doclicense-english.ldf}\makeatother\doclicenseText\par\doclicenseIcon}{
\iflanguage{french}{\makeatletter\input{doclicense-french.ldf}\makeatother\doclicenseText\par\doclicenseIcon}{
\iflanguage{german}{\makeatletter\input{doclicense-german.ldf}\makeatother\doclicenseText\par\doclicenseIcon}{
\iflanguage{portuguese}{\makeatletter\input{doclicense-brazilian.ldf}\makeatother\doclicenseText\par\doclicenseIcon}{\doclicenseText\par\doclicenseIcon}
}}}}
\begin{document}
\selectlanguage{brazilian}
\tlprintlicense
\selectlanguage{english}
\tlprintlicense
\end{document}