繁体   English   中英

Latex: \newcommand interpret # 符号问题

[英]Latex: \newcommand interpret # symbol problem

我定义了一个新命令

\newcommand{\test}[1]{\href{https://github.com/microsoft/vscode/blob/main/package.json#1}{#1}}

当我按如下方式使用它时:

\test{#L4}

url 将被解释为:

https://github.com/microsoft/vscode/blob/main/package.json##L4

url 中有一个额外的# ,这是意料之外的。 我真正想要的是:

https://github.com/microsoft/vscode/blob/main/package.json#L4

这意味着 package.json 代码的第 4 行

解决问题的最简单但不那么优雅的方法如下。

\test{\#L4}

但是如果我复制的 url 部分中出现了_等其他特殊字符怎么办? 纠正这些无意义的语法错误很无聊。

有没有更优雅的方法来解决问题? 我想要的是将纯文本(url 的一部分)复制到 latex 代码中,并且不需要额外的工作,例如在#之前添加\转义字符和其他特殊字符。

我想要的是将纯文本(url 的一部分)复制到 latex 代码中,并且不需要额外的工作,例如在 # 之前添加 \ 转义字符和其他特殊字符。

恐怕这需要额外的努力,因为在 LaTeX 中, #被用作宏的参数。 您可以重新定义类别,当#被消耗时,恢复其原始含义。

我有另一个基于expl3的解决方案,我在其中保存主地址并创建带有附加部分的链接。 请看下面的小演示

\documentclass{article}
\usepackage[colorlinks]{hyperref}
\usepackage[margin=1in]{geometry}       % To fit long links without breaks

\ExplSyntaxOn
\str_new:N  \l__xaddr_main_str
\str_new:N  \l__xaddr_show_str
\cs_new:Npn \combine_addr:n #1 {
    \str_set:Nn \l_tmpa_str {#1}
    \str_concat:NNN \l__xaddr_show_str \l__xaddr_main_str \l_tmpa_str
}
\NewDocumentCommand\xsetmainaddr{v}{
    \str_set:Nn \l__xaddr_main_str {#1}}
\NewDocumentCommand\xdisplay{v}{%
    \str_if_empty:NF \l__xaddr_main_str {
        \combine_addr:n {#1}
        \str_use:N \l__xaddr_show_str
    }}
\NewDocumentCommand\xhref{vv}{%
    \str_if_empty:NF \l__xaddr_main_str {
        \combine_addr:n {#1}
        \href{\l__xaddr_show_str}{#2}
    }}
\ExplSyntaxOff

\setlength\parindent{0pt}               % To fit long links without breaks


\begin{document}
\xhref{#L4}{GitHub}                     % Nothing to display. The main address is not defined.

\xsetmainaddr{https://github.com/microsoft/vscode/blob/main/package.json}
\par\xdisplay{#L4}                      % Display the full address including #L4
\par\xdisplay{#something_else%20here}   % all characters accepted
\par\xhref{#L4}{GitHub}                 % Generates link: <address>#L4

\bigskip

\xsetmainaddr{http://www.google.com}   % New address
\par\xhref{}{Google}                    % Generates link
\end{document}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM