我在 PDF 文档中显示特殊字符时遇到了问题,因为它们无法被 Latex 解释。
为了不误将我的问题视为重复,让我解释一下我的目的以及我已经取得了多大进展。
我正在尝试制作一个 PDF 文档,其中包含一对用户名和密码,每对都占一行,并在每对之间填充连字符。到目前为止,我通过以下代码行实现了这一点:
\documentclass[a4paper,oneside,12pt]{article}
\newcommand{\dashfill}{
\leavevmode\xleaders\hbox{-}\hfill\kern0pt
}
\begin{document}
\noindent
1. [email protected] \dashfill passphrase
\end{document}
注意我在其他线程中发现的新命令\dashfill
。这会在我进一步解释时造成麻烦。
当我意识到密码短语包含将被 Latex 解释的特殊字符时出现的第一个问题,例如:
\begin{document}
1. [email protected] \dashfill not all $characters$ are accepted
\end{document}
输出结果如下:
当然,这是不可接受的,因为美元符号$
字符被遗漏了,而且这只是一个字符,密码短语中可以有更多的特殊字符,并且由于它们是动态生成的,我无法判断哪些字符需要转义,如果可以的话。
我搜索并意识到有一个\verbatim
块,但它不是一个答案,因为\dashfill
命令或任何其他命令在该块内不起作用(请告诉我):
\begin{verbatim}
1. [email protected] \dashfill not all $characters$ are accepted
\end{verbatim}
期望输出的形式为:
01. [email protected] ---- P@$$phr@$e
有了它,用户名和密码部分应该按原样打印在文档上,并且\dashfill
应该解释它们之间的命令。
我搜索了逐字内联和类似的,我发现了这个解决方案:
\documentclass[a4paper,oneside,12pt]{article}
\newcommand{\dashfill}{
\leavevmode\xleaders\hbox{-}\hfill\kern0pt
}
\begin{document}
\noindent
\expandafter\string\csname 01. [email protected] \endcsname
\dashfill
\expandafter\string\csname passphrase \endcsname\\
\end{document}
虽然看起来有所改进,但仍然存在主要问题:
- 仍然有一些字符未被打印,如下划线
_
,因为单词With
被下划线包围了。 - 前面有一个奇怪的引号字符用户名和密码部分。
我对 LaTeX 的复杂性感到困惑!
但应该有一种方法可以按需要查看用户名和密码。是吗?
答案1
逐字逐句地吸收密码:
\documentclass[a4paper,oneside,12pt]{article}
\newcommand{\dashfill}{% <--- don't forget
\leavevmode\xleaders\hbox{-}\hfill\kern0pt
}
\NewDocumentCommand{\passphrase}{mv}{%
\texttt{#1}~\dashfill~\texttt{#2}%
}
\begin{document}
\begin{enumerate}
\item\passphrase{[email protected]}{passphrase}
\item\passphrase{[email protected]}{&6^00-\\uu%}
\item\passphrase{[email protected]}|&{6^00-\\uu%|
\end{enumerate}
\end{document}
您可以看到,您甚至可以在密码中使用不匹配的括号,只要您用密码中不存在的字符 (在本例中|
) 来分隔它即可。
如果您运行的是 2021 年 10 月之前的 LaTeX 版本,则可能需要添加\usepackage{xparse}
。