我正在将 Word 文档翻译成 LaTeX,作为一种学习体验。现在有这个表,它已经有硬编码值。但是,我想让它通用,这样更改 .tex 文件中的单个数字就会更改列的行数。所有值都是根据行的键通过以下算法计算的。
给定一个实数,计算一个骰子(6 面)的数字和一个整数修正值,该修正值不大于 +- 3。期望值修改后的掷骰子结果应等于输入数字,且误差不高于 0.5。使算法具有确定性。
可以这样做吗?请提出进一步的阅读建议。
类似这样的内容:
[dice, mod] foo(expected)
dice = floor(expected / 3.5)
mod = floor(expected - dice * 3.5)
但是,如果有一种算法能够平衡正负修正的使用,那就更好了。此外,妥善处理低于 3.5 的值也很好(始终至少包含一个骰子)。
例如,12 将输出 3 个骰子 +1 个修正值,总预期值为 11.5。
源表是这样的,但不必严格遵循。
答案1
这就是你的目标吗?
\documentclass[12pt]{article}
\usepackage{xintfrac}
\usepackage{xintexpr}
\begin{document}\thispagestyle{empty}
% dice = floor(expected / 3.5)
% mod = floor(expected - dice * 3.5)
\def\rows {12}
\begin{tabular}{ccc}
\hline
expected & dice & mod \\
\hline
\xintFor* #1 in {\xintSeq {1}{\rows}}
\do
{ #1 & \xinttheexpr floor(#1 / 3.5)\relax
& \xinttheexpr floor(#1 - floor(#1/3.5)*3.5)\relax \\ }
\hline
\end{tabular}
% \begin{tabular}{ccc}
% $*1$&$*2/3$&$*1/2$\\
% \xintFor* #1 in {\xintSeq {1}{30}}
% \do
% {$#1$&$\xintRound {4}{\xintMul {#1}{2/3}}$&$\xintRound {2}{\xintMul {#1}{1/2}}$\\}
% \end{tabular}
\end{document}
我不确定是否理解得很好。这是我的第一个答案中的表格(上面的代码被注释掉了)。
\documentclass[12pt]{article}
\usepackage{xintfrac}
\begin{document}\thispagestyle{empty}
\begin{tabular}{ccc}
$*1$&$*2/3$&$*1/2$\\
\xintFor* #1 in {\xintSeq {1}{30}}
\do
{$#1$&$\xintRound {4}{\xintMul {#1}{2/3}}$&$\xintRound {2}{\xintMul {#1}{1/2}}$\\}
\end{tabular}
\end{document}
如果行数太多,一页无法容纳,则可以使用 longtable,或者TeX
原始的\halign
。