我正在尝试在 Brother_QL_820NWB(一种可以裁切纸张的标签打印机)上打印地址标签。我有一个小脚本,它从用户输入中收集地址数据,然后调用我的 LaTeX 文件。用户输入会导致以下问题(我可以解决其中两个):a.) 一些公司名称对于默认选择的字体来说太长:我使用我在这里找到的一个小 LaTeX 脚本来解决这个问题,该脚本会更改为较小的字体大小,直到文本适合为止。b.) 我想尽可能地将纸张裁切得更紧密:我使用 pdfcrop 来解决这个问题。
这一切都奏效了,但我找不到办法摆脱 Fish & Friends 公司的问题
当 & 被解析且之前没有转义时,这肯定会导致 LaTeX 错误。我希望用 解决我的问题,\detokenize
但我不知道如何解决。
用户输入在\addresslabel
以下情况下被“收集”,并作为
pdflatex \def\addresslabel{Fish \& Friends \$\%üäöÜÄÖß\\John Doe\\Whateverstreet 123\\12345 Town\\country\\}\input{shipment-label.tex}
那么,如何在保持单行的情况下打印上述内容?如果这能让事情变得更容易,我可以将 \ 替换为其他任何内容。
非常感谢 Juergen
答案1
\detokenize 的正确语法是\detokenize\expandafter{\addresslabel}
,但是在您的示例中您不需要它(或者它会给出错误的输出),并且您将始终遇到百分比字符的问题。
给一些特殊字符赋予其他 catcode 可能更有意义:
{\catcode`\%=12 \catcode`\&=12 \catcode`\$=12 \gdef\addresslabel{Fish & Friends $\%üäöÜÄÖß\\ John Doe\\ Whateverstreet 123\\ \ \\ 12345 Town\\ country\par}}
\documentclass{article}
\begin{document}
\addresslabel
\end{document}
答案2
您没有指定您使用的操作系统,或者如果您使用 Linux,则指定哪个终端。假设 Linux 中的 Bash 您需要转义\\
并引用整个输入。请注意,您不\&
需要在和\%
或命令序列中转义斜线,例如\addresslabel
,但你做需要它\\$
。
$ pdflatex "\def\addresslabel{Fish \& Friends \\$\%üäöÜÄÖß\\\\John Doe\\\\Whateverstreet 123\\\\12345 Town\\\\country\\\\}\documentclass{article}\begin{document}\addresslabel\end{document}"
结果:
事实上,正如评论中提到的那样,一种更简单的方法是使用单引号而不是转义反斜杠:
$ pdflatex '\def\addresslabel{Fish \& Friends \$\%üäöÜÄÖß\\John Doe\\Whateverstreet 123\\12345 Town\\country\\}\documentclass{article}\begin{document}\addresslabel\end{document}'