![将文件内容作为 PDF 注释(尊重 UTF-8)](https://linux22.com/image/452399/%E5%B0%86%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9%E4%BD%9C%E4%B8%BA%20PDF%20%E6%B3%A8%E9%87%8A%EF%BC%88%E5%B0%8A%E9%87%8D%20UTF-8%EF%BC%89.png)
我想将文件内容呈现为 PDF 文件中的注释。我决定pdf评论,这样就可以了。pdfcomment
需要将换行符排版为\textCR\textLF
。这让我想到了以下设置:
我想读取文件的内容,用 替换换行符\textCR\textLF
并将其传递给 pdfcomment。作为额外的挑战,需要保留诸如{
、 、 .. 之类的字符序列。\_
粗略的例子:
demo.bib
:
@article{demo,
author = {Demo Frühling},
comment = {Fr\"{u}hling}
}
读取文件后,应将以下文本传递给 pdfcomment:
@article{demo,\textCR\textLF
author = {Demo Frühling},\textCR\textLF
comment = {Fr\"{u}hling}\textCR\textLF
}\textCR\textLF
长期期望结果:
\pdfcomment[icon=Help]{
@article{demo,\textCR\textLF
author = {Demo Frühling},\textCR\textLF
comment = {Fr\"{u}hling}\textCR\textLF
}\textCR\textLF}
代码示例(无效)
\documentclass{article}
\usepackage{pdfcomment}
\newread\reader
\begin{document}
\begin{filecontents*}{demo.bib}
@article{demo,
author = {Demo Frühling},
comment = {Fr\"{u}hling}
}
\end{filecontents*}
\pdfcomment[icon=Help]{
\makeatletter
\advance\endlinechar \@M
\openin%
\reader=demo.bib%
\relax
\loop
\read\reader to \x
\unless\ifeof\reader
\x \textCR\textLF
\repeat
\closein\reader
\advance\endlinechar -\@M
\makeatother
}
\end{document}
其结果如下:
这不是我想要的。评论应该包含文件全文。
解决方案思考
- 我玩过捕获文件,但没有成功。(相关问题:\CatchFileDef 与 ( \input 或 \@@input ))
- 我认为数据工具可以以
\DTLforeach
某种方式工作,但我不知道如何使用数据工具读取非 CSV 文件 - 读取数组看起来不错
readrecordarray
,但我不知道如何编写循环for
,尤其是结束条件对我来说不清楚。相关答案:https://tex.stackexchange.com/a/116901/9075
答案1
其实很简单 - 我只是不确定是否可以轻松包含换行符,但我相信你会发现的。使用 expl3 因为它的可读性更强 ;-)
\documentclass{article}
\usepackage{pdfcomment}
\begin{filecontents*}{demo.bib}
@article{demo,
author = {demo}
}
\end{filecontents*}
\begin{document}
\ExplSyntaxOn
\file_get:nnN {demo.bib} {
\char_set_catcode_other:N \_
\char_set_catcode_other:N \$
\char_set_catcode_other:N \{
\char_set_catcode_other:N\}
} \l_tmpa_tl
\exp_args:NnV \use:n {\pdfcomment[icon=Help]}{\l_tmpa_tl}
\ExplSyntaxOff
\end{document}
如果您不想手动将所有字符更改为其他字符,您也可以遍历序列并将文件读取为字符串:
\documentclass{article}
\usepackage{pdfcomment}
\begin{filecontents*}{demo.bib}
@article{demo,
author = {demo}
}
\end{filecontents*}
\begin{document}
\ExplSyntaxOn
\ior_new:N \l_tmpa_ior
\ior_open:Nn \l_tmpa_ior {demo.bib}
\seq_clear:N \l_tmpa_seq
\ior_str_map_inline:Nn \l_tmpa_ior {
\seq_put_right:Nn \l_tmpa_seq {#1}
}
\exp_args:Nnx \use:n {\pdfcomment[icon=Help]}{\seq_use:Nn \l_tmpa_seq {\textLF}}
\ExplSyntaxOff
\end{document}