如何轻松处理具有许多 % 的 urlencoded 链接?

如何轻松处理具有许多 % 的 urlencoded 链接?

我有一个这样的链接:

    % Works:
    \href{https://www.google.com}{中国药科大学}

    % Does not work:
\href{https://baike.baidu.com/item/%E4%B8%AD%E5%9B%BD%E8%8D%AF%E7%A7%91%E5%A4%A7%E5%AD%A6/248835}{中国药科大学}

我该怎么做才能使链接正常工作?我不想\在每个之前添加%。我已经尝试过:

    \href{\url{balabalabala.....}}{中国药科大学}

但这不起作用。我还尝试过:

    \urldef{\UniversityIntro}\url{balabalabala....}
   
    \href{\UniversityIntro}{中国药科大学}

这不起作用。我应该如何处理 href url 以使其在 latex 中作为 url 工作?不是视图问题:

在此处输入图片描述

当我添加 zh 单词时,显示类似的错误。

\cventry{2009.09-2013.06}{本科}{\href{https://www.google.com/中}{\underline{\textcolor{blue}{\emph{中国药科大学}}}}}{江苏南京}{\textit{信息管理与信息系统专业}}{}  

我现在正在使用 modernCV 撰写个人简历。这是完整文档:

%% start of file `template-zh.tex'.
%% Copyright 2006-2013 Xavier Danaux ([email protected]).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
% available at http://www.latex-project.org/lppl/.

\documentclass[11pt,a4paper,roman]{moderncv}   % possible options include font size ('10pt', '11pt' and '12pt'), paper size ('a4paper', 'letterpaper', 'a5paper', 'legalpaper', 'executivepaper' and 'landscape') and font family ('sans' and 'roman')

% moderncv 主题
\moderncvstyle{classic}                        % 选项参数是 ‘casual’, ‘classic’, ‘oldstyle’ 和 ’banking’
\moderncvcolor{black}                          % 选项参数是 ‘blue’ (默认)、‘orange’、‘green’、‘red’、‘purple’ 和 ‘grey’
%\nopagenumbers{}                             % 消除注释以取消自动页码生成功能

% 字符编码
\usepackage[utf8]{inputenc}                   % 替换你正在使用的编码
\usepackage{multirow}
\usepackage{xeCJK}
\usepackage{hyperref}

%\setCJKmainfont{SimSun}
% 调整页面出血
\usepackage[scale=0.75]{geometry}

\setlength{\hintscolumnwidth}{3cm}           % 如果你希望改变日期栏的宽度
\setlength{\parindent}{0cm}                 %段落缩进

% 个人信息
\name{John}{}
\title{软件开发(Java)}                     % 可选项、如不需要可删除本行
%\address{街道及门牌号}{邮编及城市}            % 可选项、如不需要可删除本行
\extrainfo{性别:男~~出生日期:1991年3月}                 % 可选项、如不需要可删除本行
%\photo[64pt][0.4pt]{IcdU7}                  % ‘64pt’是图片必须压缩至的高度、‘0.4pt‘是图片边框的宽度 (如不需要可调节至0pt)、’picture‘ 是图片文件的名字;可选项、如不需要可删除本行
%\quote{引言(可选项)}                          % 可选项、如不需要可删除本行

% 显示索引号;仅用于在简历中使用了引言
%\makeatletter
%\renewcommand*{\bibliographyitemlabel}{\@biblabel{\arabic{enumiv}}}
%\makeatother

\urldef{\UniversityIntro}\url{http://www.w3.org/file%query}

% 分类索引
%\usepackage{multibib}
%\newcites{book,misc}{{Books},{Others}}
%----------------------------------------------------------------------------------
%            内容
%----------------------------------------------------------------------------------

\begin{document}   
             
\maketitle

\section{教育背景}
%\cventry{2006.09-2009.06}{高中}{重庆市大足中学}{重庆大足}{\textit{理科}}{}  % 第3到第6编码可留白
\cventry{2009.09-2013.06}{本科}{\href{\url{https://baike.baidu.com/item/%E4%B8%AD%E5%9B%BD%E8%8D%AF%E7%A7%91%E5%A4%A7%E5%AD%A6/248835}}{\underline{\textcolor{blue}{\emph{中国药科大学}}}}}{江苏南京}{\textit{信息管理与信息系统专业}}{}  % 第3到第6编码可留白
\clearpage

\end{document}

%% 文件结尾 `template-zh.tex'.

我想要做的是添加带有大学名称的链接,然后单击该名称以链接到网站。似乎无论我怎么尝试,都没有用。这是网站链接:https://baike.baidu.com/item/%E4%B8%AD%E5%9B%BD%E8%8D%AF%E7%A7%91%E5%A4%A7%E5%AD%A6/248835

我现在正在使用 latexmk 来编译 pdf,这是命令:

#!/usr/bin/env bash

# 当使用未初始化的变量时,程序自动退出
# 也可以使用命令 set -o nounset
set -u

# 当任何一行命令执行失败时,自动退出脚本
# 也可以使用命令 set -o errexit
set -e

set -x

/Library/TeX/texbin/latexmk -pdfxe -pvc -xelatex -interaction=nonstopmode -output-directory="./output"

并使用 Visual Studio Code 编辑文本。有什么建议可以让它工作吗?尝试过这样的方法:

https://baike.baidu.com/item/\%E4\%B8\%AD\%E5\%9B\%BD\%E8\%8D\%AF\%E7\%A7\%91\%E5\%A4\%A7\%E5\%AD\%A6/248835

但这种方式太丑陋了。

答案1

正如 Ulrike 在评论中提到的那样,您不能将\href\url命令作为另一个命令的参数,因为 url 参数的内容是逐字处理的。因此,类似

\cventry{...}{\href{...}{...}}{...}

不允许。

\cventry针对这种特定情况的一种解决方法是从源中获取命令的定义moderncv,将其分成机构/雇主参数之前的部分和之后的部分,然后\href在主文档中的两部分之间使用。在代码中:

\entryleft{years}{title}
\href{url}{caption}
\entryright{location}{description}

完整的 MWE,包含从中复制的定义moderncvbodyi.sty(moderncv 的默认主体样式):

%% start of file `template-zh.tex'.
%% Copyright 2006-2013 Xavier Danaux ([email protected]).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c,
% available at http://www.latex-project.org/lppl/.

\documentclass[11pt,a4paper,roman]{moderncv}
\moderncvstyle{classic}                        % 选项参数是 ‘casual’, ‘classic’, ‘oldstyle’ 和 ’banking’
\moderncvcolor{black}                          % 选项参数是 ‘blue’ (默认)、‘orange’、‘green’、‘red’、‘purple’ 和 ‘grey’
\usepackage[utf8]{inputenc}                   % 替换你正在使用的编码
\usepackage{multirow}
\usepackage{xeCJK}

\setCJKmainfont{Noto Serif CJK SC} % just for testing
% 调整页面出血
\usepackage[scale=0.75]{geometry}

\setlength{\hintscolumnwidth}{3cm}           % 如果你希望改变日期栏的宽度
\setlength{\parindent}{0cm}                 %段落缩进

% 个人信息
\name{John}{}
\title{软件开发(Java)}                     % 可选项、如不需要可删除本行
\extrainfo{性别:男~~出生日期:1991年3月}                 % 可选项、如不需要可删除本行

% definitions copied from moderncvbodyi.sty
\newcommand{\entryleft}[2]{%
\begin{tabular}{@{}p{\hintscolumnwidth}@{\hspace{\separatorcolumnwidth}}p{\maincolumnwidth}@{}}%
\raggedleft\hintstyle{#1} &  {\bfseries #2},%
}
\newcommand{\entryright}[2]{%
, #1, \textit{#2}.\strut%
\end{tabular}%
\par%
}

\begin{document}   
             
\maketitle

\section{教育背景}
\cventry{2006.09-2009.06}{高中}{重庆市大足中学}{重庆大足}{\textit{理科}}{}  % 第3到第6编码可留白

\entryleft{2009.09-2013.06}{本科}
\href{https://baike.baidu.com/item/%E4%B8%AD%E5%9B%BD%E8%8D%AF%E7%A7%91%E5%A4%A7%E5%AD%A6/248835}{\underline{\textcolor{blue}{\emph{中国药科大学}}}}
\entryright{江苏南京}{信息管理与信息系统专业}
\clearpage

\end{document}

%% 文件结尾 `template-zh.tex'.

结果:

在此处输入图片描述

而且,重要的是,链接有效 :) 请注意,我\cventry稍微简化了代码,现在它不再处理可选参数、空参数、字体设置。因此,如果您想使用更多或不同的参数,可能需要进行一些调整。我还更改了主字体以进行测试,但这当然与解决方案无关。

相关内容