![外部纯文本文件的长度](https://linux22.com/image/330231/%E5%A4%96%E9%83%A8%E7%BA%AF%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E7%9A%84%E9%95%BF%E5%BA%A6.png)
(Xelatex)如何确定外部纯文本文件的最大行长度(例如字符数)?此文件可能包含特殊的 Latex 字符。
Usecase 是 minted 语法高亮的代码,应该作为外部文件存储。此外,这些 minted 代码片段位于 mdframed、minipage、center 环境中。
因此,代码应居中,背景应适合一行的最大长度。在我的示例中,始终需要调整,例如 12 厘米。
我无法确定铸模代码的宽度。我的解决方法是使用纯字符计数。
\documentclass[a4paper]{article}
\usepackage{minted}
\usepackage{mdframed}
\begin{document}
\begin{center}
\begin{minipage}{12cm}
\begin{mdframed}[backgroundcolor=green!10!white, userdefinedwidth=12cm]
\inputminted{python}{example.py}
\end{mdframed}
\end{minipage}
\end{center}
\end{document}
我试过了:
- 计算:\widthof
- \输入
- 逐字:\verbatiminput
- 字符串字符串:\stringlength
无法对包含特殊 Latex 字符的字符串使用 \widthof 和 \stringlength,例如:{}。Verbatim 在这些宏中不起作用。
答案1
忍不住要扩展我之前的评论……
这是一个简单的例子,你可以用它来编译-shell-escape
:
\RequirePackage{filecontents}
\begin{filecontents*}{example.py}
#!/usr/bin/env python
Celsius = int(raw_input("Enter a temperature in Celsius: "))
Fahrenheit = 9.0/5.0 * Celsius + 32
print "Temperature:", Celsius, "Celsius = ", Fahrenheit, " F"
\end{filecontents*}
\documentclass[a4paper]{article}
\parindent0pt
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{minted}
\usepackage{mdframed}
% the data file
\def\keyfile{example.py}
% find the longest line and print value to `longline.wc`
% compile with `-shell-escape` option
\immediate\write18{wc -L \keyfile | awk '{print $1}' > longline.wc} %$
% read in value to \longlineval
\newread\longline
\openin\longline=longline.wc
\read\longline to \longlineval
% convert value from longline.wc to a 'pt' value
\newlength\longlineconv
\longlineconv=\longlineval pt
% multiply by a chosen factor (here: 5.25)
\def\mfactor{5.75}
\newlength\mdlen
\setlength\mdlen{\dimexpr \mfactor\longlineconv \relax}
\begin{document}
Longest line of ``\keyfile'': \longlineval\par
Multiplication factor: \mfactor\par
Result of multiplication factor: \the\mdlen\par
\bigskip
% Using the length
\begin{center}
\begin{minipage}{12cm}
\begin{mdframed}[backgroundcolor=green!10!white, userdefinedwidth=\mdlen]
\inputminted{python}{example.py}
\end{mdframed}
\end{minipage}
\end{center}
\end{document}